From b012fc984e8464d85adec06c958d794fa423dbf0 Mon Sep 17 00:00:00 2001 From: boucherv Date: Wed, 2 Mar 2016 16:04:10 +0100 Subject: [PATCH] Reporting dashboard for functest Change-Id: I6a5fa0c8918c0d4a98754c38f3c33238a0132a39 Signed-off-by: boucherv --- .../tools/reporting/default.css | 56 +++++++++++++ .../tools/reporting/index-tmpl.html | 91 ++++++++++++++++++++++ .../tools/reporting/reporting.py | 83 ++++++++++++++++++++ 3 files changed, 230 insertions(+) create mode 100644 utils/test/result_collection_api/tools/reporting/default.css create mode 100644 utils/test/result_collection_api/tools/reporting/index-tmpl.html create mode 100644 utils/test/result_collection_api/tools/reporting/reporting.py diff --git a/utils/test/result_collection_api/tools/reporting/default.css b/utils/test/result_collection_api/tools/reporting/default.css new file mode 100644 index 000000000..0e330e965 --- /dev/null +++ b/utils/test/result_collection_api/tools/reporting/default.css @@ -0,0 +1,56 @@ +.panel-header-item { + position: relative; + display: inline-block; + padding-left: 17px; + padding-right: 17px; +} + +.panel-pod-name { + margin-top: 10px; + margin-right: 27px; + float:right; + padding: 6px; +} + +.panel-default > .panel-heading .badge { + background-color: #007e88; + position: relative; + display: inline-block; +} + +.panel-default > .panel-heading .progress-bar { + height: 100%; + position: absolute; + left: 0; + top: 0; + width: 100%; + background-color: #0095a2 +} +.panel-default > .panel-heading h4 { + color: white; +} + +.panel-default > .panel-heading { + background-color: #00ADBB; + overflow: hidden; + position: relative; + width: 100%; +} + +th{ + text-align: center; +} + +td{ + text-align: center; +} + +.tr-danger { + background-color: #177870; + color: white; +} + +.btn-more { + color: white; + background-color: #0095a2; +} \ No newline at end of file diff --git a/utils/test/result_collection_api/tools/reporting/index-tmpl.html b/utils/test/result_collection_api/tools/reporting/index-tmpl.html new file mode 100644 index 000000000..4d1c50915 --- /dev/null +++ b/utils/test/result_collection_api/tools/reporting/index-tmpl.html @@ -0,0 +1,91 @@ + + + + + + + + + + + +
+
+

vIMS status page

+ +
+
+
+
+ + {% for scenario_name, results in scenario_results.iteritems() -%} +
+ + {% for result in results -%} + {% if loop.index > 2 -%} + + {%- endfor %} +
+
+
\ No newline at end of file diff --git a/utils/test/result_collection_api/tools/reporting/reporting.py b/utils/test/result_collection_api/tools/reporting/reporting.py new file mode 100644 index 000000000..246c6250c --- /dev/null +++ b/utils/test/result_collection_api/tools/reporting/reporting.py @@ -0,0 +1,83 @@ +from urllib2 import Request, urlopen, URLError +import json +import jinja2 +import os + +def sig_test_format(sig_test): + nbPassed = 0 + nbFailures = 0 + nbSkipped = 0 + for data_test in sig_test: + if data_test['result'] == "Passed": + nbPassed+= 1 + elif data_test['result'] == "Failed": + nbFailures += 1 + elif data_test['result'] == "Skipped": + nbSkipped += 1 + total_sig_test_result = {} + total_sig_test_result['passed'] = nbPassed + total_sig_test_result['failures'] = nbFailures + total_sig_test_result['skipped'] = nbSkipped + return total_sig_test_result + +installers = ["fuel", "compass", "joid", "apex"] +step_order = ["initialisation", "orchestrator", "vIMS", "sig_test"] + +for installer in installers: + request = Request('http://testresults.opnfv.org/testapi/results?case=vIMS&installer=' + installer) + + try: + response = urlopen(request) + k = response.read() + results = json.loads(k) + except URLError, e: + print 'No kittez. Got an error code:', e + + test_results = results['test_results'] + test_results.reverse() + + scenario_results = {} + for r in test_results: + if not r['version'] in scenario_results.keys(): + scenario_results[r['version']] = [] + scenario_results[r['version']].append(r) + + for s, s_result in scenario_results.items(): + scenario_results[s] = s_result[0:5] + for result in scenario_results[s]: + result["creation_date"] = result["creation_date"].split(".")[0] + sig_test = result['details']['sig_test']['result'] + if not sig_test == "": + format_result = sig_test_format(sig_test) + if format_result['failures'] > format_result['passed']: + result['details']['sig_test']['duration'] = 0 + result['details']['sig_test']['result'] = format_result + nb_step_ok = 0 + nb_step = len(result['details']) + + for step_name, step_result in result['details'].items(): + if step_result['duration'] != 0: + nb_step_ok += 1 + m, s = divmod(step_result['duration'], 60) + m_display = "" + if int(m) != 0: + m_display += str(int(m)) + "m " + step_result['duration_display'] = m_display + str(int(s)) + "s" + + result['pr_step_ok'] = 0 + if nb_step != 0: + result['pr_step_ok'] = (float(nb_step_ok)/nb_step)*100 + + + templateLoader = jinja2.FileSystemLoader(os.path.dirname(os.path.abspath(__file__))) + templateEnv = jinja2.Environment( loader=templateLoader ) + + TEMPLATE_FILE = "index-tmpl.html" + template = templateEnv.get_template( TEMPLATE_FILE ) + + outputText = template.render( scenario_results = scenario_results, step_order = step_order, installer = installer) + + with open("index-" + installer + ".html", "wb") as fh: + fh.write(outputText) + + -- 2.16.6