annotate talosnames/web.py @ 40:10945dedde84

get query string working for TBPL suites
author Jeff Hammel <jhammel@mozilla.com>
date Tue, 24 Jul 2012 22:51:40 -0700
parents ef8590b55605
children 4dfa9c298e3d
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,
25
6ec941f8704a css improvements
Jeff Hammel <jhammel@mozilla.com>
parents: 24
diff changeset
36 'commands': self.api.buildbot_commands,
6ec941f8704a css improvements
Jeff Hammel <jhammel@mozilla.com>
parents: 24
diff changeset
37 'tbpl': dict([(suite, self.api.tbpl_name(suite))
6ec941f8704a css improvements
Jeff Hammel <jhammel@mozilla.com>
parents: 24
diff changeset
38 for suite in suites]),
6ec941f8704a css improvements
Jeff Hammel <jhammel@mozilla.com>
parents: 24
diff changeset
39 'tests': tests,
6ec941f8704a css improvements
Jeff Hammel <jhammel@mozilla.com>
parents: 24
diff changeset
40 'pprint': pprint.pformat,
31
c6580ad2612f better formatting of command
Jeff Hammel <jhammel@mozilla.com>
parents: 26
diff changeset
41 'list2cmdline': list2cmdline
25
6ec941f8704a css improvements
Jeff Hammel <jhammel@mozilla.com>
parents: 24
diff changeset
42 }
6ec941f8704a css improvements
Jeff Hammel <jhammel@mozilla.com>
parents: 24
diff changeset
43
26
c6a042aad739 fix some things
Jeff Hammel <jhammel@mozilla.com>
parents: 25
diff changeset
44 paint = {}
c6a042aad739 fix some things
Jeff Hammel <jhammel@mozilla.com>
parents: 25
diff changeset
45 chrome = {}
c6a042aad739 fix some things
Jeff Hammel <jhammel@mozilla.com>
parents: 25
diff changeset
46 graphserver = {}
38
ef8590b55605 determine actually correct name extension
Jeff Hammel <jhammel@mozilla.com>
parents: 36
diff changeset
47 test_type = {}
26
c6a042aad739 fix some things
Jeff Hammel <jhammel@mozilla.com>
parents: 25
diff changeset
48 for suite in suites:
c6a042aad739 fix some things
Jeff Hammel <jhammel@mozilla.com>
parents: 25
diff changeset
49 for test in tests.get(suite) or []:
c6a042aad739 fix some things
Jeff Hammel <jhammel@mozilla.com>
parents: 25
diff changeset
50 config = self.api.talos_config(suite)
c6a042aad739 fix some things
Jeff Hammel <jhammel@mozilla.com>
parents: 25
diff changeset
51 _paint = '--mozAfterPaint' in self.data['commands'][suite]
c6a042aad739 fix some things
Jeff Hammel <jhammel@mozilla.com>
parents: 25
diff changeset
52 _chrome = '--noChrome' not in self.data['commands'][suite]
c6a042aad739 fix some things
Jeff Hammel <jhammel@mozilla.com>
parents: 25
diff changeset
53 extension = config.get('test_name_extension', '')
c6a042aad739 fix some things
Jeff Hammel <jhammel@mozilla.com>
parents: 25
diff changeset
54 _extension = ''
c6a042aad739 fix some things
Jeff Hammel <jhammel@mozilla.com>
parents: 25
diff changeset
55 if not _chrome:
c6a042aad739 fix some things
Jeff Hammel <jhammel@mozilla.com>
parents: 25
diff changeset
56 _extension += '_nochrome'
c6a042aad739 fix some things
Jeff Hammel <jhammel@mozilla.com>
parents: 25
diff changeset
57 if _paint:
c6a042aad739 fix some things
Jeff Hammel <jhammel@mozilla.com>
parents: 25
diff changeset
58 _extension += '_paint'
c6a042aad739 fix some things
Jeff Hammel <jhammel@mozilla.com>
parents: 25
diff changeset
59 if extension != _extension:
c6a042aad739 fix some things
Jeff Hammel <jhammel@mozilla.com>
parents: 25
diff changeset
60 raise AssertionError
c6a042aad739 fix some things
Jeff Hammel <jhammel@mozilla.com>
parents: 25
diff changeset
61 paint[suite] = _paint
c6a042aad739 fix some things
Jeff Hammel <jhammel@mozilla.com>
parents: 25
diff changeset
62 chrome[suite] = _chrome
36
c945731f06d0 better default value
Jeff Hammel <jhammel@mozilla.com>
parents: 35
diff changeset
63
38
ef8590b55605 determine actually correct name extension
Jeff Hammel <jhammel@mozilla.com>
parents: 36
diff changeset
64 # determine test extension
ef8590b55605 determine actually correct name extension
Jeff Hammel <jhammel@mozilla.com>
parents: 36
diff changeset
65 # TODO: move this to api.py
ef8590b55605 determine actually correct name extension
Jeff Hammel <jhammel@mozilla.com>
parents: 36
diff changeset
66 testname = test
ef8590b55605 determine actually correct name extension
Jeff Hammel <jhammel@mozilla.com>
parents: 36
diff changeset
67 testobj = talos.test.test_dict[testname]
ef8590b55605 determine actually correct name extension
Jeff Hammel <jhammel@mozilla.com>
parents: 36
diff changeset
68 if issubclass(testobj, talos.test.TsBase):
ef8590b55605 determine actually correct name extension
Jeff Hammel <jhammel@mozilla.com>
parents: 36
diff changeset
69 test_type.setdefault(suite, {})[test] = 'Startup Test'
ef8590b55605 determine actually correct name extension
Jeff Hammel <jhammel@mozilla.com>
parents: 36
diff changeset
70 elif issubclass(testobj, talos.test.PageloaderTest):
ef8590b55605 determine actually correct name extension
Jeff Hammel <jhammel@mozilla.com>
parents: 36
diff changeset
71 test_type.setdefault(suite, {})[test] = 'Page Load Test'
ef8590b55605 determine actually correct name extension
Jeff Hammel <jhammel@mozilla.com>
parents: 36
diff changeset
72 testname += extension
ef8590b55605 determine actually correct name extension
Jeff Hammel <jhammel@mozilla.com>
parents: 36
diff changeset
73 else:
ef8590b55605 determine actually correct name extension
Jeff Hammel <jhammel@mozilla.com>
parents: 36
diff changeset
74 raise Exception
ef8590b55605 determine actually correct name extension
Jeff Hammel <jhammel@mozilla.com>
parents: 36
diff changeset
75
36
c945731f06d0 better default value
Jeff Hammel <jhammel@mozilla.com>
parents: 35
diff changeset
76 # get graphserver data
38
ef8590b55605 determine actually correct name extension
Jeff Hammel <jhammel@mozilla.com>
parents: 36
diff changeset
77 names = self.api.graphserver_name(testname)
36
c945731f06d0 better default value
Jeff Hammel <jhammel@mozilla.com>
parents: 35
diff changeset
78 if names:
c945731f06d0 better default value
Jeff Hammel <jhammel@mozilla.com>
parents: 35
diff changeset
79 graphserver.setdefault(suite, {})[test] = [names]
c945731f06d0 better default value
Jeff Hammel <jhammel@mozilla.com>
parents: 35
diff changeset
80 else:
c945731f06d0 better default value
Jeff Hammel <jhammel@mozilla.com>
parents: 35
diff changeset
81 graphserver.setdefault(suite, {})[test] = None
26
c6a042aad739 fix some things
Jeff Hammel <jhammel@mozilla.com>
parents: 25
diff changeset
82 self.data['graphserver'] = graphserver
c6a042aad739 fix some things
Jeff Hammel <jhammel@mozilla.com>
parents: 25
diff changeset
83 self.data['paint'] = paint
c6a042aad739 fix some things
Jeff Hammel <jhammel@mozilla.com>
parents: 25
diff changeset
84 self.data['chrome'] = chrome
38
ef8590b55605 determine actually correct name extension
Jeff Hammel <jhammel@mozilla.com>
parents: 36
diff changeset
85 self.data['test_type'] = test_type
25
6ec941f8704a css improvements
Jeff Hammel <jhammel@mozilla.com>
parents: 24
diff changeset
86
6ec941f8704a css improvements
Jeff Hammel <jhammel@mozilla.com>
parents: 24
diff changeset
87 def __call__(self, environ, start_response):
6ec941f8704a css improvements
Jeff Hammel <jhammel@mozilla.com>
parents: 24
diff changeset
88 request = Request(environ)
6ec941f8704a css improvements
Jeff Hammel <jhammel@mozilla.com>
parents: 24
diff changeset
89 response = Response(content_type='text/html',
40
10945dedde84 get query string working for TBPL suites
Jeff Hammel <jhammel@mozilla.com>
parents: 38
diff changeset
90 body=self.render(request))
25
6ec941f8704a css improvements
Jeff Hammel <jhammel@mozilla.com>
parents: 24
diff changeset
91 return response(environ, start_response)
6ec941f8704a css improvements
Jeff Hammel <jhammel@mozilla.com>
parents: 24
diff changeset
92
40
10945dedde84 get query string working for TBPL suites
Jeff Hammel <jhammel@mozilla.com>
parents: 38
diff changeset
93 def render(self, request=None):
10945dedde84 get query string working for TBPL suites
Jeff Hammel <jhammel@mozilla.com>
parents: 38
diff changeset
94 data = self.data.copy()
10945dedde84 get query string working for TBPL suites
Jeff Hammel <jhammel@mozilla.com>
parents: 38
diff changeset
95 if request and 'tbpl' in request.GET:
10945dedde84 get query string working for TBPL suites
Jeff Hammel <jhammel@mozilla.com>
parents: 38
diff changeset
96 tbplnames = []
10945dedde84 get query string working for TBPL suites
Jeff Hammel <jhammel@mozilla.com>
parents: 38
diff changeset
97 for name in request.GET.getall('tbpl'):
10945dedde84 get query string working for TBPL suites
Jeff Hammel <jhammel@mozilla.com>
parents: 38
diff changeset
98 if not name.startswith('Talos'):
10945dedde84 get query string working for TBPL suites
Jeff Hammel <jhammel@mozilla.com>
parents: 38
diff changeset
99 name = 'Talos ' + name
10945dedde84 get query string working for TBPL suites
Jeff Hammel <jhammel@mozilla.com>
parents: 38
diff changeset
100 tbplnames.append(name)
10945dedde84 get query string working for TBPL suites
Jeff Hammel <jhammel@mozilla.com>
parents: 38
diff changeset
101 suites = []
10945dedde84 get query string working for TBPL suites
Jeff Hammel <jhammel@mozilla.com>
parents: 38
diff changeset
102 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
103 if value in tbplnames:
10945dedde84 get query string working for TBPL suites
Jeff Hammel <jhammel@mozilla.com>
parents: 38
diff changeset
104 suites.append(suite)
10945dedde84 get query string working for TBPL suites
Jeff Hammel <jhammel@mozilla.com>
parents: 38
diff changeset
105 data['suites'] = sorted(suites)
32
1a9ec766f2b0 add a thing for tbpl short names
Jeff Hammel <jhammel@mozilla.com>
parents: 31
diff changeset
106 contents = file(template).read()
1a9ec766f2b0 add a thing for tbpl short names
Jeff Hammel <jhammel@mozilla.com>
parents: 31
diff changeset
107 _template = tempita.HTMLTemplate(contents)
40
10945dedde84 get query string working for TBPL suites
Jeff Hammel <jhammel@mozilla.com>
parents: 38
diff changeset
108 return _template.substitute(data)
19
aae0a420c4f7 should now actually do something
Jeff Hammel <jhammel@mozilla.com>
parents: 18
diff changeset
109
0
Jeff Hammel <jhammel@mozilla.com>
parents:
diff changeset
110 if __name__ == '__main__':
35
88d280049e2f stub parsing options
Jeff Hammel <jhammel@mozilla.com>
parents: 32
diff changeset
111
88d280049e2f stub parsing options
Jeff Hammel <jhammel@mozilla.com>
parents: 32
diff changeset
112 parser = optparse.OptionParser()
38
ef8590b55605 determine actually correct name extension
Jeff Hammel <jhammel@mozilla.com>
parents: 36
diff changeset
113 parser.add_option('-o', '--output', dest='output',
ef8590b55605 determine actually correct name extension
Jeff Hammel <jhammel@mozilla.com>
parents: 36
diff changeset
114 help="file to output to")
ef8590b55605 determine actually correct name extension
Jeff Hammel <jhammel@mozilla.com>
parents: 36
diff changeset
115 parser.add_option('-p', '--port', dest='port',
ef8590b55605 determine actually correct name extension
Jeff Hammel <jhammel@mozilla.com>
parents: 36
diff changeset
116 default=8080, type='int',
ef8590b55605 determine actually correct name extension
Jeff Hammel <jhammel@mozilla.com>
parents: 36
diff changeset
117 help="port to serve on")
35
88d280049e2f stub parsing options
Jeff Hammel <jhammel@mozilla.com>
parents: 32
diff changeset
118 options, args = parser.parse_args()
88d280049e2f stub parsing options
Jeff Hammel <jhammel@mozilla.com>
parents: 32
diff changeset
119
0
Jeff Hammel <jhammel@mozilla.com>
parents:
diff changeset
120 app = Handler()
38
ef8590b55605 determine actually correct name extension
Jeff Hammel <jhammel@mozilla.com>
parents: 36
diff changeset
121
ef8590b55605 determine actually correct name extension
Jeff Hammel <jhammel@mozilla.com>
parents: 36
diff changeset
122 if options.output:
ef8590b55605 determine actually correct name extension
Jeff Hammel <jhammel@mozilla.com>
parents: 36
diff changeset
123 f = file(options.output, 'w')
ef8590b55605 determine actually correct name extension
Jeff Hammel <jhammel@mozilla.com>
parents: 36
diff changeset
124 f.write(app.render())
ef8590b55605 determine actually correct name extension
Jeff Hammel <jhammel@mozilla.com>
parents: 36
diff changeset
125 f.close()
ef8590b55605 determine actually correct name extension
Jeff Hammel <jhammel@mozilla.com>
parents: 36
diff changeset
126 else:
ef8590b55605 determine actually correct name extension
Jeff Hammel <jhammel@mozilla.com>
parents: 36
diff changeset
127 from wsgiref import simple_server
ef8590b55605 determine actually correct name extension
Jeff Hammel <jhammel@mozilla.com>
parents: 36
diff changeset
128 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
129 server.serve_forever()
0
Jeff Hammel <jhammel@mozilla.com>
parents:
diff changeset
130
18
76a8d2bd4007 starting on web part
Jeff Hammel <jhammel@mozilla.com>
parents: 0
diff changeset
131