blob: cd695bbcd742826b9d312977eaa837037cb2fd41 [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
12
raymes6eece822013-02-15 05:53:31 +000013RESULTS_DIR = "results"
14RESULTS_FILE = RESULTS_DIR + "/results.csv"
15
raymesf12f79d2013-02-15 05:16:01 +000016class DejaGNUSummarizer:
17 def Matches(self, log_file):
18 for log_line in log_file:
19 if log_line.find("""tests ===""") > -1:
20 return True
21 return False
22
raymes6eece822013-02-15 05:53:31 +000023 def Summarize(self, log_file, filename):
raymesf12f79d2013-02-15 05:16:01 +000024 result = ""
25 pass_statuses = ["PASS", "XPASS"]
raymesb7b6a402013-02-15 05:21:00 +000026 fail_statuses = ["FAIL", "XFAIL", "UNSUPPORTED"]
27 name_count = {}
raymesf12f79d2013-02-15 05:16:01 +000028 for line in log_file:
29 line = line.strip().split(":")
30 if len(line) > 1 and (line[0] in pass_statuses or
31 line[0] in fail_statuses):
32 test_name = (":".join(line[1:])).replace("\t", " ").strip()
raymesb7b6a402013-02-15 05:21:00 +000033 count = name_count.get(test_name, 0) + 1
34 name_count[test_name] = count
35 test_name = "%s (%s)" % (test_name, str(count))
raymesf12f79d2013-02-15 05:16:01 +000036 if line[0] in pass_statuses:
37 test_result = "pass"
38 else:
39 test_result = "fail"
raymes6eece822013-02-15 05:53:31 +000040 result += "%s\t%s\t%s\n" % (test_name, test_result, filename)
raymesf12f79d2013-02-15 05:16:01 +000041 return result
42
43class AutoTestSummarizer:
44 def Matches(self, log_file):
45 for log_line in log_file:
46 if log_line.find("""Installing autotest on""") > -1:
47 return True
48 return False
49
raymes6eece822013-02-15 05:53:31 +000050 def Summarize(self, log_file, filename):
raymesf12f79d2013-02-15 05:16:01 +000051 result = ""
52 pass_statuses = ["PASS"]
53 fail_statuses = ["FAIL"]
54 for line in log_file:
55 line = line.strip().split(" ")
56 if len(line) > 1 and (line[-1].strip() in pass_statuses or
57 line[-1].strip() in fail_statuses):
58 test_name = (line[0].strip())
59 if line[-1].strip() in pass_statuses:
60 test_result = "pass"
61 else:
62 test_result = "fail"
raymes6eece822013-02-15 05:53:31 +000063 result += "%s\t%s\t%s\n" % (test_name, test_result, filename)
raymesf12f79d2013-02-15 05:16:01 +000064 return result
65
66def Usage():
67 print "Usage: %s log_file" % sys.argv[0]
68 sys.exit(1)
69
raymesf12f79d2013-02-15 05:16:01 +000070
raymes85ef5db2013-02-15 05:20:49 +000071def SummarizeFile(filename):
raymesf12f79d2013-02-15 05:16:01 +000072 summarizers = [DejaGNUSummarizer(), AutoTestSummarizer()]
raymes6eece822013-02-15 05:53:31 +000073 input = open(filename, 'rb')
74 executer = command_executer.GetCommandExecuter()
raymesf12f79d2013-02-15 05:16:01 +000075 for summarizer in summarizers:
raymes6eece822013-02-15 05:53:31 +000076 input.seek(0)
77 if summarizer.Matches(input):
78 executer.CopyFiles(filename, RESULTS_DIR, recursive=False)
79 input.seek(0)
80 result = summarizer.Summarize(input, os.path.basename(filename))
81 input.close()
raymes85ef5db2013-02-15 05:20:49 +000082 return result
raymes6eece822013-02-15 05:53:31 +000083 input.close()
raymes85ef5db2013-02-15 05:20:49 +000084 return None
85
86
87def Main(argv):
88 if len(argv) != 2:
89 Usage()
90 filename = argv[1]
91
raymes6eece822013-02-15 05:53:31 +000092 executer = command_executer.GetCommandExecuter()
93 executer.RunCommand("mkdir -p %s" % RESULTS_DIR)
94 summary = SummarizeFile(filename)
95 output = open(RESULTS_FILE, "a")
96 output.write(summary.strip() + "\n")
97 output.close()
raymesf12f79d2013-02-15 05:16:01 +000098
99if __name__ == "__main__":
100 Main(sys.argv)
101