diff options
Diffstat (limited to 'deprecated/summarize_results.py')
-rwxr-xr-x | deprecated/summarize_results.py | 145 |
1 files changed, 145 insertions, 0 deletions
diff --git a/deprecated/summarize_results.py b/deprecated/summarize_results.py new file mode 100755 index 00000000..67d7e9a4 --- /dev/null +++ b/deprecated/summarize_results.py @@ -0,0 +1,145 @@ +#!/usr/bin/python2 +# +# Copyright 2010 Google Inc. All Rights Reserved. +"""Script to summarize the results of various log files.""" + +from __future__ import print_function + +__author__ = 'raymes@google.com (Raymes Khoury)' + +from cros_utils import command_executer +import os +import sys +import re + +RESULTS_DIR = 'results' +RESULTS_FILE = RESULTS_DIR + '/results.csv' + +# pylint: disable=anomalous-backslash-in-string + +class DejaGNUSummarizer(object): + """DejaGNU Summarizer Class""" + + def __int__(self): + pass + + def Matches(self, log_file): + for log_line in log_file: + if log_line.find("""tests ===""") > -1: + return True + return False + + def Summarize(self, log_file, filename): + result = '' + pass_statuses = ['PASS', 'XPASS'] + fail_statuses = ['FAIL', 'XFAIL', 'UNSUPPORTED'] + name_count = {} + for line in log_file: + line = line.strip().split(':') + if len(line) > 1 and (line[0] in pass_statuses or + line[0] in fail_statuses): + test_name = (':'.join(line[1:])).replace('\t', ' ').strip() + count = name_count.get(test_name, 0) + 1 + name_count[test_name] = count + test_name = '%s (%s)' % (test_name, str(count)) + if line[0] in pass_statuses: + test_result = 'pass' + else: + test_result = 'fail' + result += '%s\t%s\t%s\n' % (test_name, test_result, filename) + return result + + +class PerflabSummarizer(object): + """Perflab Summarizer class""" + + def __init__(self): + pass + + def Matches(self, log_file): + p = re.compile('METRIC isolated \w+') + for log_line in log_file: + if p.search(log_line): + return True + return False + + def Summarize(self, log_file, filename): + result = '' + p = re.compile("METRIC isolated (\w+) .*\['(.*?)'\]") + log_file_lines = '\n'.join(log_file) + matches = p.findall(log_file_lines) + for match in matches: + if len(match) != 2: + continue + result += '%s\t%s\t%s\n' % (match[0], match[1], filename) + return result + + +class AutoTestSummarizer(object): + """AutoTest Summarizer class""" + + def __init__(self): + pass + + def Matches(self, log_file): + for log_line in log_file: + if log_line.find("""Installing autotest on""") > -1: + return True + return False + + def Summarize(self, log_file, filename): + result = '' + pass_statuses = ['PASS'] + fail_statuses = ['FAIL'] + for line in log_file: + line = line.strip().split(' ') + if len(line) > 1 and (line[-1].strip() in pass_statuses or + line[-1].strip() in fail_statuses): + test_name = (line[0].strip()) + if line[-1].strip() in pass_statuses: + test_result = 'pass' + else: + test_result = 'fail' + result += '%s\t%s\t%s\n' % (test_name, test_result, filename) + return result + + +def Usage(): + print('Usage: %s log_file' % sys.argv[0]) + sys.exit(1) + + +def SummarizeFile(filename): + summarizers = [DejaGNUSummarizer(), AutoTestSummarizer(), PerflabSummarizer()] + inp = open(filename, 'rb') + executer = command_executer.GetCommandExecuter() + for summarizer in summarizers: + inp.seek(0) + if summarizer.Matches(inp): + executer.CopyFiles(filename, RESULTS_DIR, recursive=False) + inp.seek(0) + result = summarizer.Summarize(inp, os.path.basename(filename)) + inp.close() + return result + inp.close() + return None + + +def Main(argv): + if len(argv) != 2: + Usage() + filename = argv[1] + + executer = command_executer.GetCommandExecuter() + executer.RunCommand('mkdir -p %s' % RESULTS_DIR) + summary = SummarizeFile(filename) + if summary is not None: + output = open(RESULTS_FILE, 'a') + output.write(summary.strip() + '\n') + output.close() + return 0 + + +if __name__ == '__main__': + retval = Main(sys.argv) + sys.exit(retval) |