blob: a253d4e77bca616ca47d633690837ecda584de60 [file] [log] [blame]
# Copyright 2018 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.
"""Runs a server to let the user interact with supersize using a web UI."""
import BaseHTTPServer
import logging
import os
import SimpleHTTPServer
class SupersizeHTTPRequestHandler(SimpleHTTPServer.SimpleHTTPRequestHandler,
object):
# Directory to serve files from
serve_from = None
# Path to data file
data_file_path = None
#override
def translate_path(self, path):
f = super(SupersizeHTTPRequestHandler, self).translate_path(path)
relative_path = os.path.relpath(f, os.getcwd())
if relative_path == 'data.ndjson':
return SupersizeHTTPRequestHandler.data_file_path
else:
return os.path.join(SupersizeHTTPRequestHandler.serve_from, relative_path)
def AddArguments(parser):
parser.add_argument('report_file',
help='Path to a custom html_report data file to load.')
parser.add_argument('-p', '--port', type=int, default=8000,
help='Port for the HTTP server')
parser.add_argument('-a', '--address', default='localhost',
help='Address for the HTTP server')
def Run(args, _parser):
logging.info('Starting server')
server_addr = (args.address, args.port)
static_files = os.path.join(os.path.dirname(__file__), 'static')
SupersizeHTTPRequestHandler.serve_from = static_files
SupersizeHTTPRequestHandler.data_file_path = args.report_file
httpd = BaseHTTPServer.HTTPServer(server_addr, SupersizeHTTPRequestHandler)
sa = httpd.socket.getsockname()
logging.warning(
'Server ready at http://%s:%d/viewer.html?load_url=data.ndjson',
sa[0], sa[1])
httpd.serve_forever()