From f53fc8221faf7718d1cf060038ad3a23463b8398 Mon Sep 17 00:00:00 2001 From: rexlee8776 Date: Sat, 27 Aug 2016 06:26:46 +0000 Subject: Add the function of yardstick testcase reporter JIRA: YARDSTICK-324 Change-Id: I58969265f88d5c20f46f0b1097f5b0ccb1d9a40d Signed-off-by: rexlee8776 --- utils/test/reporting/yardstick/img/icon-nok.png | Bin 0 -> 2317 bytes utils/test/reporting/yardstick/img/icon-ok.png | Bin 0 -> 4063 bytes .../test/reporting/yardstick/img/weather-clear.png | Bin 0 -> 1560 bytes .../reporting/yardstick/img/weather-few-clouds.png | Bin 0 -> 1927 bytes .../reporting/yardstick/img/weather-overcast.png | Bin 0 -> 1588 bytes .../test/reporting/yardstick/img/weather-storm.png | Bin 0 -> 2137 bytes utils/test/reporting/yardstick/index.html | 48 +++++++++++++ utils/test/reporting/yardstick/reporting-status.py | 74 +++++++++++++++++++++ utils/test/reporting/yardstick/reportingConf.py | 28 ++++++++ utils/test/reporting/yardstick/reportingUtils.py | 68 +++++++++++++++++++ utils/test/reporting/yardstick/scenarioResult.py | 20 ++++++ .../yardstick/template/index-status-tmpl.html | 66 ++++++++++++++++++ 12 files changed, 304 insertions(+) create mode 100644 utils/test/reporting/yardstick/img/icon-nok.png create mode 100644 utils/test/reporting/yardstick/img/icon-ok.png create mode 100644 utils/test/reporting/yardstick/img/weather-clear.png create mode 100644 utils/test/reporting/yardstick/img/weather-few-clouds.png create mode 100644 utils/test/reporting/yardstick/img/weather-overcast.png create mode 100644 utils/test/reporting/yardstick/img/weather-storm.png create mode 100644 utils/test/reporting/yardstick/index.html create mode 100644 utils/test/reporting/yardstick/reporting-status.py create mode 100644 utils/test/reporting/yardstick/reportingConf.py create mode 100644 utils/test/reporting/yardstick/reportingUtils.py create mode 100644 utils/test/reporting/yardstick/scenarioResult.py create mode 100644 utils/test/reporting/yardstick/template/index-status-tmpl.html diff --git a/utils/test/reporting/yardstick/img/icon-nok.png b/utils/test/reporting/yardstick/img/icon-nok.png new file mode 100644 index 000000000..526b5294b Binary files /dev/null and b/utils/test/reporting/yardstick/img/icon-nok.png differ diff --git a/utils/test/reporting/yardstick/img/icon-ok.png b/utils/test/reporting/yardstick/img/icon-ok.png new file mode 100644 index 000000000..3a9de2e89 Binary files /dev/null and b/utils/test/reporting/yardstick/img/icon-ok.png differ diff --git a/utils/test/reporting/yardstick/img/weather-clear.png b/utils/test/reporting/yardstick/img/weather-clear.png new file mode 100644 index 000000000..a0d967750 Binary files /dev/null and b/utils/test/reporting/yardstick/img/weather-clear.png differ diff --git a/utils/test/reporting/yardstick/img/weather-few-clouds.png b/utils/test/reporting/yardstick/img/weather-few-clouds.png new file mode 100644 index 000000000..acfa78398 Binary files /dev/null and b/utils/test/reporting/yardstick/img/weather-few-clouds.png differ diff --git a/utils/test/reporting/yardstick/img/weather-overcast.png b/utils/test/reporting/yardstick/img/weather-overcast.png new file mode 100644 index 000000000..4296246d0 Binary files /dev/null and b/utils/test/reporting/yardstick/img/weather-overcast.png differ diff --git a/utils/test/reporting/yardstick/img/weather-storm.png b/utils/test/reporting/yardstick/img/weather-storm.png new file mode 100644 index 000000000..956f0e20f Binary files /dev/null and b/utils/test/reporting/yardstick/img/weather-storm.png differ diff --git a/utils/test/reporting/yardstick/index.html b/utils/test/reporting/yardstick/index.html new file mode 100644 index 000000000..ec64bc848 --- /dev/null +++ b/utils/test/reporting/yardstick/index.html @@ -0,0 +1,48 @@ + + + + + + + + + + + +
+
+

Yardstick reporting page

+ +
+
+
+
+
+

Yardstick

+ Yardstick is used in OPNFV for verifying the OPNFV infrastructure and some of the OPNFV features. +
The Yardstick framework is deployed in several OPNFV community labs. +
It is installer, infrastructure and application independent. + +

Useful Links

