Home | History | Annotate | Download | only in perf
      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