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