#!/usr/bin/python print "Content-type: text/html\n" import cgi, cgitb, os, sys, re sys.stdout.flush() cgitb.enable() import common from autotest_lib.tko import db, display, frontend db = db.db() benchmark_key = { 'kernbench' : ["elapsed"], 'dbench' : ["throughput"], 'tbench' : ["throughput"], } def main(): display.print_main_header() ## it is table only; mouse hovering off display.set_brief_mode() ## getting available tests rows = db.select('test', 'tko_tests', {}, distinct=True) all_benchmarks = [] for row in rows: benchmark = row[0] testname = re.sub(r'\..*', '', benchmark) all_benchmarks.append(benchmark) all_benchmarks = display.sort_tests(all_benchmarks) available_params = set() for benchmark in all_benchmarks: fields_tests = 'test_idx, count(status_word)' where_tests = { 'subdir': benchmark, 'status_word' : 'GOOD' } fields_params = 'attribute' for (id, count) in db.select(fields_tests, 'tko_test_view', where_tests, group_by='machine_hostname'): where_params = {'test_idx': id} for (attribute) in db.select(fields_params, 'tko_iteration_result', where_params): available_params.add("%s - %s" % (benchmark, attribute[0])) available_params = list(available_params) #process form submit cleared = "" attributes = "" params = [] attr = cgi.FieldStorage() if attr.has_key("cleared"): cleared = attr["cleared"].value if attr.has_key("reset"): cleared = "" if attr.has_key("clear") or cleared == "true": benchmark_key.clear() cleared = "true" else: attributes = "|".join(["%s:%s" % (key, value[0]) for key, value in benchmark_key.items()]) if attr.has_key("add"): val = attr["key"].value.split("-") test = val[0].strip() key = val[1].strip() attributes = attr.getvalue("attributes", "") tk = "%s:%s" % (test, key) if len(attributes) == 0: attributes = tk elif attributes.find(tk) == -1: attributes += "|%s" % (tk) params = attributes.split("|") print '<h1>Add tests</h1>' display.print_add_test_form(available_params, attributes, cleared) #convert params to a dictionary for param in params: test_attributes = param.split(":") if not benchmark_key.has_key(test_attributes[0]): benchmark_key[test_attributes[0]] = [] if benchmark_key[test_attributes[0]].count(test_attributes[1]) == 0: benchmark_key[test_attributes[0]].append(test_attributes[1]) machine_idx = {} benchmark_data = {} for benchmark in benchmark_key: fields = 'machine_idx,machine_hostname,count(status_word)' where = { 'subdir': benchmark, 'status_word' : 'GOOD' } data = {} for (idx, machine, count) in db.select(fields, 'tko_test_view', where, group_by='machine_hostname'): data[machine] = count machine_idx[machine] = idx benchmark_data[benchmark] = data print '<h1>Performance</h1>' header_row = [ display.box('Benchmark', header=True) ] for benchmark in benchmark_key: header_row += [ display.box("%s - %s" % (re.sub(r'\.', '<br>', benchmark),key), header=True) for key in benchmark_key[benchmark] ] matrix = [header_row] for machine in machine_idx: row = [display.box(machine)] for benchmark in benchmark_key: count = benchmark_data[benchmark].get(machine, None) if not count: row.append(display.box(None)) continue for key in benchmark_key[re.sub(r'\..*', '', benchmark)]: url = 'machine_test_attribute_graph.cgi' url += '?machine=' + str(machine_idx[machine]) url += '&benchmark=' + benchmark url += '&key=' + key html = '<a href="%s">%d</a>' % (url, count) row.append(display.box(html)) matrix.append(row) matrix.append(header_row) display.print_table(matrix) main()