From db36e98243a4cb1c12d2245b8469743168d00f06 Mon Sep 17 00:00:00 2001 From: SerenaFeng Date: Wed, 3 Jan 2018 10:33:08 +0800 Subject: add deployment result collecting interfaces Change-Id: I5fe50c44e7b36ea45dd1b8632130b30dfe173d0a Signed-off-by: SerenaFeng --- testapi/opnfv_testapi/handlers/base_handlers.py | 3 +- .../handlers/deploy_result_handlers.py | 115 +++++++++++++++++++++ testapi/opnfv_testapi/handlers/result_handlers.py | 46 +++++---- 3 files changed, 141 insertions(+), 23 deletions(-) create mode 100644 testapi/opnfv_testapi/handlers/deploy_result_handlers.py (limited to 'testapi/opnfv_testapi/handlers') diff --git a/testapi/opnfv_testapi/handlers/base_handlers.py b/testapi/opnfv_testapi/handlers/base_handlers.py index a2fdb19..8c585a1 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): -- cgit 1.2.3-korg