blob: 6502a4d89f3128dabd51452c2e0f070ddd346e68 [file] [log] [blame]
mblighbfec5222007-09-14 16:58:57 +00001import os, re, parse, sys, db, frontend
mbligh250300e2007-09-18 00:50:57 +00002sys.path.insert(0, '/home/mbligh/autotest/client/bin')
3import kernel_versions
mblighbfec5222007-09-14 16:58:57 +00004
5db = db.db() # db.db(debug=True)
6
mblighcfd2d012007-09-19 21:07:34 +00007color_map = {
8 'GOOD' : '#66ff66', # green
9 'WARN' : '#fffc00', # yellow
10 'FAIL' : '#ff6666', # red
11 'ABORT' : '#ff6666', # red
12 'ERROR' : '#ff6666', # red
13 'NOSTATUS' : '#ffffff', # white
14 'white' : '#ffffff', # white
15 'green' : '#66ff66', # green
16 'yellow' : '#fffc00', # yellow
17 'red' : '#ff6666', # red
18}
mblighbfec5222007-09-14 16:58:57 +000019
mblighcfd2d012007-09-19 21:07:34 +000020
21class box:
22 def __init__(self, data, color_key = None, header = False):
23 self.data = data
24 if color_map.has_key(color_key):
25 self.color = color_map[color_key]
26 else:
27 self.color = color_map['white']
28 self.header = header
29
30
31 def display(self):
32 if self.data:
33 data = self.data
34 else:
35 data = '&nbsp'
36
37 if self.header:
38 box_html = 'th'
39 else:
40 box_html = 'td'
41
42 print "<%s bgcolor=%s>" % (box_html, self.color)
43 print data
44 print "</%s>" % box_html
45
46
47def print_table(matrix):
48 """
49 matrix: list of lists of boxes, giving a matrix of data
50 Each of the inner lists is a row, not a column.
51
52 Display the given matrix of data as a table.
53 """
54
55 print '<table cellpadding=5 border=1 class="boldtable">'
56 for row in matrix:
57 print '<tr>'
58 for element in row:
59 print element
60 element.display()
61 print '</tr>'
62 print '</table>'
63
64
65def kernel_machine_box(kernel, machine):
mblighbfec5222007-09-14 16:58:57 +000066 status = None
67 status_word = ''
68 tests = frontend.test.select(db, { 'kernel_idx' : kernel.idx ,
mblighcfd2d012007-09-19 21:07:34 +000069 'machine' : machine })
mblighbfec5222007-09-14 16:58:57 +000070 for t in tests:
71 if not status or t.status_num < status:
72 status = t.status_num
73 status_word = db.status_word[status]
mblighcfd2d012007-09-19 21:07:34 +000074
mblighbfec5222007-09-14 16:58:57 +000075 link = 'machine_kernel_test.cgi?machine=%s&kernel=%s' % \
76 (machine, kernel.idx)
mbligh250300e2007-09-18 00:50:57 +000077 if status_word:
78 html = '<a href="%s">%s</a>' % (link, status_word)
79 else:
80 html = None
mblighcfd2d012007-09-19 21:07:34 +000081 return box(html, color_key = status_word)
mblighbfec5222007-09-14 16:58:57 +000082
83
mbligh250300e2007-09-18 00:50:57 +000084def kernel_encode(kernel):
85 return kernel_versions.version_encode(kernel.printable)
86
87
mblighcfd2d012007-09-19 21:07:34 +000088def print_machines_vs_all_kernels(machines):
89 header_row = [ box(x, header=True) for x in ['Version'] + machines ]
mblighbfec5222007-09-14 16:58:57 +000090
mbligh250300e2007-09-18 00:50:57 +000091 kernels = frontend.kernel.select(db)
92 kernels.sort(key = kernel_encode, reverse = True)
mblighbfec5222007-09-14 16:58:57 +000093
mblighcfd2d012007-09-19 21:07:34 +000094 matrix = [header_row]
95 for kernel in kernels:
96 row = [box(kernel.printable)]
97 for machine in machines:
98 row.append(kernel_machine_box(kernel, machine))
99 matrix.append(row)
100 matrix.append(header_row)
101
102 print_table(matrix)
103
104
105def sort_tests(tests):
106 kernel_order = ['patch', 'config', 'build', 'mkinitrd', 'install']
107
108 results = []
109 for kernel_op in kernel_order:
110 test = 'kernel.' + kernel_op
111 if tests.count(test):
112 results.append(test)
113 tests.remove(test)
114 return results + sorted(tests)
mblighbfec5222007-09-14 16:58:57 +0000115