5967cf6b99c8eebb130a7c42d980120ed4b08872
[releng.git] / utils / test / 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 = %s days              *" % 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, version)
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         ten_criteria = len(s_p_result)
49         ten_score = sum(s_p_result)
50
51         LASTEST_TESTS = rp_utils.get_config(
52             'general.nb_iteration_tests_success_criteria')
53         four_result = s_p_result[:LASTEST_TESTS]
54         four_criteria = len(four_result)
55         four_score = sum(four_result)
56
57         s_four_score = str(four_score / four_criteria)
58         s_ten_score = str(ten_score / ten_criteria)
59
60         info = '{},{},{},{},{}\n'.format(reportingDate,
61                                          s_p,
62                                          installer,
63                                          s_ten_score,
64                                          s_four_score)
65         profile_fd.write(info)
66         result_criterias[s_p] = sr.ScenarioResult('OK',
67                                                   s_four_score,
68                                                   s_ten_score,
69                                                   '100')
70
71         logger.info("--------------------------")
72     return result_criterias
73
74
75 def render_html(prof_results, installer, version):
76     template_loader = jinja2.FileSystemLoader(".")
77     template_env = jinja2.Environment(loader=template_loader,
78                                       autoescape=True)
79
80     template_file = "./qtip/template/index-status-tmpl.html"
81     template = template_env.get_template(template_file)
82
83     render_outcome = template.render(prof_results=prof_results,
84                                      installer=installer,
85                                      period=PERIOD,
86                                      version=version,
87                                      date=reportingDate)
88
89     with open('./display/{}/qtip/status-{}.html'.format(version, installer),
90               'wb') as fh:
91         fh.write(render_outcome)
92
93
94 def render_reporter():
95     for version in versions:
96         profile_file = prepare_profile_file(version)
97         profile_fd = open(profile_file, 'a')
98         for installer in installers:
99             results = rp_utils.getQtipResults(version, installer)
100             prof_results = profile_results(results, installer, profile_fd)
101             render_html(prof_results=prof_results,
102                         installer=installer,
103                         version=version)
104         profile_fd.close()
105         logger.info("Manage export CSV")
106         rp_utils.generate_csv(profile_file)
107         logger.info("CSV generated...")
108
109 if __name__ == '__main__':
110     render_reporter()