blob: 2444f8dfe2b029a5618e10de2de494dff2da5339 [file] [log] [blame]
showardd1ee1dd2009-01-07 21:33:08 +00001import os, BaseHTTPServer, cgi, threading
2import common
3from autotest_lib.scheduler import scheduler_config
4
5_PORT = 13467
6
7_HEADER = """
8<html>
9<head><title>Scheduler status</title></head>
10<body>
11Actions:<br>
12<a href="?reparse_config=1">Reparse global config values</a><br>
13<br>
14"""
15
16_FOOTER = """
17</body>
18</html>
19"""
20
21class StatusServerRequestHandler(BaseHTTPServer.BaseHTTPRequestHandler):
22 def _send_headers(self):
23 self.send_response(200, 'OK')
24 self.send_header('Content-Type', 'text/html')
25 self.end_headers()
26
27
28 def _parse_arguments(self):
29 path_parts = self.path.split('?', 1)
30 if len(path_parts) == 1:
31 return {}
32
33 encoded_args = path_parts[1]
34 return cgi.parse_qs(encoded_args)
35
36
37 def _write_line(self, line=''):
38 self.wfile.write(line + '<br>\n')
39
40
41 def _write_field(self, field, value):
42 self._write_line('%s=%s' % (field, value))
43
44
45 def _write_all_fields(self):
46 self._write_line('Config values:')
47 for field in scheduler_config.SchedulerConfig.FIELDS:
48 self._write_field(field, getattr(scheduler_config.config, field))
49 self._write_line()
50
51
52 def _execute_actions(self, arguments):
53 if 'reparse_config' in arguments:
54 scheduler_config.config.read_config()
55 self._write_line('Updated config!')
56 self._write_line()
57
58
59 def do_GET(self):
60 self._send_headers()
61 self.wfile.write(_HEADER)
62
63 arguments = self._parse_arguments()
64 self._execute_actions(arguments)
65 self._write_all_fields()
66
67 self.wfile.write(_FOOTER)
68
69
70class StatusServer(object):
71 def __init__(self):
72 self._address = ('', _PORT)
73 self._httpd = BaseHTTPServer.HTTPServer(self._address,
74 StatusServerRequestHandler)
75
76
77 def _run(self):
78 print 'Status server running on', self._address
79 self._httpd.serve_forever()
80
81
82 def start(self):
83 self._thread = threading.Thread(target=self._run, name='status_server')
84 self._thread.start()