Consume OPNFV TestAPI to push results 97/33197/7
authorakhilbatra898 <akhil.batra@research.iiit.ac.in>
Mon, 10 Apr 2017 14:06:05 +0000 (19:36 +0530)
committerakhilbatra898 <akhil.batra@research.iiit.ac.in>
Wed, 12 Apr 2017 11:42:00 +0000 (17:12 +0530)
push_results will be triggered after a benchmark run is completed.

- Added Validation before the information to be sent to testapi
- A validator is added as a decorator for this

Change-Id: I1149133fc41668f6c8dab042e59673be2b46d09d
Signed-off-by: akhilbatra898 <akhil.batra@research.iiit.ac.in>
qtip/reporter/testapi.py [new file with mode: 0644]

diff --git a/qtip/reporter/testapi.py b/qtip/reporter/testapi.py
new file mode 100644 (file)
index 0000000..a0be537
--- /dev/null
@@ -0,0 +1,68 @@
+##############################################################################
+# Copyright (c) 2017 akhil.batra@research.iiit.ac.in and others.
+#
+# All rights reserved. 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 requests
+
+
+payload_template = {'project_name',
+                    'case_name',
+                    'pod_name',
+                    'installer',
+                    'version',
+                    'scenario',
+                    'criteria',
+                    'build_tag',
+                    'start_date',
+                    'stop_date',
+                    'details'}
+
+
+def validate_payload():
+    def _decorator(func):
+        def _execute(testapi_url, payload):
+            if set(payload.keys()) != payload_template:
+                missing_parameters = list(payload_template -
+                                          set(payload.keys()))
+                print "Missing Parameters -- {}".\
+                    format(",".join(missing_parameters))
+                raise MissingParamsError("push_results", missing_parameters)
+            invalid_params = []
+            for key in payload:
+                if (payload[key] == "") or (payload[key] is None):
+                    invalid_params.append(key)
+            if len(invalid_params) > 0:
+                print "Invalid or missing values of parameters -- `{}`".\
+                    format(",".join(invalid_params))
+                raise InvalidParamsError("push_results", invalid_params)
+            return func(testapi_url, payload)
+        return _execute
+    return _decorator
+
+
+class InvalidParamsError(Exception):
+    def __init__(self, method, params):
+        self.method = method
+        self.params = params
+
+
+class MissingParamsError(Exception):
+    def __init__(self, method, params):
+        self.method = method
+        self.params = params
+
+
+@validate_payload()
+def push_results(testapi_url, payload):
+    """ push results to OPNFV TestAPI """
+
+    response = requests.post(testapi_url + '/results', json=payload)
+    if response.status_code == requests.codes.ok:
+        return response.json()
+    else:
+        response.raise_for_status()