普通文本  |  80行  |  2.48 KB

#!/usr/bin/env python
# Copyright (c) 2012 The Chromium Authors. All rights reserved.
# Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file.

"""Start an HTTP server which serves Chrome Endure graphs.

Usage:
    python endure_server.py [options]

To view Chrome Endure graphs from a browser,
run this script to start a local HTTP server that serves the directory
where graph code and test results are located. A port will be automatically
picked. You can then view the graphs via http://localhost:<GIVEN_PORT>.

Examples:
    >python endure_server.py
      Start a server which serves the default location
      <CURRENT_WORKING_DIR>/chrome_graph.

    >python endure_server.py --graph-dir=/home/user/Document/graph_dir
      Start a server which serves /home/user/Document/graph_dir which
      is where your graph code and test results are.
"""

import BaseHTTPServer
import logging
import optparse
import os
import SimpleHTTPServer
import sys


class HelpFormatter(optparse.IndentedHelpFormatter):
  """Format the help message of this script."""

  def format_description(self, description):
    """Override to keep original format of the description."""
    return description + '\n' if description else ''


def _ParseArgs(argv):
  parser = optparse.OptionParser(
      usage='%prog [options]',
      formatter=HelpFormatter(),
      description=__doc__)
  parser.add_option(
      '-g', '--graph-dir', type='string',
      default=os.path.join(os.getcwd(), 'chrome_graph'),
      help='The directory that contains graph code ' \
           'and data files of test results. Default value is ' \
           '<CURRENT_WORKING_DIR>/chrome_graph')
  return parser.parse_args(argv)


def Run(argv):
  """Start an HTTP server which serves Chrome Endure graphs."""
  logging.basicConfig(format='[%(levelname)s] %(message)s', level=logging.DEBUG)
  options, _ = _ParseArgs(argv)
  graph_dir = os.path.abspath(options.graph_dir)
  cur_dir = os.getcwd()
  os.chdir(graph_dir)
  httpd = BaseHTTPServer.HTTPServer(
      ('', 0), SimpleHTTPServer.SimpleHTTPRequestHandler)
  try:
    logging.info('Serving %s at port %d', graph_dir, httpd.server_port)
    logging.info('View graphs at http://localhost:%d', httpd.server_port)
    logging.info('Press Ctrl-C to stop the server.')
    httpd.serve_forever()
  except KeyboardInterrupt:
    logging.info('Shutting down ...')
    httpd.shutdown()
  finally:
    os.chdir(cur_dir)
  return 0


if '__main__' == __name__:
  sys.exit(Run(sys.argv[1:]))