script to transfor vPing raw results into a json file to be used by the future dashboard 93/1393/1
authorMorgan Richomme <morgan.richomme@orange.com>
Fri, 4 Sep 2015 14:46:14 +0000 (16:46 +0200)
committerMorgan Richomme <morgan.richomme@orange.com>
Fri, 4 Sep 2015 14:46:14 +0000 (16:46 +0200)
JIRA: FUNCTEST-45

Change-Id: I257a2762347e1466d7e3fc17ad773c251d36861e
Signed-off-by: Morgan Richomme <morgan.richomme@orange.com>
testcases/Dashboard/vPing2Dashboard.py [new file with mode: 0644]

diff --git a/testcases/Dashboard/vPing2Dashboard.py b/testcases/Dashboard/vPing2Dashboard.py
new file mode 100644 (file)
index 0000000..d32187a
--- /dev/null
@@ -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()