Change display way of reporting status, add last ten days score
[releng.git] / utils / test / reporting / yardstick / reportingUtils.py
1 #!/usr/bin/python
2 #
3 # This program and the accompanying materials
4 # are made available under the terms of the Apache License, Version 2.0
5 # which accompanies this distribution, and is available at
6 #
7 # http://www.apache.org/licenses/LICENSE-2.0
8 #
9 from urllib2 import Request, urlopen, URLError
10 import logging
11 import json
12 import reportingConf as conf
13
14
15 def getLogger(module):
16     logFormatter = logging.Formatter("%(asctime)s [" +
17                                      module +
18                                      "] [%(levelname)-5.5s]  %(message)s")
19     logger = logging.getLogger()
20
21     fileHandler = logging.FileHandler("{0}/{1}".format('.', conf.LOG_FILE))
22     fileHandler.setFormatter(logFormatter)
23     logger.addHandler(fileHandler)
24
25     consoleHandler = logging.StreamHandler()
26     consoleHandler.setFormatter(logFormatter)
27     logger.addHandler(consoleHandler)
28     logger.setLevel(conf.LOG_LEVEL)
29     return logger
30
31
32 def getScenarioStatus(installer, version):
33     url = (conf.URL_BASE + "?case=" + "scenario_status" +
34            "&installer=" + installer +
35            "&version=" + version +"&period=" + str(conf.PERIOD))
36     request = Request(url)
37
38     try:
39         response = urlopen(request)
40         k = response.read()
41         response.close()
42         results = json.loads(k)
43         test_results = results['results']
44     except URLError, e:
45         print 'Got an error code:', e
46
47     scenario_results = {}
48     result_dict = {}
49     if test_results is not None:
50         for r in test_results:
51             if r['stop_date'] != 'None' and r['criteria'] is not None:
52                 if not r['scenario'] in scenario_results.keys():
53                     scenario_results[r['scenario']] = []
54                 scenario_results[r['scenario']].append(r)
55
56         for k,v in scenario_results.items():
57             # scenario_results[k] = v[:conf.LASTEST_TESTS]
58             s_list = []
59             for element in v:
60                 if element['criteria'] == 'SUCCESS':
61                     s_list.append(1)
62                 else:
63                     s_list.append(0)
64             result_dict[k] = s_list
65
66     # return scenario_results
67     return result_dict
68
69 def subfind(given_list, pattern_list):
70     for i in range(len(given_list)):
71         if given_list[i] == pattern_list[0] and given_list[i:i + conf.LASTEST_TESTS] == pattern_list:
72             return True
73     return False
74
75 def get_percent(status):
76     
77     if status * 100 % 6:
78         return round(float(status) * 100 / 6, 1)
79     else:
80         return status * 100 / 6
81
82 def get_status(four_list, ten_list):
83     four_score = 0
84     ten_score = 0
85
86     for v in four_list:
87         four_score += v
88     for v in ten_list:
89         ten_score += v
90
91     if four_score == conf.LASTEST_TESTS:
92         status = 6
93     elif subfind(ten_list, [1, 1, 1, 1]):
94         status = 5
95     elif ten_score == 0:
96         status = 0
97     else:
98         status = four_score + 1
99
100     return get_percent(status)
101
102
103 def _test():
104     status = getScenarioStatus("compass", "master")
105     print "status:++++++++++++++++++++++++"
106     print json.dumps(status,indent=4)
107
108
109 if __name__ == '__main__':    # pragma: no cover
110     _test()