blob: f7bafa9f905fbb1375186688d21340a25f8fe810 [file] [log] [blame]
lmrb635b862009-09-10 14:53:21 +00001#!/usr/bin/python
lmr6f669ce2009-05-31 19:02:42 +00002"""
3Program that parses the autotest results and return a nicely printed final test
4result.
5
6@copyright: Red Hat 2008-2009
7"""
8
9def parse_results(text):
lmrb635b862009-09-10 14:53:21 +000010 """
11 Parse text containing Autotest results.
12
13 @return: A list of result 4-tuples.
14 """
lmr6f669ce2009-05-31 19:02:42 +000015 result_list = []
16 start_time_list = []
17 info_list = []
18
19 lines = text.splitlines()
20 for line in lines:
21 line = line.strip()
22 parts = line.split("\t")
23
24 # Found a START line -- get start time
lmrb635b862009-09-10 14:53:21 +000025 if (line.startswith("START") and len(parts) >= 5 and
26 parts[3].startswith("timestamp")):
lmr6f669ce2009-05-31 19:02:42 +000027 start_time = float(parts[3].split('=')[1])
28 start_time_list.append(start_time)
29 info_list.append("")
30
31 # Found an END line -- get end time, name and status
lmrb635b862009-09-10 14:53:21 +000032 elif (line.startswith("END") and len(parts) >= 5 and
33 parts[3].startswith("timestamp")):
lmr6f669ce2009-05-31 19:02:42 +000034 end_time = float(parts[3].split('=')[1])
35 start_time = start_time_list.pop()
36 info = info_list.pop()
37 test_name = parts[2]
38 test_status = parts[0].split()[1]
lmrfc0e1412009-06-10 20:03:26 +000039 # Remove 'kvm.' prefix
40 if test_name.startswith("kvm."):
41 test_name = test_name.split("kvm.")[1]
lmrb635b862009-09-10 14:53:21 +000042 result_list.append((test_name, test_status,
43 int(end_time - start_time), info))
lmr6f669ce2009-05-31 19:02:42 +000044
45 # Found a FAIL/ERROR/GOOD line -- get failure/success info
lmrb635b862009-09-10 14:53:21 +000046 elif (len(parts) >= 6 and parts[3].startswith("timestamp") and
47 parts[4].startswith("localtime")):
lmr6f669ce2009-05-31 19:02:42 +000048 info_list[-1] = parts[5]
49
50 return result_list
51
52
53def print_result(result):
54 """Nicely print a single Autotest result.
55
56 result -- a 4-tuple
57 """
58 if result:
59 print '%-48s\t\t%s\t%s\t%s' % tuple(map(str, result))
60
61
lmr9fb48272009-09-09 22:04:53 +000062def main(resfiles):
63 print_result(('Test', 'Status', 'Seconds', 'Info'))
lmr6f669ce2009-05-31 19:02:42 +000064 print_result(('----', '------', '-------', '----'))
65
lmr9fb48272009-09-09 22:04:53 +000066 for resfile in resfiles:
67 print ' (Result file: %s)' % resfile
68 try:
69 f = file(resfile)
70 text = f.read()
71 f.close()
72 except IOError:
73 print 'Bad result file: %s' % resfile
74 return
75 results = parse_results(text)
76 map(print_result, results)
lmr6f669ce2009-05-31 19:02:42 +000077
78
79if __name__ == '__main__':
lmr9fb48272009-09-09 22:04:53 +000080 import sys, os, glob
lmr6f669ce2009-05-31 19:02:42 +000081
lmr9fb48272009-09-09 22:04:53 +000082 resfiles = glob.glob('../../results/default/status*')
83 if len(sys.argv) > 1:
84 if sys.argv[1] == '-h' or sys.argv[1] == '--help':
85 print 'Usage: %s [result files]' % sys.argv[0]
86 sys.exit(0)
87 resfiles = sys.argv[1:]
88 main(resfiles)