1 #!/usr/bin/env python 2 # Copyright (c) 2012 The Chromium Authors. All rights reserved. 3 # Use of this source code is governed by a BSD-style license that can be 4 # found in the LICENSE file. 5 6 """Start an HTTP server which serves Chrome Endure graphs. 7 8 Usage: 9 python endure_server.py [options] 10 11 To view Chrome Endure graphs from a browser, 12 run this script to start a local HTTP server that serves the directory 13 where graph code and test results are located. A port will be automatically 14 picked. You can then view the graphs via http://localhost:<GIVEN_PORT>. 15 16 Examples: 17 >python endure_server.py 18 Start a server which serves the default location 19 <CURRENT_WORKING_DIR>/chrome_graph. 20 21 >python endure_server.py --graph-dir=/home/user/Document/graph_dir 22 Start a server which serves /home/user/Document/graph_dir which 23 is where your graph code and test results are. 24 """ 25 26 import BaseHTTPServer 27 import logging 28 import optparse 29 import os 30 import SimpleHTTPServer 31 import sys 32 33 34 class HelpFormatter(optparse.IndentedHelpFormatter): 35 """Format the help message of this script.""" 36 37 def format_description(self, description): 38 """Override to keep original format of the description.""" 39 return description + '\n' if description else '' 40 41 42 def _ParseArgs(argv): 43 parser = optparse.OptionParser( 44 usage='%prog [options]', 45 formatter=HelpFormatter(), 46 description=__doc__) 47 parser.add_option( 48 '-g', '--graph-dir', type='string', 49 default=os.path.join(os.getcwd(), 'chrome_graph'), 50 help='The directory that contains graph code ' \ 51 'and data files of test results. Default value is ' \ 52 '<CURRENT_WORKING_DIR>/chrome_graph') 53 return parser.parse_args(argv) 54 55 56 def Run(argv): 57 """Start an HTTP server which serves Chrome Endure graphs.""" 58 logging.basicConfig(format='[%(levelname)s] %(message)s', level=logging.DEBUG) 59 options, _ = _ParseArgs(argv) 60 graph_dir = os.path.abspath(options.graph_dir) 61 cur_dir = os.getcwd() 62 os.chdir(graph_dir) 63 httpd = BaseHTTPServer.HTTPServer( 64 ('', 0), SimpleHTTPServer.SimpleHTTPRequestHandler) 65 try: 66 logging.info('Serving %s at port %d', graph_dir, httpd.server_port) 67 logging.info('View graphs at http://localhost:%d', httpd.server_port) 68 logging.info('Press Ctrl-C to stop the server.') 69 httpd.serve_forever() 70 except KeyboardInterrupt: 71 logging.info('Shutting down ...') 72 httpd.shutdown() 73 finally: 74 os.chdir(cur_dir) 75 return 0 76 77 78 if '__main__' == __name__: 79 sys.exit(Run(sys.argv[1:])) 80