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 8Usage: 9 python endure_server.py [options] 10 11To view Chrome Endure graphs from a browser, 12run this script to start a local HTTP server that serves the directory 13where graph code and test results are located. A port will be automatically 14picked. You can then view the graphs via http://localhost:<GIVEN_PORT>. 15 16Examples: 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 26import BaseHTTPServer 27import logging 28import optparse 29import os 30import SimpleHTTPServer 31import sys 32 33 34class 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 42def _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 56def 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 78if '__main__' == __name__: 79 sys.exit(Run(sys.argv[1:])) 80