1be630eb07ddb84310fcc580acffcaa362a2dc606mbligh#!/usr/bin/python
2be630eb07ddb84310fcc580acffcaa362a2dc606mbligh"""
3be630eb07ddb84310fcc580acffcaa362a2dc606mblighSelects all rows and columns that satisfy the condition specified
4be630eb07ddb84310fcc580acffcaa362a2dc606mblighand prints the matrix.
5be630eb07ddb84310fcc580acffcaa362a2dc606mbligh"""
6be630eb07ddb84310fcc580acffcaa362a2dc606mblighimport sys, os, re, optparse
7be630eb07ddb84310fcc580acffcaa362a2dc606mblighimport common
848d412c368405508fbfb2a4a8ce57426fa045cfemblighfrom autotest_lib.client.common_lib import kernel_versions
9be630eb07ddb84310fcc580acffcaa362a2dc606mblighfrom autotest_lib.tko import display, frontend, db, query_lib
10be630eb07ddb84310fcc580acffcaa362a2dc606mbligh
11be630eb07ddb84310fcc580acffcaa362a2dc606mbligh# First do all the options parsing
12be630eb07ddb84310fcc580acffcaa362a2dc606mblighparser = optparse.OptionParser()
13be630eb07ddb84310fcc580acffcaa362a2dc606mblighparser.add_option('-x', '--x_axis', action='store', dest='x_axis',
14be630eb07ddb84310fcc580acffcaa362a2dc606mbligh                                                default='machine_group')
15be630eb07ddb84310fcc580acffcaa362a2dc606mblighparser.add_option('-y', '--y_axis', action='store', dest='y_axis',
16be630eb07ddb84310fcc580acffcaa362a2dc606mbligh                                                default='kernel')
17be630eb07ddb84310fcc580acffcaa362a2dc606mblighparser.add_option('-c', '--condition', action='store', dest='condition')
18be630eb07ddb84310fcc580acffcaa362a2dc606mbligh(options, args) = parser.parse_args()
19be630eb07ddb84310fcc580acffcaa362a2dc606mbligh
20be630eb07ddb84310fcc580acffcaa362a2dc606mblighif options.condition:
21be630eb07ddb84310fcc580acffcaa362a2dc606mbligh    where = query_lib.parse_scrub_and_gen_condition(
22be630eb07ddb84310fcc580acffcaa362a2dc606mbligh                options.condition, frontend.test_view_field_dict)
23be630eb07ddb84310fcc580acffcaa362a2dc606mbligh    # print("where clause:" % where)
24be630eb07ddb84310fcc580acffcaa362a2dc606mblighelse:
25be630eb07ddb84310fcc580acffcaa362a2dc606mbligh    where = None
26be630eb07ddb84310fcc580acffcaa362a2dc606mbligh
27be630eb07ddb84310fcc580acffcaa362a2dc606mbligh# Grab the data
28be630eb07ddb84310fcc580acffcaa362a2dc606mblighdb = db.db()
29be630eb07ddb84310fcc580acffcaa362a2dc606mblightest_data = frontend.get_matrix_data(db, options.x_axis, options.y_axis, where)
30be630eb07ddb84310fcc580acffcaa362a2dc606mbligh
31be630eb07ddb84310fcc580acffcaa362a2dc606mbligh# Print everything
32be630eb07ddb84310fcc580acffcaa362a2dc606mblighwidest_row_header = max([len(y) for y in test_data.y_values])
33be630eb07ddb84310fcc580acffcaa362a2dc606mblighdata_column_width = max([max(13,len(x)) for x in test_data.x_values])
34be630eb07ddb84310fcc580acffcaa362a2dc606mblighcolumn_widths = [widest_row_header] + [data_column_width] * len(test_data.x_values)
35be630eb07ddb84310fcc580acffcaa362a2dc606mblighformat = ' | '.join(['%%%ds' % i for i in column_widths])
36be630eb07ddb84310fcc580acffcaa362a2dc606mbligh# Print headers
37be630eb07ddb84310fcc580acffcaa362a2dc606mblighprint format % tuple([''] + test_data.x_values)
38be630eb07ddb84310fcc580acffcaa362a2dc606mbligh
39be630eb07ddb84310fcc580acffcaa362a2dc606mbligh# print data
40be630eb07ddb84310fcc580acffcaa362a2dc606mblighfor y in test_data.y_values:
41be630eb07ddb84310fcc580acffcaa362a2dc606mbligh    line = [y]
42be630eb07ddb84310fcc580acffcaa362a2dc606mbligh    for x in test_data.x_values:
43be630eb07ddb84310fcc580acffcaa362a2dc606mbligh        try:
44be630eb07ddb84310fcc580acffcaa362a2dc606mbligh            data_point = test_data.data[x][y]
45be630eb07ddb84310fcc580acffcaa362a2dc606mbligh            good_status = db.status_idx['GOOD']
46be630eb07ddb84310fcc580acffcaa362a2dc606mbligh            good = data_point.status_count.get(good_status, 0)
47be630eb07ddb84310fcc580acffcaa362a2dc606mbligh            total = sum(data_point.status_count.values())
48be630eb07ddb84310fcc580acffcaa362a2dc606mbligh            line.append('%5d / %-5d' % (good, total))
49be630eb07ddb84310fcc580acffcaa362a2dc606mbligh        except:
50be630eb07ddb84310fcc580acffcaa362a2dc606mbligh            line.append('')
51be630eb07ddb84310fcc580acffcaa362a2dc606mbligh    print format % tuple(line)
52