+
  • Yardstick in Depth
  • +
  • Yardstick Repo
  • +
  • Yardstick Project
  • +
  • Yardstick Jenkins page
  • +
  • JIRA
  • + +
    +
    +
    +
    \ No newline at end of file diff --git a/utils/test/reporting/yardstick/reporting-status.py b/utils/test/reporting/yardstick/reporting-status.py new file mode 100644 index 000000000..ed5dab044 --- /dev/null +++ b/utils/test/reporting/yardstick/reporting-status.py @@ -0,0 +1,74 @@ +#!/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 jinja2 +import requests +import sys +import time +import yaml + +import reportingUtils as utils +import reportingConf as conf +import scenarioResult as sr + +# Logger +logger = utils.getLogger("Yardstick-Status") + +logger.info("*******************************************") +logger.info("* Generating reporting scenario status *") +logger.info("* Data retention = %s days *" % conf.PERIOD) +logger.info("* *") +logger.info("*******************************************") + +# For all the versions +for version in conf.versions: + # For all the installers + for installer in conf.installers: + # get scenarios results data + scenario_results = utils.getScenarioStatus(installer, version) + scenario_result_criteria = {} + + # 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)) + + s_status = 'KO' + scenario_criteria = len(s_result) + scenario_score = 0 + + for v in s_result: + if v['details'] == 'SUCCESS': + scenario_score += 1 + + if scenario_score == scenario_criteria: + s_status = 'OK' + logger.info(">>>>> scenario OK, save the information") + else: + logger.info(">>>> scenario not OK, score = %s/%s" % (scenario_score, scenario_criteria)) + + s_score = str(scenario_score) + '/' + str(scenario_criteria) + scenario_result_criteria[s] = sr.ScenarioResult(s_status, s_score) + + logger.info("--------------------------") + + templateLoader = jinja2.FileSystemLoader(conf.REPORTING_PATH) + templateEnv = jinja2.Environment(loader=templateLoader) + + TEMPLATE_FILE = "/template/index-status-tmpl.html" + template = templateEnv.get_template(TEMPLATE_FILE) + + outputText = template.render(scenario_results=scenario_result_criteria, + installer=installer, + period=conf.PERIOD, + version=version) + + with open(conf.REPORTING_PATH + "/release/" + version + + "/index-status-" + installer + ".html", "wb") as fh: + fh.write(outputText) diff --git a/utils/test/reporting/yardstick/reportingConf.py b/utils/test/reporting/yardstick/reportingConf.py new file mode 100644 index 000000000..af95cc00f --- /dev/null +++ b/utils/test/reporting/yardstick/reportingConf.py @@ -0,0 +1,28 @@ +#!/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 +# +# Reporting: Declaration of the variables +# +# **************************************************** +installers = ["apex", "compass", "fuel", "joid"] + +versions = ["master"] + +# get data in the past 7 days +PERIOD = 7 + +# get the lastest 4 test results to determinate the success criteria +LASTEST_TESTS = 4 + +REPORTING_PATH = "." + +URL_BASE = 'http://testresults.opnfv.org/test/api/v1/results' + +# LOG_LEVEL = "ERROR" +LOG_LEVEL = "INFO" +LOG_FILE = REPORTING_PATH + "/reporting.log" diff --git a/utils/test/reporting/yardstick/reportingUtils.py b/utils/test/reporting/yardstick/reportingUtils.py new file mode 100644 index 000000000..06bcd4926 --- /dev/null +++ b/utils/test/reporting/yardstick/reportingUtils.py @@ -0,0 +1,68 @@ +#!/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 +# +from urllib2 import Request, urlopen, URLError +import logging +import json +import reportingConf as conf + + +def getLogger(module): + logFormatter = logging.Formatter("%(asctime)s [" + + module + + "] [%(levelname)-5.5s] %(message)s") + logger = logging.getLogger() + + fileHandler = logging.FileHandler("{0}/{1}".format('.', conf.LOG_FILE)) + fileHandler.setFormatter(logFormatter) + logger.addHandler(fileHandler) + + consoleHandler = logging.StreamHandler() + consoleHandler.setFormatter(logFormatter) + logger.addHandler(consoleHandler) + logger.setLevel(conf.LOG_LEVEL) + return logger + + +def getScenarioStatus(installer, version): + url = (conf.URL_BASE + "?case=" + "scenario_status" + + "&installer=" + installer + + "&version=" + version +"&period=" + str(conf.PERIOD)) + request = Request(url) + + try: + response = urlopen(request) + k = response.read() + response.close() + results = json.loads(k) + test_results = results['results'] + except URLError, e: + print 'Got an error code:', e + + scenario_results = {} + if test_results is not None: + for r in test_results: + if r['stop_date'] != 'None': + if not r['scenario'] in scenario_results.keys(): + scenario_results[r['scenario']] = [] + scenario_results[r['scenario']].append(r) + + for k,v in scenario_results.items(): + scenario_results[k] = v[:conf.LASTEST_TESTS] + + return scenario_results + + +def _test(): + status = getScenarioStatus("compass", "master") + print "status:++++++++++++++++++++++++" + print json.dumps(status,indent=4) + + +if __name__ == '__main__': # pragma: no cover + _test() diff --git a/utils/test/reporting/yardstick/scenarioResult.py b/utils/test/reporting/yardstick/scenarioResult.py new file mode 100644 index 000000000..743346adc --- /dev/null +++ b/utils/test/reporting/yardstick/scenarioResult.py @@ -0,0 +1,20 @@ +#!/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 +# + + +class ScenarioResult(object): + def __init__(self, status, score=0): + self.status = status + self.score = score + + def getStatus(self): + return self.status + + def getScore(self): + return self.score diff --git a/utils/test/reporting/yardstick/template/index-status-tmpl.html b/utils/test/reporting/yardstick/template/index-status-tmpl.html new file mode 100644 index 000000000..ff1a619f1 --- /dev/null +++ b/utils/test/reporting/yardstick/template/index-status-tmpl.html @@ -0,0 +1,66 @@ + + + + + + + + + + + +
    +
    +

    Yardstick status page ({{version}})

    + +
    +
    +
    +
    + + +
    +

    List of last scenarios ({{version}}) run over the last {{period}} days

    + + + + + + + {% for scenario,result in scenario_results.iteritems() -%} + + + + + + {%- endfor %} +
    ScenarioStatusScore
    {{scenario}} + {%if scenario_results[scenario].getStatus() is sameas "OK" -%} + + {%- else -%} + + {%- endif %} + {{scenario_results[scenario].getScore()}}
    +
    + + +
    +
    +
    -- cgit 1.2.3-korg