AX: AXIsolatedTree::updateChildren sometimes fails to update isolated subtrees when...
[WebKit.git] / Tools / Scripts / webkitpy / benchmark_runner / http_server_driver / http_server / twisted_http_server.py
1 #!/usr/bin/env python3
2
3 import argparse
4 import logging
5 import os
6 import sys
7
8 # Since we execute this script directly as a subprocess, we need to ensure
9 # that Tools/Scripts is in sys.path for the next imports to work correctly.
10 script_dir = os.path.abspath(os.path.join(os.path.dirname(os.path.abspath(__file__)), '../../../..'))
11 if script_dir not in sys.path:
12     sys.path.insert(0, script_dir)
13
14 from webkitpy.autoinstalled import twisted
15
16 from twisted.web import static, server
17 from twisted.web.resource import Resource
18 from twisted.internet import reactor
19
20 _log = logging.getLogger(__name__)
21
22
23 class ServerControl(Resource):
24     isLeaf = True
25
26     def render_GET(self, request):
27         _log.info("Serving request %s" % request)
28         reactor.stop()
29         return ""
30
31     def render_POST(self, request):
32         _log.info("Serving request %s" % request)
33         sys.stdout.write(request.content.read().decode('utf-8'))
34         sys.stdout.flush()
35         reactor.stop()
36         return 'OK'
37
38
39 if __name__ == '__main__':
40     parser = argparse.ArgumentParser(description='python twisted_http_server.py web_root')
41     parser.add_argument('web_root')
42     parser.add_argument('--port', type=int, default=0)
43     parser.add_argument('--interface', default='')
44     parser.add_argument('--log-path', default='/tmp/run-benchmark-http.log')
45     args = parser.parse_args()
46     web_root = static.File(args.web_root)
47     serverControl = ServerControl()
48     web_root.putChild('shutdown'.encode('utf-8'), serverControl)
49     web_root.putChild('report'.encode('utf-8'), serverControl)
50     reactor.listenTCP(args.port, server.Site(web_root, logPath=args.log_path), interface=args.interface)
51     reactor.run()