flake 8 fix + add logger
[releng.git] / utils / test / reporting / functest / reporting-vims.py
1 from urllib2 import Request, urlopen, URLError
2 import json
3 import jinja2
4 import reportingConf as conf
5 import reportingUtils as utils
6
7 logger = utils.getLogger("vIMS")
8
9
10 def sig_test_format(sig_test):
11     nbPassed = 0
12     nbFailures = 0
13     nbSkipped = 0
14     for data_test in sig_test:
15         if data_test['result'] == "Passed":
16             nbPassed += 1
17         elif data_test['result'] == "Failed":
18             nbFailures += 1
19         elif data_test['result'] == "Skipped":
20             nbSkipped += 1
21     total_sig_test_result = {}
22     total_sig_test_result['passed'] = nbPassed
23     total_sig_test_result['failures'] = nbFailures
24     total_sig_test_result['skipped'] = nbSkipped
25     return total_sig_test_result
26
27 logger.info("****************************************")
28 logger.info("*   Generating reporting vIMS          *")
29 logger.info("*   Data retention = %s days           *" % conf.PERIOD)
30 logger.info("*                                      *")
31 logger.info("****************************************")
32
33 installers = conf.installers
34 step_order = ["initialisation", "orchestrator", "vIMS", "sig_test"]
35 logger.info("Start processing....")
36 for installer in installers:
37     logger.info("Search vIMS results for installer %s" % installer)
38     request = Request(conf.URL_BASE + '?case=vims&installer=' + installer)
39
40     try:
41         response = urlopen(request)
42         k = response.read()
43         results = json.loads(k)
44     except URLError, e:
45         logger.error("Error code: %s" % e)
46
47     test_results = results['results']
48
49     logger.debug("Results found: %s" % test_results)
50
51     scenario_results = {}
52     for r in test_results:
53         if not r['scenario'] in scenario_results.keys():
54             scenario_results[r['scenario']] = []
55         scenario_results[r['scenario']].append(r)
56
57     for s, s_result in scenario_results.items():
58         scenario_results[s] = s_result[0:5]
59         logger.debug("Search for success criteria")
60         for result in scenario_results[s]:
61             result["start_date"] = result["start_date"].split(".")[0]
62             sig_test = result['details']['sig_test']['result']
63             if not sig_test == "" and isinstance(sig_test, list):
64                 format_result = sig_test_format(sig_test)
65                 if format_result['failures'] > format_result['passed']:
66                     result['details']['sig_test']['duration'] = 0
67                 result['details']['sig_test']['result'] = format_result
68             nb_step_ok = 0
69             nb_step = len(result['details'])
70
71             for step_name, step_result in result['details'].items():
72                 if step_result['duration'] != 0:
73                     nb_step_ok += 1
74                 m, s = divmod(step_result['duration'], 60)
75                 m_display = ""
76                 if int(m) != 0:
77                     m_display += str(int(m)) + "m "
78                 step_result['duration_display'] = m_display + str(int(s)) + "s"
79
80             result['pr_step_ok'] = 0
81             if nb_step != 0:
82                 result['pr_step_ok'] = (float(nb_step_ok)/nb_step)*100
83             try:
84                 logger.debug("Scenario %s, Installer %s"
85                              % (s_result[1]['scenario'], installer))
86                 logger.debug("Orchestrator deployment: %s s"
87                              % result['details']['orchestrator']['duration'])
88                 logger.debug("vIMS deployment: %s s"
89                              % result['details']['vIMS']['duration'])
90                 logger.debug("Signaling testing: %s s"
91                              % result['details']['sig_test']['duration'])
92                 logger.debug("Signaling testing results: %s"
93                              % format_result)
94             except:
95                 logger.error("Data badly formatted")
96             logger.debug("------------------------------------------------")
97
98     templateLoader = jinja2.FileSystemLoader(conf.REPORTING_PATH)
99     templateEnv = jinja2.Environment(loader=templateLoader)
100
101     TEMPLATE_FILE = "/template/index-vims-tmpl.html"
102     template = templateEnv.get_template(TEMPLATE_FILE)
103
104     outputText = template.render(scenario_results=scenario_results,
105                                  step_order=step_order,
106                                  installer=installer)
107
108     with open(conf.REPORTING_PATH +
109               "/release/master/index-vims-" +
110               installer + ".html", "wb") as fh:
111         fh.write(outputText)
112
113 logger.info("vIMS report succesfully generated")