summaryrefslogtreecommitdiffstats
path: root/reporting/reporting/vsperf/reporting-status.py
diff options
context:
space:
mode:
Diffstat (limited to 'reporting/reporting/vsperf/reporting-status.py')
-rw-r--r--reporting/reporting/vsperf/reporting-status.py251
1 files changed, 125 insertions, 126 deletions
diff --git a/reporting/reporting/vsperf/reporting-status.py b/reporting/reporting/vsperf/reporting-status.py
index fc4cc67..b307ef0 100644
--- a/reporting/reporting/vsperf/reporting-status.py
+++ b/reporting/reporting/vsperf/reporting-status.py
@@ -6,133 +6,132 @@
#
# http://www.apache.org/licenses/LICENSE-2.0
#
-import datetime
import os
+import datetime
+import logging
+from itertools import ifilter
import jinja2
-import reporting.utils.reporting_utils as rp_utils
-import reporting.utils.scenarioResult as sr
-
-installers = rp_utils.get_config('general.installers')
-PERIOD = rp_utils.get_config('general.period')
-
-# Logger
-logger = rp_utils.getLogger("Storperf-Status")
-reportingDate = datetime.datetime.now().strftime("%Y-%m-%d %H:%M")
-
-logger.info("*******************************************")
-logger.info("* Generating reporting scenario status *")
-logger.info("* Data retention = %s days *" % PERIOD)
-logger.info("* *")
-logger.info("*******************************************")
-
-# retrieve the list of storperf tests
-versions = {'master'}
-
-# For all the versions
-for version in versions:
- # For all the installers
- for installer in installers:
- scenario_results = rp_utils.getScenarios("vsperf",
- None,
- installer,
- None)
- items = {}
- scenario_result_criteria = {}
- logger.info("installer %s, version %s, scenario ", installer, version)
-
- # From each scenarios get results list
- for s, s_result in scenario_results.items():
- logger.info("---------------------------------")
- logger.info("installer %s, version %s, scenario %s", installer,
- version, s)
- ten_criteria = len(s_result)
-
- ten_score = 0
- for v in s_result:
- if "PASS" in v['criteria']:
- ten_score += 1
-
- logger.info("ten_score: %s / %s" % (ten_score, ten_criteria))
-
- four_score = 0
- try:
- LASTEST_TESTS = rp_utils.get_config(
- 'general.nb_iteration_tests_success_criteria')
- s_result.sort(key=lambda x: x['start_date'])
- four_result = s_result[-LASTEST_TESTS:]
- logger.debug("four_result: {}".format(four_result))
- logger.debug("LASTEST_TESTS: {}".format(LASTEST_TESTS))
- # logger.debug("four_result: {}".format(four_result))
- four_criteria = len(four_result)
- for v in four_result:
- if "PASS" in v['criteria']:
- four_score += 1
- logger.info("4 Score: %s / %s " % (four_score,
- four_criteria))
- except Exception:
- logger.error("Impossible to retrieve the four_score")
-
- try:
- s_status = (four_score * 100) / four_criteria
- except ZeroDivisionError:
- s_status = 0
- logger.info("Score percent = %s" % str(s_status))
- s_four_score = str(four_score) + '/' + str(four_criteria)
- s_ten_score = str(ten_score) + '/' + str(ten_criteria)
- s_score_percent = str(s_status)
-
- logger.debug(" s_status: {}".format(s_status))
- if s_status == 100:
- logger.info(">>>>> scenario OK, save the information")
- else:
- logger.info(">>>> scenario not OK, last 4 iterations = %s, \
- last 10 days = %s" % (s_four_score, s_ten_score))
-
- s_url = ""
- if len(s_result) > 0:
- build_tag = s_result[len(s_result)-1]['build_tag']
- logger.debug("Build tag: %s" % build_tag)
- s_url = s_url = rp_utils.getJenkinsUrl(build_tag)
- logger.info("last jenkins url: %s" % s_url)
-
- # Save daily results in a file
- path_validation_file = ("./display/" + version +
- "/vsperf/scenario_history.txt")
-
- if not os.path.exists(path_validation_file):
- with open(path_validation_file, 'w') as f:
- info = 'date,scenario,installer,details,score\n'
- f.write(info)
-
- with open(path_validation_file, "a") as f:
- info = (reportingDate + "," + s + "," + installer +
- "," + s_ten_score + "," +
- str(s_score_percent) + "\n")
- f.write(info)
-
- scenario_result_criteria[s] = sr.ScenarioResult(s_status,
- s_four_score,
- s_ten_score,
- s_score_percent,
- s_url)
-
- logger.info("--------------------------")
-
- templateLoader = jinja2.FileSystemLoader(".")
- templateEnv = jinja2.Environment(loader=templateLoader,
- autoescape=True)
-
- TEMPLATE_FILE = "./reporting/vsperf/template/index-status-tmpl.html"
- template = templateEnv.get_template(TEMPLATE_FILE)
-
- outputText = template.render(scenario_results=scenario_result_criteria,
- installer=installer,
- period=PERIOD,
- version=version,
- date=reportingDate)
-
- with open("./display/" + version +
- "/vsperf/status-" + installer + ".html", "wb") as fh:
- fh.write(outputText)
+from reporting.utils import reporting_utils
+from reporting.utils.scenarioResult import ScenarioResult
+
+LOG = reporting_utils.getLogger("Vsperf-Status")
+LOG.setLevel(logging.DEBUG)
+
+HISTORY_FILE = "./display/{}/vsperf/scenario_history.txt"
+TEMPLATE_FILE = "./reporting/vsperf/template/index-status-tmpl.html"
+TARGET_FILE = "./display/{}/vsperf/reporting.html"
+
+
+def _get_version_data(data):
+ version_data = {}
+ for ele in data:
+ try:
+ version = ele['build_tag'].split('-')[-2]
+ except (KeyError, TypeError, IndexError):
+ continue
+
+ if version not in version_data:
+ version_data[version] = []
+ version_data[version].append(ele)
+ return version_data
+
+
+def _get_case_data(data):
+ case_data = {}
+ for ele in data:
+ case_name = ele['case_name']
+ if case_name not in case_data:
+ case_data[case_name] = []
+ case_data[case_name].append(ele)
+ return case_data
+
+
+def _get_score(data):
+ count = len(list(ifilter(lambda r: r['criteria'] == 'PASS', data)))
+ total = len(data)
+ return count, total
+
+
+def _get_result_obj(version, case, data):
+ fifty_pass, fifty_total = _get_score(data)
+ four_pass, four_total = _get_score(data[:4])
+ status = (four_pass * 100) / four_total
+ four_score = '{}/{}'.format(four_pass, four_total)
+ fifty_score = '{}/{}'.format(fifty_pass, fifty_total)
+ percent = str(status)
+ url = reporting_utils.getJenkinsUrl(data[-1]['build_tag'])
+ LOG.debug('Last four score: %s', four_score)
+ LOG.debug('Fifty days score: %s', fifty_score)
+ LOG.debug('Last Four percent: %s', percent)
+
+ _write_history_file(version, case, fifty_score, percent)
+
+ return ScenarioResult(status, four_score, fifty_score, percent, url)
+
+
+def _write_history_file(version, case, fifty_score, percent):
+ file_path = HISTORY_FILE.format(version)
+
+ if not os.path.exists(file_path):
+ with open(file_path, 'w') as f:
+ info = 'date,case,details,score\n'
+ f.write(info)
+
+ date = datetime.datetime.now().strftime("%Y-%m-%d %H:%M")
+
+ with open(file_path, "a") as f:
+ info = '{},{},{},{}\n'.format(date, case, fifty_score, percent)
+ f.write(info)
+
+
+def _do_generate(version, case_result):
+ templateLoader = jinja2.FileSystemLoader(".")
+ templateEnv = jinja2.Environment(loader=templateLoader,
+ autoescape=True)
+
+ template = templateEnv.get_template(TEMPLATE_FILE)
+
+ date = datetime.datetime.now().strftime("%Y-%m-%d %H:%M")
+
+ outputText = template.render(case_result=case_result,
+ period=50,
+ version=version,
+ date=date)
+
+ with open(TARGET_FILE.format(version), 'wb') as f:
+ f.write(outputText)
+
+
+def _generate_reporting(version, data):
+ case_result = {}
+ case_data = _get_case_data(data)
+ for case, value in case_data.items():
+ LOG.debug('version: %s, case: %s', version, case)
+ case_result[case] = _get_result_obj(version, case, value)
+ _do_generate(version, case_result)
+
+
+def main():
+ LOG.info("*******************************************")
+ LOG.info("* Generating vsperf reporting status *")
+ LOG.info("* Data retention = 50 days *")
+ LOG.info("* *")
+ LOG.info("*******************************************")
+
+ data = reporting_utils.getScenarios("vsperf",
+ None,
+ "fuel",
+ None,
+ period=50)
+ version_data = _get_version_data(data['vsperf'])
+
+ for version in {'master', 'danube', 'euphrates'}:
+ _generate_reporting(version, version_data.get(version, []))
+
+ LOG.info("End")
+
+
+if __name__ == '__main__':
+ main()