annotate talosnames/web.py @ 44:10e59c3ae847

filter by active/disabled
author Jeff Hammel <jhammel@mozilla.com>
date Sun, 12 Aug 2012 23:45:36 -0700
parents 4e8c839dcdec
children fcd98303a90d
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):
43
4e8c839dcdec filter by disabled
Jeff Hammel <jhammel@mozilla.com>
parents: 41
diff changeset
95
4e8c839dcdec filter by disabled
Jeff Hammel <jhammel@mozilla.com>
parents: 41
diff changeset
96 # make a local copy of the data
40
10945dedde84 get query string working for TBPL suites
Jeff Hammel <jhammel@mozilla.com>
parents: 38
diff changeset
97 data = self.data.copy()
43
4e8c839dcdec filter by disabled
Jeff Hammel <jhammel@mozilla.com>
parents: 41
diff changeset
98
44
10e59c3ae847 filter by active/disabled
Jeff Hammel <jhammel@mozilla.com>
parents: 43
diff changeset
99 if request :
10e59c3ae847 filter by active/disabled
Jeff Hammel <jhammel@mozilla.com>
parents: 43
diff changeset
100 # filter by TBPL letter
10e59c3ae847 filter by active/disabled
Jeff Hammel <jhammel@mozilla.com>
parents: 43
diff changeset
101 if 'tbpl' in request.GET:
10e59c3ae847 filter by active/disabled
Jeff Hammel <jhammel@mozilla.com>
parents: 43
diff changeset
102 tbplnames = []
10e59c3ae847 filter by active/disabled
Jeff Hammel <jhammel@mozilla.com>
parents: 43
diff changeset
103 for name in request.GET.getall('tbpl'):
10e59c3ae847 filter by active/disabled
Jeff Hammel <jhammel@mozilla.com>
parents: 43
diff changeset
104 if not name.startswith('Talos'):
10e59c3ae847 filter by active/disabled
Jeff Hammel <jhammel@mozilla.com>
parents: 43
diff changeset
105 name = 'Talos ' + name
10e59c3ae847 filter by active/disabled
Jeff Hammel <jhammel@mozilla.com>
parents: 43
diff changeset
106 tbplnames.append(name)
10e59c3ae847 filter by active/disabled
Jeff Hammel <jhammel@mozilla.com>
parents: 43
diff changeset
107 suites = []
10e59c3ae847 filter by active/disabled
Jeff Hammel <jhammel@mozilla.com>
parents: 43
diff changeset
108 for suite, value in self.data['tbpl'].items():
10e59c3ae847 filter by active/disabled
Jeff Hammel <jhammel@mozilla.com>
parents: 43
diff changeset
109 if value in tbplnames:
10e59c3ae847 filter by active/disabled
Jeff Hammel <jhammel@mozilla.com>
parents: 43
diff changeset
110 suites.append(suite)
10e59c3ae847 filter by active/disabled
Jeff Hammel <jhammel@mozilla.com>
parents: 43
diff changeset
111 data['suites'] = sorted(suites)
10e59c3ae847 filter by active/disabled
Jeff Hammel <jhammel@mozilla.com>
parents: 43
diff changeset
112
10e59c3ae847 filter by active/disabled
Jeff Hammel <jhammel@mozilla.com>
parents: 43
diff changeset
113 # filter by disabled
10e59c3ae847 filter by active/disabled
Jeff Hammel <jhammel@mozilla.com>
parents: 43
diff changeset
114 if 'show' in request.GET:
10e59c3ae847 filter by active/disabled
Jeff Hammel <jhammel@mozilla.com>
parents: 43
diff changeset
115 show = request.GET['show']
10e59c3ae847 filter by active/disabled
Jeff Hammel <jhammel@mozilla.com>
parents: 43
diff changeset
116 if show == 'active':
10e59c3ae847 filter by active/disabled
Jeff Hammel <jhammel@mozilla.com>
parents: 43
diff changeset
117 data['suites'] = [i for i in data['suites']
10e59c3ae847 filter by active/disabled
Jeff Hammel <jhammel@mozilla.com>
parents: 43
diff changeset
118 if data['enabled'][i]]
10e59c3ae847 filter by active/disabled
Jeff Hammel <jhammel@mozilla.com>
parents: 43
diff changeset
119 elif show == 'disabled':
10e59c3ae847 filter by active/disabled
Jeff Hammel <jhammel@mozilla.com>
parents: 43
diff changeset
120 data['suites'] = [i for i in data['suites']
10e59c3ae847 filter by active/disabled
Jeff Hammel <jhammel@mozilla.com>
parents: 43
diff changeset
121 if not data['enabled'][i]]
10e59c3ae847 filter by active/disabled
Jeff Hammel <jhammel@mozilla.com>
parents: 43
diff changeset
122
43
4e8c839dcdec filter by disabled
Jeff Hammel <jhammel@mozilla.com>
parents: 41
diff changeset
123
32
1a9ec766f2b0 add a thing for tbpl short names
Jeff Hammel <jhammel@mozilla.com>
parents: 31
diff changeset
124 contents = file(template).read()
1a9ec766f2b0 add a thing for tbpl short names
Jeff Hammel <jhammel@mozilla.com>
parents: 31
diff changeset
125 _template = tempita.HTMLTemplate(contents)
40
10945dedde84 get query string working for TBPL suites
Jeff Hammel <jhammel@mozilla.com>
parents: 38
diff changeset
126 return _template.substitute(data)
19
aae0a420c4f7 should now actually do something
Jeff Hammel <jhammel@mozilla.com>
parents: 18
diff changeset
127
0
Jeff Hammel <jhammel@mozilla.com>
parents:
diff changeset
128 if __name__ == '__main__':
35
88d280049e2f stub parsing options
Jeff Hammel <jhammel@mozilla.com>
parents: 32
diff changeset
129
88d280049e2f stub parsing options
Jeff Hammel <jhammel@mozilla.com>
parents: 32
diff changeset
130 parser = optparse.OptionParser()
38
ef8590b55605 determine actually correct name extension
Jeff Hammel <jhammel@mozilla.com>
parents: 36
diff changeset
131 parser.add_option('-o', '--output', dest='output',
ef8590b55605 determine actually correct name extension
Jeff Hammel <jhammel@mozilla.com>
parents: 36
diff changeset
132 help="file to output to")
ef8590b55605 determine actually correct name extension
Jeff Hammel <jhammel@mozilla.com>
parents: 36
diff changeset
133 parser.add_option('-p', '--port', dest='port',
ef8590b55605 determine actually correct name extension
Jeff Hammel <jhammel@mozilla.com>
parents: 36
diff changeset
134 default=8080, type='int',
ef8590b55605 determine actually correct name extension
Jeff Hammel <jhammel@mozilla.com>
parents: 36
diff changeset
135 help="port to serve on")
35
88d280049e2f stub parsing options
Jeff Hammel <jhammel@mozilla.com>
parents: 32
diff changeset
136 options, args = parser.parse_args()
88d280049e2f stub parsing options
Jeff Hammel <jhammel@mozilla.com>
parents: 32
diff changeset
137
0
Jeff Hammel <jhammel@mozilla.com>
parents:
diff changeset
138 app = Handler()
38
ef8590b55605 determine actually correct name extension
Jeff Hammel <jhammel@mozilla.com>
parents: 36
diff changeset
139
ef8590b55605 determine actually correct name extension
Jeff Hammel <jhammel@mozilla.com>
parents: 36
diff changeset
140 if options.output:
ef8590b55605 determine actually correct name extension
Jeff Hammel <jhammel@mozilla.com>
parents: 36
diff changeset
141 f = file(options.output, 'w')
ef8590b55605 determine actually correct name extension
Jeff Hammel <jhammel@mozilla.com>
parents: 36
diff changeset
142 f.write(app.render())
ef8590b55605 determine actually correct name extension
Jeff Hammel <jhammel@mozilla.com>
parents: 36
diff changeset
143 f.close()
ef8590b55605 determine actually correct name extension
Jeff Hammel <jhammel@mozilla.com>
parents: 36
diff changeset
144 else:
ef8590b55605 determine actually correct name extension
Jeff Hammel <jhammel@mozilla.com>
parents: 36
diff changeset
145 from wsgiref import simple_server
ef8590b55605 determine actually correct name extension
Jeff Hammel <jhammel@mozilla.com>
parents: 36
diff changeset
146 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
147 server.serve_forever()
0
Jeff Hammel <jhammel@mozilla.com>
parents:
diff changeset
148
18
76a8d2bd4007 starting on web part
Jeff Hammel <jhammel@mozilla.com>
parents: 0
diff changeset
149