mbligh | bfec522 | 2007-09-14 16:58:57 +0000 | [diff] [blame] | 1 | import os, re, parse, sys, db, frontend |
mbligh | 250300e | 2007-09-18 00:50:57 +0000 | [diff] [blame] | 2 | sys.path.insert(0, '/home/mbligh/autotest/client/bin') |
| 3 | import kernel_versions |
mbligh | bfec522 | 2007-09-14 16:58:57 +0000 | [diff] [blame] | 4 | |
| 5 | db = db.db() # db.db(debug=True) |
| 6 | |
mbligh | cfd2d01 | 2007-09-19 21:07:34 +0000 | [diff] [blame] | 7 | color_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 | } |
mbligh | bfec522 | 2007-09-14 16:58:57 +0000 | [diff] [blame] | 19 | |
mbligh | cfd2d01 | 2007-09-19 21:07:34 +0000 | [diff] [blame] | 20 | |
| 21 | class 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 = ' ' |
| 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 | |
| 47 | def 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 | |
| 65 | def kernel_machine_box(kernel, machine): |
mbligh | bfec522 | 2007-09-14 16:58:57 +0000 | [diff] [blame] | 66 | status = None |
| 67 | status_word = '' |
| 68 | tests = frontend.test.select(db, { 'kernel_idx' : kernel.idx , |
mbligh | cfd2d01 | 2007-09-19 21:07:34 +0000 | [diff] [blame] | 69 | 'machine' : machine }) |
mbligh | bfec522 | 2007-09-14 16:58:57 +0000 | [diff] [blame] | 70 | 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] |
mbligh | cfd2d01 | 2007-09-19 21:07:34 +0000 | [diff] [blame] | 74 | |
mbligh | bfec522 | 2007-09-14 16:58:57 +0000 | [diff] [blame] | 75 | link = 'machine_kernel_test.cgi?machine=%s&kernel=%s' % \ |
| 76 | (machine, kernel.idx) |
mbligh | 250300e | 2007-09-18 00:50:57 +0000 | [diff] [blame] | 77 | if status_word: |
| 78 | html = '<a href="%s">%s</a>' % (link, status_word) |
| 79 | else: |
| 80 | html = None |
mbligh | cfd2d01 | 2007-09-19 21:07:34 +0000 | [diff] [blame] | 81 | return box(html, color_key = status_word) |
mbligh | bfec522 | 2007-09-14 16:58:57 +0000 | [diff] [blame] | 82 | |
| 83 | |
mbligh | 250300e | 2007-09-18 00:50:57 +0000 | [diff] [blame] | 84 | def kernel_encode(kernel): |
| 85 | return kernel_versions.version_encode(kernel.printable) |
| 86 | |
| 87 | |
mbligh | cfd2d01 | 2007-09-19 21:07:34 +0000 | [diff] [blame] | 88 | def print_machines_vs_all_kernels(machines): |
| 89 | header_row = [ box(x, header=True) for x in ['Version'] + machines ] |
mbligh | bfec522 | 2007-09-14 16:58:57 +0000 | [diff] [blame] | 90 | |
mbligh | 250300e | 2007-09-18 00:50:57 +0000 | [diff] [blame] | 91 | kernels = frontend.kernel.select(db) |
| 92 | kernels.sort(key = kernel_encode, reverse = True) |
mbligh | bfec522 | 2007-09-14 16:58:57 +0000 | [diff] [blame] | 93 | |
mbligh | cfd2d01 | 2007-09-19 21:07:34 +0000 | [diff] [blame] | 94 | 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 | |
| 105 | def 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) |
mbligh | bfec522 | 2007-09-14 16:58:57 +0000 | [diff] [blame] | 115 | |