annotate talosnames/web.py @ 41:4dfa9c298e3d

record whether a suite is enabled
author Jeff Hammel <jhammel@mozilla.com>
date Sun, 12 Aug 2012 22:38:12 -0700
parents 10945dedde84
children 4e8c839dcdec
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
0
Jeff Hammel <jhammel@mozilla.com>
parents:
diff changeset
1 #!/usr/bin/env python
Jeff Hammel <jhammel@mozilla.com>
parents:
diff changeset
2
Jeff Hammel <jhammel@mozilla.com>
parents:
diff changeset
3 """
Jeff Hammel <jhammel@mozilla.com>
parents:
diff changeset
4 web handler for talosnames
Jeff Hammel <jhammel@mozilla.com>
parents:
diff changeset
5 """
Jeff Hammel <jhammel@mozilla.com>
parents:
diff changeset
6
35
88d280049e2f stub parsing options
Jeff Hammel <jhammel@mozilla.com>
parents: 32
diff changeset
7 import optparse
19
aae0a420c4f7 should now actually do something
Jeff Hammel <jhammel@mozilla.com>
parents: 18
diff changeset
8 import os
22
Jeff Hammel <jhammel@mozilla.com>
parents: 21
diff changeset
9 import pprint
38
ef8590b55605 determine actually correct name extension
Jeff Hammel <jhammel@mozilla.com>
parents: 36
diff changeset
10 import talos.test
19
aae0a420c4f7 should now actually do something
Jeff Hammel <jhammel@mozilla.com>
parents: 18
diff changeset
11 import tempita
18
76a8d2bd4007 starting on web part
Jeff Hammel <jhammel@mozilla.com>
parents: 0
diff changeset
12 from api import TalosNames
31
c6580ad2612f better formatting of command
Jeff Hammel <jhammel@mozilla.com>
parents: 26
diff changeset
13 from subprocess import list2cmdline
0
Jeff Hammel <jhammel@mozilla.com>
parents:
diff changeset
14 from webob import Request, Response, exc
Jeff Hammel <jhammel@mozilla.com>
parents:
diff changeset
15
19
aae0a420c4f7 should now actually do something
Jeff Hammel <jhammel@mozilla.com>
parents: 18
diff changeset
16 here = os.path.dirname(os.path.abspath(__file__))
aae0a420c4f7 should now actually do something
Jeff Hammel <jhammel@mozilla.com>
parents: 18
diff changeset
17 template = os.path.join(here, 'templates', 'index.html')
aae0a420c4f7 should now actually do something
Jeff Hammel <jhammel@mozilla.com>
parents: 18
diff changeset
18
0
Jeff Hammel <jhammel@mozilla.com>
parents:
diff changeset
19 class Handler(object):
Jeff Hammel <jhammel@mozilla.com>
parents:
diff changeset
20
Jeff Hammel <jhammel@mozilla.com>
parents:
diff changeset
21 def __init__(self, **kw):
18
76a8d2bd4007 starting on web part
Jeff Hammel <jhammel@mozilla.com>
parents: 0
diff changeset
22 self.api = TalosNames()
0
Jeff Hammel <jhammel@mozilla.com>
parents:
diff changeset
23
25
6ec941f8704a css improvements
Jeff Hammel <jhammel@mozilla.com>
parents: 24
diff changeset
24 # get data
21
48b4c926be73 getting there
Jeff Hammel <jhammel@mozilla.com>
parents: 20
diff changeset
25 suites = sorted(self.api.suites.keys())
48b4c926be73 getting there
Jeff Hammel <jhammel@mozilla.com>
parents: 20
diff changeset
26 tests = {}
48b4c926be73 getting there
Jeff Hammel <jhammel@mozilla.com>
parents: 20
diff changeset
27 for suite in suites:
48b4c926be73 getting there
Jeff Hammel <jhammel@mozilla.com>
parents: 20
diff changeset
28 try:
48b4c926be73 getting there
Jeff Hammel <jhammel@mozilla.com>
parents: 20
diff changeset
29 test = self.api.test_config(suite)
48b4c926be73 getting there
Jeff Hammel <jhammel@mozilla.com>
parents: 20
diff changeset
30 tests[suite] = test
48b4c926be73 getting there
Jeff Hammel <jhammel@mozilla.com>
parents: 20
diff changeset
31 except:
48b4c926be73 getting there
Jeff Hammel <jhammel@mozilla.com>
parents: 20
diff changeset
32 tests[suite] = None
40
10945dedde84 get query string working for TBPL suites
Jeff Hammel <jhammel@mozilla.com>
parents: 38
diff changeset
33 self.suites = suites
21
48b4c926be73 getting there
Jeff Hammel <jhammel@mozilla.com>
parents: 20
diff changeset
34
40
10945dedde84 get query string working for TBPL suites
Jeff Hammel <jhammel@mozilla.com>
parents: 38
diff changeset
35 self.data = {'suites': self.suites,
41
4dfa9c298e3d record whether a suite is enabled
Jeff Hammel <jhammel@mozilla.com>
parents: 40
diff changeset
36 'enabled': self.api.buildbot_enabled, # whether the suite is enabled by default
25
6ec941f8704a css improvements
Jeff Hammel <jhammel@mozilla.com>
parents: 24
diff changeset
37 'commands': self.api.buildbot_commands,
6ec941f8704a css improvements
Jeff Hammel <jhammel@mozilla.com>
parents: 24
diff changeset
38 'tbpl': dict([(suite, self.api.tbpl_name(suite))
6ec941f8704a css improvements
Jeff Hammel <jhammel@mozilla.com>
parents: 24
diff changeset
39 for suite in suites]),
6ec941f8704a css improvements
Jeff Hammel <jhammel@mozilla.com>
parents: 24
diff changeset
40 'tests': tests,
6ec941f8704a css improvements
Jeff Hammel <jhammel@mozilla.com>
parents: 24
diff changeset
41 'pprint': pprint.pformat,
31
c6580ad2612f better formatting of command
Jeff Hammel <jhammel@mozilla.com>
parents: 26
diff changeset
42 'list2cmdline': list2cmdline
25
6ec941f8704a css improvements
Jeff Hammel <jhammel@mozilla.com>
parents: 24
diff changeset
43 }
6ec941f8704a css improvements
Jeff Hammel <jhammel@mozilla.com>
parents: 24
diff changeset
44
26
c6a042aad739 fix some things
Jeff Hammel <jhammel@mozilla.com>
parents: 25
diff changeset
45 paint = {}
c6a042aad739 fix some things
Jeff Hammel <jhammel@mozilla.com>
parents: 25
diff changeset
46 chrome = {}
c6a042aad739 fix some things
Jeff Hammel <jhammel@mozilla.com>
parents: 25
diff changeset
47 graphserver = {}
38
ef8590b55605 determine actually correct name extension
Jeff Hammel <jhammel@mozilla.com>
parents: 36
diff changeset
48 test_type = {}
26
c6a042aad739 fix some things
Jeff Hammel <jhammel@mozilla.com>
parents: 25
diff changeset
49 for suite in suites:
c6a042aad739 fix some things
Jeff Hammel <jhammel@mozilla.com>
parents: 25
diff changeset
50 for test in tests.get(suite) or []:
c6a042aad739 fix some things
Jeff Hammel <jhammel@mozilla.com>
parents: 25
diff changeset
51 config = self.api.talos_config(suite)
c6a042aad739 fix some things
Jeff Hammel <jhammel@mozilla.com>
parents: 25
diff changeset
52 _paint = '--mozAfterPaint' in self.data['commands'][suite]
c6a042aad739 fix some things
Jeff Hammel <jhammel@mozilla.com>
parents: 25
diff changeset
53 _chrome = '--noChrome' not in self.data['commands'][suite]
c6a042aad739 fix some things
Jeff Hammel <jhammel@mozilla.com>
parents: 25
diff changeset
54 extension = config.get('test_name_extension', '')
c6a042aad739 fix some things
Jeff Hammel <jhammel@mozilla.com>
parents: 25
diff changeset
55 _extension = ''
c6a042aad739 fix some things
Jeff Hammel <jhammel@mozilla.com>
parents: 25
diff changeset
56 if not _chrome:
c6a042aad739 fix some things
Jeff Hammel <jhammel@mozilla.com>
parents: 25
diff changeset
57 _extension += '_nochrome'
c6a042aad739 fix some things
Jeff Hammel <jhammel@mozilla.com>
parents: 25
diff changeset
58 if _paint:
c6a042aad739 fix some things
Jeff Hammel <jhammel@mozilla.com>
parents: 25
diff changeset
59 _extension += '_paint'
c6a042aad739 fix some things
Jeff Hammel <jhammel@mozilla.com>
parents: 25
diff changeset
60 if extension != _extension:
c6a042aad739 fix some things
Jeff Hammel <jhammel@mozilla.com>
parents: 25
diff changeset
61 raise AssertionError
c6a042aad739 fix some things
Jeff Hammel <jhammel@mozilla.com>
parents: 25
diff changeset
62 paint[suite] = _paint
c6a042aad739 fix some things
Jeff Hammel <jhammel@mozilla.com>
parents: 25
diff changeset
63 chrome[suite] = _chrome
36
c945731f06d0 better default value
Jeff Hammel <jhammel@mozilla.com>
parents: 35
diff changeset
64
38
ef8590b55605 determine actually correct name extension
Jeff Hammel <jhammel@mozilla.com>
parents: 36
diff changeset
65 # determine test extension
ef8590b55605 determine actually correct name extension
Jeff Hammel <jhammel@mozilla.com>
parents: 36
diff changeset
66 # TODO: move this to api.py
ef8590b55605 determine actually correct name extension
Jeff Hammel <jhammel@mozilla.com>
parents: 36
diff changeset
67 testname = test
ef8590b55605 determine actually correct name extension
Jeff Hammel <jhammel@mozilla.com>
parents: 36
diff changeset
68 testobj = talos.test.test_dict[testname]
ef8590b55605 determine actually correct name extension
Jeff Hammel <jhammel@mozilla.com>
parents: 36
diff changeset
69 if issubclass(testobj, talos.test.TsBase):
ef8590b55605 determine actually correct name extension
Jeff Hammel <jhammel@mozilla.com>
parents: 36
diff changeset
70 test_type.setdefault(suite, {})[test] = 'Startup Test'
ef8590b55605 determine actually correct name extension
Jeff Hammel <jhammel@mozilla.com>
parents: 36
diff changeset
71 elif issubclass(testobj, talos.test.PageloaderTest):
ef8590b55605 determine actually correct name extension
Jeff Hammel <jhammel@mozilla.com>
parents: 36
diff changeset
72 test_type.setdefault(suite, {})[test] = 'Page Load Test'
ef8590b55605 determine actually correct name extension
Jeff Hammel <jhammel@mozilla.com>
parents: 36
diff changeset
73 testname += extension
ef8590b55605 determine actually correct name extension
Jeff Hammel <jhammel@mozilla.com>
parents: 36
diff changeset
74 else:
ef8590b55605 determine actually correct name extension
Jeff Hammel <jhammel@mozilla.com>
parents: 36
diff changeset
75 raise Exception
ef8590b55605 determine actually correct name extension
Jeff Hammel <jhammel@mozilla.com>
parents: 36
diff changeset
76
36
c945731f06d0 better default value
Jeff Hammel <jhammel@mozilla.com>
parents: 35
diff changeset
77 # get graphserver data
38
ef8590b55605 determine actually correct name extension
Jeff Hammel <jhammel@mozilla.com>
parents: 36
diff changeset
78 names = self.api.graphserver_name(testname)
36
c945731f06d0 better default value
Jeff Hammel <jhammel@mozilla.com>
parents: 35
diff changeset
79 if names:
c945731f06d0 better default value
Jeff Hammel <jhammel@mozilla.com>
parents: 35
diff changeset
80 graphserver.setdefault(suite, {})[test] = [names]
c945731f06d0 better default value
Jeff Hammel <jhammel@mozilla.com>
parents: 35
diff changeset
81 else:
c945731f06d0 better default value
Jeff Hammel <jhammel@mozilla.com>
parents: 35
diff changeset
82 graphserver.setdefault(suite, {})[test] = None
26
c6a042aad739 fix some things
Jeff Hammel <jhammel@mozilla.com>
parents: 25
diff changeset
83 self.data['graphserver'] = graphserver
c6a042aad739 fix some things
Jeff Hammel <jhammel@mozilla.com>
parents: 25
diff changeset
84 self.data['paint'] = paint
c6a042aad739 fix some things
Jeff Hammel <jhammel@mozilla.com>
parents: 25
diff changeset
85 self.data['chrome'] = chrome
38
ef8590b55605 determine actually correct name extension
Jeff Hammel <jhammel@mozilla.com>
parents: 36
diff changeset
86 self.data['test_type'] = test_type
25
6ec941f8704a css improvements
Jeff Hammel <jhammel@mozilla.com>
parents: 24
diff changeset
87
6ec941f8704a css improvements
Jeff Hammel <jhammel@mozilla.com>
parents: 24
diff changeset
88 def __call__(self, environ, start_response):
6ec941f8704a css improvements
Jeff Hammel <jhammel@mozilla.com>
parents: 24
diff changeset
89 request = Request(environ)
6ec941f8704a css improvements
Jeff Hammel <jhammel@mozilla.com>
parents: 24
diff changeset
90 response = Response(content_type='text/html',
40
10945dedde84 get query string working for TBPL suites
Jeff Hammel <jhammel@mozilla.com>
parents: 38
diff changeset
91 body=self.render(request))
25
6ec941f8704a css improvements
Jeff Hammel <jhammel@mozilla.com>
parents: 24
diff changeset
92 return response(environ, start_response)
6ec941f8704a css improvements
Jeff Hammel <jhammel@mozilla.com>
parents: 24
diff changeset
93
40
10945dedde84 get query string working for TBPL suites
Jeff Hammel <jhammel@mozilla.com>
parents: 38
diff changeset
94 def render(self, request=None):
10945dedde84 get query string working for TBPL suites
Jeff Hammel <jhammel@mozilla.com>
parents: 38
diff changeset
95 data = self.data.copy()
10945dedde84 get query string working for TBPL suites
Jeff Hammel <jhammel@mozilla.com>
parents: 38
diff changeset
96 if request and 'tbpl' in request.GET:
10945dedde84 get query string working for TBPL suites
Jeff Hammel <jhammel@mozilla.com>
parents: 38
diff changeset
97 tbplnames = []
10945dedde84 get query string working for TBPL suites
Jeff Hammel <jhammel@mozilla.com>
parents: 38
diff changeset
98 for name in request.GET.getall('tbpl'):
10945dedde84 get query string working for TBPL suites
Jeff Hammel <jhammel@mozilla.com>
parents: 38
diff changeset
99 if not name.startswith('Talos'):
10945dedde84 get query string working for TBPL suites
Jeff Hammel <jhammel@mozilla.com>
parents: 38
diff changeset
100 name = 'Talos ' + name
10945dedde84 get query string working for TBPL suites
Jeff Hammel <jhammel@mozilla.com>
parents: 38
diff changeset
101 tbplnames.append(name)
10945dedde84 get query string working for TBPL suites
Jeff Hammel <jhammel@mozilla.com>
parents: 38
diff changeset
102 suites = []
10945dedde84 get query string working for TBPL suites
Jeff Hammel <jhammel@mozilla.com>
parents: 38
diff changeset
103 for suite, value in self.data['tbpl'].items():
10945dedde84 get query string working for TBPL suites
Jeff Hammel <jhammel@mozilla.com>
parents: 38
diff changeset
104 if value in tbplnames:
10945dedde84 get query string working for TBPL suites
Jeff Hammel <jhammel@mozilla.com>
parents: 38
diff changeset
105 suites.append(suite)
10945dedde84 get query string working for TBPL suites
Jeff Hammel <jhammel@mozilla.com>
parents: 38
diff changeset
106 data['suites'] = sorted(suites)
32
1a9ec766f2b0 add a thing for tbpl short names
Jeff Hammel <jhammel@mozilla.com>
parents: 31
diff changeset
107 contents = file(template).read()
1a9ec766f2b0 add a thing for tbpl short names
Jeff Hammel <jhammel@mozilla.com>
parents: 31
diff changeset
108 _template = tempita.HTMLTemplate(contents)
40
10945dedde84 get query string working for TBPL suites
Jeff Hammel <jhammel@mozilla.com>
parents: 38
diff changeset
109 return _template.substitute(data)
19
aae0a420c4f7 should now actually do something
Jeff Hammel <jhammel@mozilla.com>
parents: 18
diff changeset
110
0
Jeff Hammel <jhammel@mozilla.com>
parents:
diff changeset
111 if __name__ == '__main__':
35
88d280049e2f stub parsing options
Jeff Hammel <jhammel@mozilla.com>
parents: 32
diff changeset
112
88d280049e2f stub parsing options
Jeff Hammel <jhammel@mozilla.com>
parents: 32
diff changeset
113 parser = optparse.OptionParser()
38
ef8590b55605 determine actually correct name extension
Jeff Hammel <jhammel@mozilla.com>
parents: 36
diff changeset
114 parser.add_option('-o', '--output', dest='output',
ef8590b55605 determine actually correct name extension
Jeff Hammel <jhammel@mozilla.com>
parents: 36
diff changeset
115 help="file to output to")
ef8590b55605 determine actually correct name extension
Jeff Hammel <jhammel@mozilla.com>
parents: 36
diff changeset
116 parser.add_option('-p', '--port', dest='port',
ef8590b55605 determine actually correct name extension
Jeff Hammel <jhammel@mozilla.com>
parents: 36
diff changeset
117 default=8080, type='int',
ef8590b55605 determine actually correct name extension
Jeff Hammel <jhammel@mozilla.com>
parents: 36
diff changeset
118 help="port to serve on")
35
88d280049e2f stub parsing options
Jeff Hammel <jhammel@mozilla.com>
parents: 32
diff changeset
119 options, args = parser.parse_args()
88d280049e2f stub parsing options
Jeff Hammel <jhammel@mozilla.com>
parents: 32
diff changeset
120
0
Jeff Hammel <jhammel@mozilla.com>
parents:
diff changeset
121 app = Handler()
38
ef8590b55605 determine actually correct name extension
Jeff Hammel <jhammel@mozilla.com>
parents: 36
diff changeset
122
ef8590b55605 determine actually correct name extension
Jeff Hammel <jhammel@mozilla.com>
parents: 36
diff changeset
123 if options.output:
ef8590b55605 determine actually correct name extension
Jeff Hammel <jhammel@mozilla.com>
parents: 36
diff changeset
124 f = file(options.output, 'w')
ef8590b55605 determine actually correct name extension
Jeff Hammel <jhammel@mozilla.com>
parents: 36
diff changeset
125 f.write(app.render())
ef8590b55605 determine actually correct name extension
Jeff Hammel <jhammel@mozilla.com>
parents: 36
diff changeset
126 f.close()
ef8590b55605 determine actually correct name extension
Jeff Hammel <jhammel@mozilla.com>
parents: 36
diff changeset
127 else:
ef8590b55605 determine actually correct name extension
Jeff Hammel <jhammel@mozilla.com>
parents: 36
diff changeset
128 from wsgiref import simple_server
ef8590b55605 determine actually correct name extension
Jeff Hammel <jhammel@mozilla.com>
parents: 36
diff changeset
129 server = simple_server.make_server(host='0.0.0.0', port=options.port, app=app)
ef8590b55605 determine actually correct name extension
Jeff Hammel <jhammel@mozilla.com>
parents: 36
diff changeset
130 server.serve_forever()
0
Jeff Hammel <jhammel@mozilla.com>
parents:
diff changeset
131
18
76a8d2bd4007 starting on web part
Jeff Hammel <jhammel@mozilla.com>
parents: 0
diff changeset
132