aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMorgan Richomme <morgan.richomme@orange.com>2015-09-04 16:46:14 +0200
committerMorgan Richomme <morgan.richomme@orange.com>2015-09-04 16:46:14 +0200
commit18355871a2c0a9fb8c508c2f14983e45c88d54ac (patch)
treed00fb049724dac576ded78e8e21c6965aef328d0
parentd170a37e980660f2f3ceaa4ed35f5ed2e4fe1f53 (diff)
script to transfor vPing raw results into a json file to be used by the future dashboard
JIRA: FUNCTEST-45 Change-Id: I257a2762347e1466d7e3fc17ad773c251d36861e Signed-off-by: Morgan Richomme <morgan.richomme@orange.com>
-rw-r--r--testcases/Dashboard/vPing2Dashboard.py127
1 files changed, 127 insertions, 0 deletions
diff --git a/testcases/Dashboard/vPing2Dashboard.py b/testcases/Dashboard/vPing2Dashboard.py
new file mode 100644
index 000000000..d32187afd
--- /dev/null
+++ b/testcases/Dashboard/vPing2Dashboard.py
@@ -0,0 +1,127 @@
+#!/usr/bin/python
+#
+# Copyright (c) 2015 Orange
+# morgan.richomme@orange.com
+#
+# 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
+#
+# This script is used to get data from test DB
+# and format them into a json format adapted for a dashboard
+#
+# v0.1: basic example
+#
+import logging
+import argparse
+import pprint
+import json
+import requests
+
+pp = pprint.PrettyPrinter(indent=4)
+
+parser = argparse.ArgumentParser()
+parser.add_argument("-d", "--debug", help="Debug mode", action="store_true")
+args = parser.parse_args()
+
+""" logging configuration """
+logger = logging.getLogger('vPing2DashBoard')
+logger.setLevel(logging.DEBUG)
+
+ch = logging.StreamHandler()
+if args.debug:
+ ch.setLevel(logging.DEBUG)
+else:
+ ch.setLevel(logging.INFO)
+
+formatter = logging.Formatter # retrieve info from DB
+('%(asctime)s - %(name)s - %(levelname)s - %(message)s')
+ch.setFormatter(formatter)
+logger.addHandler(ch)
+
+
+def get_data(test_project, testcase, pod_id, days, version, installerType):
+ # ugly hard coding => TODO use yaml config file
+ url = "http://213.77.62.197:80/results"
+
+ # use param to filter request to result DB
+ # if not precised => no filter
+ # filter criteria:
+ # - POD
+ # - versions
+ # - installers
+ # - testcase
+ # - test projects
+ # - timeframe (last 30 days, 365 days, since beginning of the project)
+ # e.g.
+ # - vPing tests since 2 months
+ # - Tempest tests on LF POD2 fuel based / Arno stable since the beginning
+ # - yardstick tests on any POD since 30 days
+ # - Qtip tests on dell-test1 POD
+ #
+ # params = {"pod_id":pod_id, "testcase":testcase}
+ # filter_date = days # data from now - days
+
+ # TODO complete params (installer type, testcase, version )
+ params = {"pod_id": 1}
+
+ # Build headers
+ headers = {'Content-Type': 'application/json'}
+
+ # Send Request to Test DB
+ myData = requests.get(url, data=json.dumps(params), headers=headers)
+ # Get result as a json object
+ myNewData = json.loads(myData.text)
+
+ # Get results
+ myDataResults = myNewData['test_results']
+
+ # Depending on the use case, json for dashboarding is customized
+ # depending on the graph you want to show
+
+ test_data = [{'description': 'vPing results for Dashboard'}]
+
+ # Graph 1: Duration = f(time)
+ new_element = []
+ for data in myDataResults:
+ new_element.append({'x': data['creation_date'],
+ 'y': data['details']['duration']})
+
+ test_data.append({'name': "vPing duration",
+ 'info': {'type': "graph",
+ 'xlabel': 'time',
+ 'ylabel': 'duration (s)'},
+ 'data_set': new_element})
+
+ # Graph 2: bar
+ nbTest = 0
+ nbTestOk = 0
+
+ for data in myDataResults:
+ nbTest += 1
+ if data['details']['status'] == "OK":
+ nbTestOk += 1
+
+ # Generate json file
+ # TODO complete with other criteria
+ fileName = "result-" + test_project + "-" + testcase + "-" + str(days) + "-" + str(pod_id) + "-status.json"
+
+ test_data.append({'name': "vPing status",
+ 'info': {"type": "bar"},
+ 'data_set': [{'Nb tests': nbTest,
+ 'Nb Success': nbTestOk}]})
+
+ fileName = "result-" + test_project + "-" + testcase + ".json"
+
+ with open(fileName, "w") as outfile:
+ json.dump(test_data, outfile, indent=4)
+
+
+def main():
+ get_data('functest', 'vPing', 1, 30, 'Arno master', 'fuel')
+
+
+if __name__ == '__main__':
+ main()