summaryrefslogtreecommitdiffstats
path: root/testapi/opnfv_testapi/handlers
diff options
context:
space:
mode:
authorSerena Feng <feng.xiaowei@zte.com.cn>2018-01-04 08:39:47 +0000
committerGerrit Code Review <gerrit@opnfv.org>2018-01-04 08:39:47 +0000
commitee2a75a5147728900204d6ec508159f4be208644 (patch)
tree0ac2a8d022dc3be9077115234dfcb47fd459569f /testapi/opnfv_testapi/handlers
parenteb7071a2d6e396dd044d899bd6a6a1512fee9596 (diff)
parentdb36e98243a4cb1c12d2245b8469743168d00f06 (diff)
Merge "add deployment result collecting interfaces"
Diffstat (limited to 'testapi/opnfv_testapi/handlers')
-rw-r--r--testapi/opnfv_testapi/handlers/base_handlers.py3
-rw-r--r--testapi/opnfv_testapi/handlers/deploy_result_handlers.py115
-rw-r--r--testapi/opnfv_testapi/handlers/result_handlers.py46
3 files changed, 141 insertions, 23 deletions
diff --git a/testapi/opnfv_testapi/handlers/base_handlers.py b/testapi/opnfv_testapi/handlers/base_handlers.py
index bc91f64..9eac737 100644
--- a/testapi/opnfv_testapi/handlers/base_handlers.py
+++ b/testapi/opnfv_testapi/handlers/base_handlers.py
@@ -47,6 +47,7 @@ class GenericApiHandler(web.RequestHandler):
self.db_testcases = 'testcases'
self.db_results = 'results'
self.db_scenarios = 'scenarios'
+ self.db_deployresults = 'deployresults'
self.auth = self.settings["auth"]
def prepare(self):
@@ -92,7 +93,7 @@ class GenericApiHandler(web.RequestHandler):
if k != 'query':
data.__setattr__(k, v)
- if self.table != 'results':
+ if 'results' not in self.table:
data.creation_date = datetime.now()
_id = yield dbapi.db_save(self.table, data.format())
if 'name' in self.json_args:
diff --git a/testapi/opnfv_testapi/handlers/deploy_result_handlers.py b/testapi/opnfv_testapi/handlers/deploy_result_handlers.py
new file mode 100644
index 0000000..973bfef
--- /dev/null
+++ b/testapi/opnfv_testapi/handlers/deploy_result_handlers.py
@@ -0,0 +1,115 @@
+from opnfv_testapi.handlers import result_handlers
+from opnfv_testapi.models import deploy_result_models
+from opnfv_testapi.tornado_swagger import swagger
+
+
+class GenericDeployResultHandler(result_handlers.GenericResultHandler):
+ def __init__(self, application, request, **kwargs):
+ super(GenericDeployResultHandler, self).__init__(application,
+ request,
+ **kwargs)
+ self.table = self.db_deployresults
+ self.table_cls = deploy_result_models.DeployResult
+
+
+class DeployResultsHandler(GenericDeployResultHandler):
+ @swagger.operation(nickname="queryDeployResults")
+ def get(self):
+ """
+ @description: Retrieve deployment result(s).
+ @notes: Retrieve deployment result(s).
+ Available filters for this request are :
+ - installer : fuel/apex/compass/joid/daisy
+ - version : platform version (Arno-R1, ...)
+ - pod_name : pod name
+ - job_name : jenkins job name
+ - build_id : Jenkins build id
+ - scenario : the test scenario
+ - period : x last days, incompatible with from/to
+ - from : starting time in 2016-01-01 or 2016-01-01 00:01:23
+ - to : ending time in 2016-01-01 or 2016-01-01 00:01:23
+ - criteria : the global criteria status passed or failed
+ - page : which page to list, default to 1
+ - descend : true, newest2oldest; false, oldest2newest
+
+ GET /deployresults/installer=daisy&version=master \
+ &pod_name=pod_name&period=15
+ @return 200: all deployment results consist with query,
+ empty list if no result is found
+ @rtype: L{DeployResults}
+ @param installer: installer name
+ @type installer: L{string}
+ @in installer: query
+ @required installer: False
+ @param version: version name
+ @type version: L{string}
+ @in version: query
+ @required version: False
+ @param pod_name: pod name
+ @type pod_name: L{string}
+ @in pod_name: query
+ @required pod_name: False
+ @param job_name: jenkins job name
+ @type job_name: L{string}
+ @in job_name: query
+ @required job_name: False
+ @param build_id: jenkins build_id
+ @type build_id: L{string}
+ @in build_id: query
+ @required build_id: False
+ @param scenario: i.e. odl
+ @type scenario: L{string}
+ @in scenario: query
+ @required scenario: False
+ @param criteria: i.e. PASS/FAIL
+ @type criteria: L{string}
+ @in criteria: query
+ @required criteria: False
+ @param period: last days
+ @type period: L{string}
+ @in period: query
+ @required period: False
+ @param from: i.e. 2016-01-01 or 2016-01-01 00:01:23
+ @type from: L{string}
+ @in from: query
+ @required from: False
+ @param to: i.e. 2016-01-01 or 2016-01-01 00:01:23
+ @type to: L{string}
+ @in to: query
+ @required to: False
+ @param page: which page to list, default to 1
+ @type page: L{int}
+ @in page: query
+ @required page: False
+ @param descend: true, newest2oldest; false, oldest2newest
+ @type descend: L{string}
+ @in descend: query
+ @required descend: False
+ """
+ super(DeployResultsHandler, self).get()
+
+ @swagger.operation(nickname="createDeployResult")
+ def post(self):
+ """
+ @description: create a deployment result
+ @param body: deployment result to be created
+ @type body: L{DeployResultCreateRequest}
+ @in body: body
+ @rtype: L{CreateResponse}
+ @return 200: deploy result is created.
+ @raise 404: pod not exist
+ @raise 400: body or some field is not provided
+ """
+ def pod_query():
+ return {'name': self.json_args.get('pod_name')}
+
+ def options_check(field, options):
+ return self.json_args.get(field).upper() in options
+
+ miss_fields = ['pod_name', 'installer', 'scenario']
+ carriers = [('pods', pod_query)]
+ values_check = [('criteria', options_check, ['PASS', 'FAIL'])]
+
+ self._create(miss_fields=miss_fields,
+ carriers=carriers,
+ values_check=values_check)
diff --git a/testapi/opnfv_testapi/handlers/result_handlers.py b/testapi/opnfv_testapi/handlers/result_handlers.py
index c4b61ff..b0691cd 100644
--- a/testapi/opnfv_testapi/handlers/result_handlers.py
+++ b/testapi/opnfv_testapi/handlers/result_handlers.py
@@ -58,6 +58,8 @@ class GenericResultHandler(base_handlers.GenericApiHandler):
date_range.update({'$gte': str(v)})
elif k == 'to':
date_range.update({'$lt': str(v)})
+ elif 'build_id' in k:
+ query[k] = self.get_int(k, v)
elif k == 'signed':
username = self.get_secure_cookie(constants.TESTAPI_ID)
role = self.get_secure_cookie(constants.ROLE)
@@ -77,6 +79,26 @@ class GenericResultHandler(base_handlers.GenericApiHandler):
return query
+ def get(self):
+ def descend_limit():
+ descend = self.get_query_argument('descend', 'true')
+ return -1 if descend.lower() == 'true' else 1
+
+ def last_limit():
+ return self.get_int('last', self.get_query_argument('last', 0))
+
+ def page_limit():
+ return self.get_int('page', self.get_query_argument('page', 1))
+
+ limitations = {
+ 'sort': {'_id': descend_limit()},
+ 'last': last_limit(),
+ 'page': page_limit(),
+ 'per_page': CONF.api_results_per_page
+ }
+
+ self._list(query=self.set_query(), **limitations)
+
class ResultsCLHandler(GenericResultHandler):
@swagger.operation(nickname="queryTestResults")
@@ -171,24 +193,7 @@ class ResultsCLHandler(GenericResultHandler):
@in descend: query
@required descend: False
"""
- def descend_limit():
- descend = self.get_query_argument('descend', 'true')
- return -1 if descend.lower() == 'true' else 1
-
- def last_limit():
- return self.get_int('last', self.get_query_argument('last', 0))
-
- def page_limit():
- return self.get_int('page', self.get_query_argument('page', 1))
-
- limitations = {
- 'sort': {'_id': descend_limit()},
- 'last': last_limit(),
- 'page': page_limit(),
- 'per_page': CONF.api_results_per_page
- }
-
- self._list(query=self.set_query(), **limitations)
+ super(ResultsCLHandler, self).get()
@swagger.operation(nickname="createTestResult")
def post(self):
@@ -202,9 +207,6 @@ class ResultsCLHandler(GenericResultHandler):
@raise 404: pod/project/testcase not exist
@raise 400: body/pod_name/project_name/case_name not provided
"""
- self._post()
-
- def _post(self):
def pod_query():
return {'name': self.json_args.get('pod_name')}
@@ -255,7 +257,7 @@ class ResultsUploadHandler(ResultsCLHandler):
if openid:
self.json_args['user'] = openid
- super(ResultsUploadHandler, self)._post()
+ super(ResultsUploadHandler, self).post()
class ResultsGURHandler(GenericResultHandler):