summaryrefslogtreecommitdiffstats
path: root/utils/test/reporting/qtip
diff options
context:
space:
mode:
authorMorgan Richomme <morgan.richomme@orange.com>2017-07-04 17:23:33 +0200
committerMorgan Richomme <morgan.richomme@orange.com>2017-08-09 16:45:43 +0200
commit354afd448cefc348f185b9adc4b5e6d38f96a3b0 (patch)
tree57c77cd4aec995f4142b24a0c1bb004ae99199cb /utils/test/reporting/qtip
parent6b8f885df235649608e70a9a4337e8493705a32a (diff)
Initiate packetization of Testing reporting
Testing reporting provides - static reporting pages [1] (jinja2) - landing pages including test case catalogue [2] (angular) It consumes the Test API to build web pages providing status for the testing projects (so far functest, yardstick, storperf and qtip). Dockerization has been initiated [3]. The goal is to replace the static page hosted on testresults.opnfv.org by a docker regenerated and redeployed when reporting code is changed But the docker and more generally the testing reporting directory must be refactored to - manage dependencies properly - leverage tox (py27, docs, pylint, pep8) This patch - setups tox (py27, pep8, pylint, docs) - integrate the requirement management - fix pep8 errors - introduce 1 dummy unit test This patch does not - fix pylint errors - create any doc [1]: http://testresults.opnfv.org/reporting2/display/index.html [2]: http://testresults.opnfv.org/reporting2/reporting/index.html [3]: https://gerrit.opnfv.org/gerrit/#/c/36735/ Change-Id: I4613de7ca7036d6c6bbb8f58ade492b1d673599b Signed-off-by: Morgan Richomme <morgan.richomme@orange.com>
Diffstat (limited to 'utils/test/reporting/qtip')
-rw-r--r--utils/test/reporting/qtip/__init__.py0
-rw-r--r--utils/test/reporting/qtip/index.html51
-rw-r--r--utils/test/reporting/qtip/reporting-status.py110
-rw-r--r--utils/test/reporting/qtip/template/index-status-tmpl.html86
4 files changed, 0 insertions, 247 deletions
diff --git a/utils/test/reporting/qtip/__init__.py b/utils/test/reporting/qtip/__init__.py
deleted file mode 100644
index e69de29bb..000000000
--- a/utils/test/reporting/qtip/__init__.py
+++ /dev/null
diff --git a/utils/test/reporting/qtip/index.html b/utils/test/reporting/qtip/index.html
deleted file mode 100644
index 0f9df8564..000000000
--- a/utils/test/reporting/qtip/index.html
+++ /dev/null
@@ -1,51 +0,0 @@
- <html>
- <head>
- <meta charset="utf-8">
- <!-- Bootstrap core CSS -->
- <link href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.4/css/bootstrap.min.css" rel="stylesheet">
- <link href="default.css" rel="stylesheet">
- <script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1/jquery.min.js"></script>
- <script type="text/javascript" src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.4/js/bootstrap.min.js"></script>
- <script type="text/javascript">
- $(document).ready(function (){
- $(".btn-more").click(function() {
- $(this).hide();
- $(this).parent().find(".panel-default").show();
- });
- })
- </script>
- </head>
- <body>
- <div class="container">
- <div class="masthead">
- <h3 class="text-muted">QTIP reporting page</h3>
- <nav>
- <ul class="nav nav-justified">
- <li class="active"><a href="http://testresults.opnfv.org/reporting/index.html">Home</a></li>
- <li><a href="index-status-apex.html">Apex</a></li>
- <li><a href="index-status-compass.html">Compass</a></li>
- <li><a href="index-status-fuel.html">Fuel</a></li>
- <li><a href="index-status-joid.html">Joid</a></li>
- </ul>
- </nav>
- </div>
-<div class="row">
- <div class="col-md-1"></div>
- <div class="col-md-10">
- <div class="page-main">
- <h2>QTIP</h2>
- QTIP is used in OPNFV for verifying the OPNFV infrastructure and some of the OPNFV features.
- <br>The QTIP framework is deployed in several OPNFV community labs.
- <br>It is installer, infrastructure and application independent.
-
- <h2>Useful Links</h2>
- <li><a href="https://wiki.opnfv.org/download/attachments/5734608/qtip%20in%20depth.pdf?version=1&modificationDate=1463410431000&api=v2">QTIP in Depth</a></li>
- <li><a href="https://git.opnfv.org/cgit/qtip">QTIP Repo</a></li>
- <li><a href="https://wiki.opnfv.org/display/qtip">QTIP Project</a></li>
- <li><a href="https://build.opnfv.org/ci/view/qtip/">QTIP Jenkins page</a></li>
- <li><a href="https://jira.opnfv.org/browse/QTIP-119?jql=project%20%3D%20QTIP">JIRA</a></li>
-
- </div>
- </div>
- <div class="col-md-1"></div>
-</div>
diff --git a/utils/test/reporting/qtip/reporting-status.py b/utils/test/reporting/qtip/reporting-status.py
deleted file mode 100644
index 5967cf6b9..000000000
--- a/utils/test/reporting/qtip/reporting-status.py
+++ /dev/null
@@ -1,110 +0,0 @@
-#!/usr/bin/python
-#
-# This program and the accompanying materials
-# are made available under the terms of the Apache License, Version 2.0
-# which accompanies this distribution, and is available at
-#
-# http://www.apache.org/licenses/LICENSE-2.0
-#
-import datetime
-import os
-
-import jinja2
-import utils.reporting_utils as rp_utils
-import utils.scenarioResult as sr
-
-installers = rp_utils.get_config('general.installers')
-versions = rp_utils.get_config('general.versions')
-PERIOD = rp_utils.get_config('general.period')
-
-# Logger
-logger = rp_utils.getLogger("Qtip-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("*******************************************")
-
-
-def prepare_profile_file(version):
- profile_dir = './display/{}/qtip'.format(version)
- if not os.path.exists(profile_dir):
- os.makedirs(profile_dir)
-
- profile_file = '{}/scenario_history.txt'.format(profile_dir, version)
- if not os.path.exists(profile_file):
- with open(profile_file, 'w') as f:
- info = 'date,scenario,installer,details,score\n'
- f.write(info)
- f.close()
- return profile_file
-
-
-def profile_results(results, installer, profile_fd):
- result_criterias = {}
- for s_p, s_p_result in results.iteritems():
- ten_criteria = len(s_p_result)
- ten_score = sum(s_p_result)
-
- LASTEST_TESTS = rp_utils.get_config(
- 'general.nb_iteration_tests_success_criteria')
- four_result = s_p_result[:LASTEST_TESTS]
- four_criteria = len(four_result)
- four_score = sum(four_result)
-
- s_four_score = str(four_score / four_criteria)
- s_ten_score = str(ten_score / ten_criteria)
-
- info = '{},{},{},{},{}\n'.format(reportingDate,
- s_p,
- installer,
- s_ten_score,
- s_four_score)
- profile_fd.write(info)
- result_criterias[s_p] = sr.ScenarioResult('OK',
- s_four_score,
- s_ten_score,
- '100')
-
- logger.info("--------------------------")
- return result_criterias
-
-
-def render_html(prof_results, installer, version):
- template_loader = jinja2.FileSystemLoader(".")
- template_env = jinja2.Environment(loader=template_loader,
- autoescape=True)
-
- template_file = "./qtip/template/index-status-tmpl.html"
- template = template_env.get_template(template_file)
-
- render_outcome = template.render(prof_results=prof_results,
- installer=installer,
- period=PERIOD,
- version=version,
- date=reportingDate)
-
- with open('./display/{}/qtip/status-{}.html'.format(version, installer),
- 'wb') as fh:
- fh.write(render_outcome)
-
-
-def render_reporter():
- for version in versions:
- profile_file = prepare_profile_file(version)
- profile_fd = open(profile_file, 'a')
- for installer in installers:
- results = rp_utils.getQtipResults(version, installer)
- prof_results = profile_results(results, installer, profile_fd)
- render_html(prof_results=prof_results,
- installer=installer,
- version=version)
- profile_fd.close()
- logger.info("Manage export CSV")
- rp_utils.generate_csv(profile_file)
- logger.info("CSV generated...")
-
-if __name__ == '__main__':
- render_reporter()
diff --git a/utils/test/reporting/qtip/template/index-status-tmpl.html b/utils/test/reporting/qtip/template/index-status-tmpl.html
deleted file mode 100644
index 26da36ceb..000000000
--- a/utils/test/reporting/qtip/template/index-status-tmpl.html
+++ /dev/null
@@ -1,86 +0,0 @@
- <html>
- <head>
- <meta charset="utf-8">
- <!-- Bootstrap core CSS -->
- <link href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.4/css/bootstrap.min.css" rel="stylesheet">
- <link href="../../css/default.css" rel="stylesheet">
- <script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1/jquery.min.js"></script>
- <script type="text/javascript" src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.4/js/bootstrap.min.js"></script>
- <script type="text/javascript" src="http://d3js.org/d3.v2.min.js"></script>
- <script type="text/javascript" src="../../js/trend-qtip.js"></script>
- <script>
- // trend line management
- d3.csv("./scenario_history.csv", function(data) {
- // ***************************************
- // Create the trend line
- {% for scenario in prof_results.keys() -%}
- // for scenario {{scenario}}
- // Filter results
- var trend{{loop.index}} = data.filter(function(row) {
- return row["scenario"]=="{{scenario}}" && row["installer"]=="{{installer}}";
- })
- // Parse the date
- trend{{loop.index}}.forEach(function(d) {
- d.date = parseDate(d.date);
- d.score = +d.score
- });
- // Draw the trend line
- var mytrend = trend("#trend_svg{{loop.index}}",trend{{loop.index}})
- // ****************************************
- {%- endfor %}
- });
- </script>
- <script type="text/javascript">
- $(document).ready(function (){
- $(".btn-more").click(function() {
- $(this).hide();
- $(this).parent().find(".panel-default").show();
- });
- })
- </script>
- </head>
- <body>
- <div class="container">
- <div class="masthead">
- <h3 class="text-muted">QTIP status page ({{version}}, {{date}})</h3>
- <nav>
- <ul class="nav nav-justified">
- <li class="active"><a href="http://testresults.opnfv.org/reporting/index.html">Home</a></li>
- <li><a href="index-status-apex.html">Apex</a></li>
- <li><a href="index-status-compass.html">Compass</a></li>
- <li><a href="index-status-fuel.html">Fuel</a></li>
- <li><a href="index-status-joid.html">Joid</a></li>
- </ul>
- </nav>
- </div>
-<div class="row">
- <div class="col-md-1"></div>
- <div class="col-md-10">
- <div class="page-header">
- <h2>{{installer}}</h2>
- </div>
-
- <div class="scenario-overview">
- <div class="panel-heading"><h4><b>List of last scenarios ({{version}}) run over the last {{period}} days </b></h4></div>
- <table class="table">
- <tr>
- <th width="25%">Pod/Scenario</th>
- <th width="25%">Trend</th>
- <th width="25%">Last 4 Iterations</th>
- <th width="25%">Last 10 Days</th>
- </tr>
- {% for scenario,result in prof_results.iteritems() -%}
- <tr class="tr-ok">
- <td>{{scenario}}</td>
- <td><div id="trend_svg{{loop.index}}"></div></td>
- <td>{{prof_results[scenario].getFourDaysScore()}}</td>
- <td>{{prof_results[scenario].getTenDaysScore()}}</td>
- </tr>
- {%- endfor %}
- </table>
- </div>
-
-
- </div>
- <div class="col-md-1"></div>
-</div>