1 from tornado.web import HTTPError
3 from opnfv_testapi.common.constants import HTTP_NOT_FOUND
4 from opnfv_testapi.dashboard.dashboard_utils import \
5 check_dashboard_ready_project, \
6 check_dashboard_ready_case, get_dashboard_result
7 from opnfv_testapi.resources.result_handlers import GenericResultHandler
8 from opnfv_testapi.resources.result_models import TestResult
9 from opnfv_testapi.tornado_swagger import swagger
12 class GenericDashboardHandler(GenericResultHandler):
13 def __init__(self, application, request, **kwargs):
14 super(GenericDashboardHandler, self).__init__(application,
17 self.table = self.db_results
18 self.table_cls = TestResult
21 class DashboardHandler(GenericDashboardHandler):
22 @swagger.operation(nickname='query')
25 @description: Retrieve dashboard ready result(s)
27 @notes: Retrieve dashboard ready result(s) for a test project
28 Available filters for this request are :
29 - project : project name
32 - version : platform version (Arno-R1, ...)
33 - installer (fuel, ...)
34 - period : x (x last days)
36 GET /dashboard?project=functest&case=vPing&version=Colorado \
37 &pod=pod_name&period=15
43 @param project: project name
44 @type project: L{string}
46 @required project: True
47 @param case: case name
51 @param version: i.e. Colorado
52 @type version: L{string}
54 @required version: False
55 @param installer: fuel/apex/joid/compass
56 @type installer: L{string}
58 @required installer: False
59 @param period: last days
60 @type period: L{string}
62 @required period: False
63 @return 200: test result exist
64 @raise 400: period is not in
65 @raise 404: project or case name missing,
66 or project or case is not dashboard ready
69 project_arg = self.get_query_argument("project", None)
70 case_arg = self.get_query_argument("case", None)
72 # on /dashboard retrieve the list of projects and testcases
74 if project_arg is None:
75 raise HTTPError(HTTP_NOT_FOUND, "Project name missing")
77 if not check_dashboard_ready_project(project_arg):
78 raise HTTPError(HTTP_NOT_FOUND,
79 'Project [{}] not dashboard ready'
85 'Test case missing for project [{}]'.format(project_arg))
87 if not check_dashboard_ready_case(project_arg, case_arg):
90 'Test case [{}] not dashboard ready for project [{}]'
91 .format(case_arg, project_arg))
93 # special case of status for project
94 if case_arg == 'status':
95 self.finish_request(get_dashboard_result(project_arg, case_arg))
97 def get_result(res, project, case):
98 return get_dashboard_result(project, case, res)
100 self._list(self.set_query(), get_result, project_arg, case_arg)