| #!/usr/bin/python |
| print "Content-type: text/html\n" |
| import cgi, cgitb, os, sys, re |
| sys.stdout.flush() |
| cgitb.enable() |
| |
| tko = os.path.dirname(os.path.realpath(os.path.abspath(sys.argv[0]))) |
| sys.path.insert(0, tko) |
| import db, display, frontend |
| |
| db = db.db() |
| |
| def main(): |
| display.print_main_header() |
| form = cgi.FieldStorage() |
| |
| kernel_idx = form['kernel'].value |
| kernel = frontend.kernel.select(db, {'kernel_idx' : kernel_idx })[0] |
| |
| if form.has_key('machine'): |
| machines = [] |
| for idx in form['machine'].value.split(','): |
| where = { 'machine_idx' : idx } |
| machines.append(frontend.machine.select(db, where)[0]) |
| elif form.has_key('group'): |
| where = { 'machine_group' : form['group'].value } |
| machines = frontend.machine.select(db, where) |
| |
| if form.has_key('test'): |
| test = form['test'].value |
| else: |
| test = None |
| |
| if len(machines) == 1: |
| print_jobs_vs_tests(machines[0], kernel, test) |
| else: |
| print_jobs_vs_machines(machines, kernel, test) |
| |
| |
| def print_jobs_vs_tests(machine, kernel, only_test): |
| # first we have to get a list of all run tests |
| results = {} # will be a 2d hash on [testname][jobname] |
| all_tests = set([]) |
| all_jobs = set([]) |
| where = { 'kernel_idx':kernel.idx , 'machine_idx':machine.idx } |
| if only_test: |
| where['subdir'] = only_test |
| tests = frontend.test.select(db, where) |
| for test in tests: |
| all_tests.add(test.testname) |
| all_jobs.add(test.job.tag) |
| if not results.has_key(test.testname): |
| results[test.testname] = {} |
| results[test.testname][test.job.tag] = test |
| test_list = sorted(list(all_tests)) |
| job_list = sorted(list(all_jobs)) |
| |
| print '<h1>Kernel: %s</h1>\n' % kernel.printable |
| print '<h1>Machine: %s</h1>\n' % machine.hostname |
| |
| header_row = [ display.box('Job', header=True) ] |
| for jobname in job_list: |
| header_row.append( display.box(jobname, header=True) ) |
| |
| matrix = [header_row] |
| for testname in test_list: |
| if not results.has_key(testname): |
| continue |
| row = [display.box(testname)] |
| for jobname in job_list: |
| test = results[testname].get(jobname, None) |
| if test: |
| box = display.box(test.status_word, |
| color_key = test.status_word, |
| link = test.url) |
| else: |
| box = display.box(None) |
| row.append(box) |
| matrix.append(row) |
| matrix.append(header_row) |
| |
| display.print_table(matrix) |
| |
| |
| def print_jobs_vs_machines(machines, kernel, only_test): |
| if not only_test: |
| raise "No test specified!" |
| results = {} # will be a 2d hash [machine][jobname] |
| all_jobs = set([]) |
| for machine in machines: |
| where = { 'kernel_idx':kernel.idx , 'machine_idx':machine.idx, |
| 'subdir':only_test } |
| tests = frontend.test.select(db, where) |
| if tests: |
| results[machine] = {} |
| for test in tests: |
| results[machine][test.job.tag] = test |
| all_jobs.add(test.job.tag) |
| results[machine.idx] = tests |
| job_list = sorted(list(all_jobs)) |
| |
| print '<h1>Kernel: %s</h1>\n' % kernel.printable |
| print '<h1>Test: %s</h1>\n' % only_test |
| |
| header_row = [ display.box('Machine', header=True) ] |
| for jobname in job_list: |
| header_row.append( display.box(jobname, header=True) ) |
| |
| matrix = [header_row] |
| for machine in machines: |
| if not results.has_key(machine): |
| continue |
| tests = results[machine] |
| row = [display.box(machine.hostname)] |
| for jobname in job_list: |
| test = results[machine].get(jobname, None) |
| if test: |
| box = display.box(test.status_word, |
| color_key = test.status_word, |
| link = test.url) |
| else: |
| box = display.box(None) |
| row.append(box) |
| matrix.append(row) |
| matrix.append(header_row) |
| |
| display.print_table(matrix) |
| |
| |
| main() |