Home | History | Annotate | Download | only in tko
      1 #!/usr/bin/python
      2 print "Content-type: text/html\n"
      3 import cgi, cgitb, os, sys, re
      4 sys.stdout.flush()
      5 cgitb.enable()
      6 
      7 import common
      8 from autotest_lib.tko import db, display, frontend
      9 
     10 db = db.db()
     11 
     12 benchmark_key = {
     13 'kernbench' : ["elapsed"],
     14 'dbench' : ["throughput"],
     15 'tbench' : ["throughput"],
     16 }
     17 
     18 def main():
     19     display.print_main_header()
     20     ## it is table only; mouse hovering off
     21     display.set_brief_mode()
     22 
     23     ## getting available tests
     24     rows = db.select('test', 'tko_tests', {}, distinct=True)
     25     all_benchmarks = []
     26     for row in rows:
     27         benchmark = row[0]
     28         testname = re.sub(r'\..*', '', benchmark)
     29         all_benchmarks.append(benchmark)
     30     all_benchmarks = display.sort_tests(all_benchmarks)
     31 
     32     available_params = set()
     33     for benchmark in all_benchmarks:
     34         fields_tests = 'test_idx, count(status_word)'
     35         where_tests = { 'subdir': benchmark, 'status_word' : 'GOOD' }
     36         fields_params = 'attribute'
     37         for (id, count) in db.select(fields_tests, 'tko_test_view',
     38                                      where_tests, group_by='machine_hostname'):
     39             where_params = {'test_idx': id}
     40             for (attribute) in db.select(fields_params, 'tko_iteration_result',
     41                                          where_params):
     42                 available_params.add("%s - %s" % (benchmark,
     43                                                      attribute[0]))
     44     available_params = list(available_params)
     45     #process form submit
     46     cleared = ""
     47     attributes = ""
     48     params = []
     49     attr = cgi.FieldStorage()
     50     if attr.has_key("cleared"):
     51         cleared = attr["cleared"].value
     52     if attr.has_key("reset"):
     53         cleared = ""
     54     if attr.has_key("clear") or cleared == "true":
     55         benchmark_key.clear()
     56         cleared = "true"
     57     else:
     58         attributes = "|".join(["%s:%s" % (key, value[0]) for key, value in benchmark_key.items()])
     59 
     60     if attr.has_key("add"):
     61         val = attr["key"].value.split("-")
     62         test = val[0].strip()
     63         key = val[1].strip()
     64         attributes = attr.getvalue("attributes", "")
     65         tk = "%s:%s" % (test, key)
     66         if len(attributes) == 0:
     67             attributes = tk
     68         elif attributes.find(tk) == -1:
     69             attributes += "|%s" % (tk)
     70 
     71         params = attributes.split("|")
     72 
     73     print '<h1>Add tests</h1>'
     74     display.print_add_test_form(available_params, attributes, cleared)
     75 
     76     #convert params to a dictionary
     77     for param in params:
     78         test_attributes = param.split(":")
     79         if not benchmark_key.has_key(test_attributes[0]):
     80             benchmark_key[test_attributes[0]] = []
     81         if benchmark_key[test_attributes[0]].count(test_attributes[1]) == 0:
     82             benchmark_key[test_attributes[0]].append(test_attributes[1])
     83 
     84     machine_idx = {}
     85     benchmark_data = {}
     86     for benchmark in benchmark_key:
     87         fields = 'machine_idx,machine_hostname,count(status_word)'
     88         where = { 'subdir': benchmark, 'status_word' : 'GOOD' }
     89         data = {}
     90         for (idx, machine, count) in db.select(fields, 'tko_test_view',
     91                                             where, group_by='machine_hostname'):
     92             data[machine] = count
     93             machine_idx[machine] = idx
     94         benchmark_data[benchmark] = data
     95 
     96 
     97     print '<h1>Performance</h1>'
     98 
     99     header_row = [ display.box('Benchmark', header=True) ]
    100     for benchmark in benchmark_key:
    101         header_row += [ display.box("%s - %s" % (re.sub(r'\.', '<br>', benchmark),key), header=True) for key in benchmark_key[benchmark] ]
    102  
    103     matrix = [header_row]
    104     for machine in machine_idx:
    105         row = [display.box(machine)]
    106         for benchmark in benchmark_key:
    107             count = benchmark_data[benchmark].get(machine, None)
    108             if not count:
    109                 row.append(display.box(None))
    110                 continue
    111             for key in benchmark_key[re.sub(r'\..*', '', benchmark)]:
    112                 url = 'machine_test_attribute_graph.cgi'
    113                 url += '?machine=' + str(machine_idx[machine])
    114                 url += '&benchmark=' + benchmark
    115                 url += '&key=' + key
    116                 html = '<a href="%s">%d</a>' % (url, count)
    117                 row.append(display.box(html))
    118         matrix.append(row)
    119     matrix.append(header_row)
    120 
    121     display.print_table(matrix)
    122 
    123 main()
    124