Merge changes from topic 'qtip'
[releng.git] / utils / test / reporting / reporting / qtip / reporting-status.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 import datetime
10 import os
11
12 import jinja2
13 import utils.reporting_utils as rp_utils
14 import utils.scenarioResult as sr
15
16 installers = rp_utils.get_config('general.installers')
17 versions = rp_utils.get_config('general.versions')
18 PERIOD = rp_utils.get_config('general.period')
19
20 # Logger
21 logger = rp_utils.getLogger("Qtip-Status")
22 reportingDate = datetime.datetime.now().strftime("%Y-%m-%d %H:%M")
23
24 logger.info("*******************************************")
25 logger.info("*   Generating reporting scenario status  *")
26 logger.info("*   Data retention = {} days              *".format(PERIOD))
27 logger.info("*                                         *")
28 logger.info("*******************************************")
29
30
31 def prepare_profile_file(version):
32     profile_dir = './display/{}/qtip'.format(version)
33     if not os.path.exists(profile_dir):
34         os.makedirs(profile_dir)
35
36     profile_file = "{}/scenario_history.txt".format(profile_dir)
37     if not os.path.exists(profile_file):
38         with open(profile_file, 'w') as f:
39             info = 'date,scenario,installer,details,score\n'
40             f.write(info)
41             f.close()
42     return profile_file
43
44
45 def profile_results(results, installer, profile_fd):
46     result_criterias = {}
47     for s_p, s_p_result in results.iteritems():
48         avg_last_ten = sum([int(s) for s in s_p_result]) / len(s_p_result)
49
50         LASTEST_TESTS = rp_utils.get_config(
51             'general.nb_iteration_tests_success_criteria')
52         last_four = s_p_result[-LASTEST_TESTS:]
53         avg_last_four = sum([int(s) for s in last_four]) / len(last_four)
54
55         info = '{},{},{},{},{}\n'.format(reportingDate,
56                                          s_p,
57                                          installer,
58                                          '',
59                                          avg_last_four)
60         profile_fd.write(info)
61         result_criterias[s_p] = sr.ScenarioResult('OK',
62                                                   avg_last_four,
63                                                   avg_last_ten,
64                                                   '100')
65
66         logger.info("--------------------------")
67     return result_criterias
68
69
70 def render_html(prof_results, installer, version):
71     template_loader = jinja2.FileSystemLoader(".")
72     template_env = jinja2.Environment(loader=template_loader,
73                                       autoescape=True)
74
75     template_file = "./reporting/qtip/template/index-status-tmpl.html"
76     template = template_env.get_template(template_file)
77
78     render_outcome = template.render(prof_results=prof_results,
79                                      installer=installer,
80                                      period=PERIOD,
81                                      version=version,
82                                      date=reportingDate)
83
84     with open('./display/{}/qtip/status-{}.html'.format(version, installer),
85               'wb') as fh:
86         fh.write(render_outcome)
87
88
89 def render_reporter():
90     for version in versions:
91         profile_file = prepare_profile_file(version)
92         profile_fd = open(profile_file, 'a')
93         for installer in installers:
94             results = rp_utils.getQtipResults(version, installer)
95             prof_results = profile_results(results, installer, profile_fd)
96             render_html(prof_results=prof_results,
97                         installer=installer,
98                         version=version)
99         profile_fd.close()
100         logger.info("Manage export CSV")
101         rp_utils.generate_csv(profile_file)
102         logger.info("CSV generated...")
103
104
105 if __name__ == '__main__':
106     render_reporter()