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