aboutsummaryrefslogtreecommitdiff
path: root/deprecated/summarize_results.py
blob: 67d7e9a418b84c9a60410d49cbb0c1977a552a0c (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
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)