blob: 3e561f3babc76ab59bb2a38c3a3ba9743fddfab9 [file] [log] [blame]
raymesf12f79d2013-02-15 05:16:01 +00001#!/usr/bin/python2.6
2#
3# Copyright 2010 Google Inc. All Rights Reserved.
4
5"""Script to summarize the results of various log files."""
6
7__author__ = "raymes@google.com (Raymes Khoury)"
8
raymes6eece822013-02-15 05:53:31 +00009from utils import command_executer
10import os
raymesf12f79d2013-02-15 05:16:01 +000011import sys
asharif60d7b432013-02-15 08:56:05 +000012import re
raymesf12f79d2013-02-15 05:16:01 +000013
raymes6eece822013-02-15 05:53:31 +000014RESULTS_DIR = "results"
15RESULTS_FILE = RESULTS_DIR + "/results.csv"
16
raymesf12f79d2013-02-15 05:16:01 +000017class DejaGNUSummarizer:
18 def Matches(self, log_file):
19 for log_line in log_file:
20 if log_line.find("""tests ===""") > -1:
21 return True
22 return False
23
raymes6eece822013-02-15 05:53:31 +000024 def Summarize(self, log_file, filename):
raymesf12f79d2013-02-15 05:16:01 +000025 result = ""
26 pass_statuses = ["PASS", "XPASS"]
raymesb7b6a402013-02-15 05:21:00 +000027 fail_statuses = ["FAIL", "XFAIL", "UNSUPPORTED"]
28 name_count = {}
raymesf12f79d2013-02-15 05:16:01 +000029 for line in log_file:
30 line = line.strip().split(":")
31 if len(line) > 1 and (line[0] in pass_statuses or
32 line[0] in fail_statuses):
33 test_name = (":".join(line[1:])).replace("\t", " ").strip()
raymesb7b6a402013-02-15 05:21:00 +000034 count = name_count.get(test_name, 0) + 1
35 name_count[test_name] = count
36 test_name = "%s (%s)" % (test_name, str(count))
raymesf12f79d2013-02-15 05:16:01 +000037 if line[0] in pass_statuses:
38 test_result = "pass"
39 else:
40 test_result = "fail"
raymes6eece822013-02-15 05:53:31 +000041 result += "%s\t%s\t%s\n" % (test_name, test_result, filename)
raymesf12f79d2013-02-15 05:16:01 +000042 return result
43
asharif60d7b432013-02-15 08:56:05 +000044
45class PerflabSummarizer:
46 def Matches(self, log_file):
47 p = re.compile("METRIC isolated \w+")
48 for log_line in log_file:
49 if p.search(log_line):
50 return True
51 return False
52
53 def Summarize(self, log_file, filename):
54 result = ""
55 p = re.compile("METRIC isolated (\w+) .*\['(.*?)'\]")
56 log_file_lines = "\n".join(log_file)
57 matches = p.findall(log_file_lines)
58 for match in matches:
59 if len(match) != 2:
60 continue
61 result += "%s\t%s\n" % (match[0], match[1])
62 return result
63
64
raymesf12f79d2013-02-15 05:16:01 +000065class AutoTestSummarizer:
66 def Matches(self, log_file):
67 for log_line in log_file:
68 if log_line.find("""Installing autotest on""") > -1:
69 return True
70 return False
71
raymes6eece822013-02-15 05:53:31 +000072 def Summarize(self, log_file, filename):
raymesf12f79d2013-02-15 05:16:01 +000073 result = ""
74 pass_statuses = ["PASS"]
75 fail_statuses = ["FAIL"]
76 for line in log_file:
77 line = line.strip().split(" ")
78 if len(line) > 1 and (line[-1].strip() in pass_statuses or
79 line[-1].strip() in fail_statuses):
80 test_name = (line[0].strip())
81 if line[-1].strip() in pass_statuses:
82 test_result = "pass"
83 else:
84 test_result = "fail"
raymes6eece822013-02-15 05:53:31 +000085 result += "%s\t%s\t%s\n" % (test_name, test_result, filename)
raymesf12f79d2013-02-15 05:16:01 +000086 return result
87
88def Usage():
89 print "Usage: %s log_file" % sys.argv[0]
90 sys.exit(1)
91
raymesf12f79d2013-02-15 05:16:01 +000092
raymes85ef5db2013-02-15 05:20:49 +000093def SummarizeFile(filename):
asharif60d7b432013-02-15 08:56:05 +000094 summarizers = [DejaGNUSummarizer(), AutoTestSummarizer(), PerflabSummarizer()]
raymes6eece822013-02-15 05:53:31 +000095 input = open(filename, 'rb')
96 executer = command_executer.GetCommandExecuter()
raymesf12f79d2013-02-15 05:16:01 +000097 for summarizer in summarizers:
raymes6eece822013-02-15 05:53:31 +000098 input.seek(0)
99 if summarizer.Matches(input):
100 executer.CopyFiles(filename, RESULTS_DIR, recursive=False)
101 input.seek(0)
102 result = summarizer.Summarize(input, os.path.basename(filename))
103 input.close()
raymes85ef5db2013-02-15 05:20:49 +0000104 return result
raymes6eece822013-02-15 05:53:31 +0000105 input.close()
raymes85ef5db2013-02-15 05:20:49 +0000106 return None
107
108
109def Main(argv):
110 if len(argv) != 2:
111 Usage()
112 filename = argv[1]
113
raymes6eece822013-02-15 05:53:31 +0000114 executer = command_executer.GetCommandExecuter()
115 executer.RunCommand("mkdir -p %s" % RESULTS_DIR)
116 summary = SummarizeFile(filename)
asharif60d7b432013-02-15 08:56:05 +0000117 if summary is not None:
118 output = open(RESULTS_FILE, "a")
119 output.write(summary.strip() + "\n")
120 output.close()
asharif2198c512013-02-15 09:21:35 +0000121 return 0
raymesf12f79d2013-02-15 05:16:01 +0000122
123if __name__ == "__main__":
asharif2198c512013-02-15 09:21:35 +0000124 retval = Main(sys.argv)
125 sys.exit(retval)
raymesf12f79d2013-02-15 05:16:01 +0000126