7cc4f5d14447aa421af8e08557f99f42d5eea511
[yardstick.git] / api / resources / v2 / tasks.py
1 import uuid
2 import logging
3 from datetime import datetime
4
5 from oslo_serialization import jsonutils
6
7 from api import ApiResource
8 from api.database.v2.handlers import V2TaskHandler
9 from api.database.v2.handlers import V2ProjectHandler
10 from api.database.v2.handlers import V2EnvironmentHandler
11 from yardstick.common.utils import result_handler
12 from yardstick.common.utils import change_obj_to_dict
13 from yardstick.common import constants as consts
14
15 LOG = logging.getLogger(__name__)
16 LOG.setLevel(logging.DEBUG)
17
18
19 class V2Tasks(ApiResource):
20
21     def post(self):
22         return self._dispatch_post()
23
24     def create_task(self, args):
25         try:
26             name = args['name']
27         except KeyError:
28             return result_handler(consts.API_ERROR, 'name must be provided')
29
30         try:
31             project_id = args['project_id']
32         except KeyError:
33             return result_handler(consts.API_ERROR, 'project_id must be provided')
34
35         task_id = str(uuid.uuid4())
36         create_time = datetime.now()
37         task_handler = V2TaskHandler()
38
39         LOG.info('create task in database')
40         task_init_data = {
41             'uuid': task_id,
42             'project_id': project_id,
43             'name': name,
44             'time': create_time,
45             'status': -1
46         }
47         task_handler.insert(task_init_data)
48
49         LOG.info('create task in project')
50         project_handler = V2ProjectHandler()
51         project_handler.append_attr(project_id, {'tasks': task_id})
52
53         return result_handler(consts.API_SUCCESS, {'uuid': task_id})
54
55
56 class V2Task(ApiResource):
57
58     def get(self, task_id):
59         try:
60             uuid.UUID(task_id)
61         except ValueError:
62             return result_handler(consts.API_ERROR, 'invalid task id')
63
64         task_handler = V2TaskHandler()
65         try:
66             task = task_handler.get_by_uuid(task_id)
67         except ValueError:
68             return result_handler(consts.API_ERROR, 'no such task id')
69
70         task_info = change_obj_to_dict(task)
71         result = task_info['result']
72         task_info['result'] = jsonutils.loads(result) if result else None
73
74         return result_handler(consts.API_SUCCESS, {'task': task_info})
75
76     def put(self, task_id):
77
78         try:
79             uuid.UUID(task_id)
80         except ValueError:
81             return result_handler(consts.API_ERROR, 'invalid task id')
82
83         task_handler = V2TaskHandler()
84         try:
85             task_handler.get_by_uuid(task_id)
86         except ValueError:
87             return result_handler(consts.API_ERROR, 'no such task id')
88
89         return self._dispatch_post(task_id=task_id)
90
91     def add_environment(self, args):
92
93         task_id = args['task_id']
94         try:
95             environment_id = args['environment_id']
96         except KeyError:
97             return result_handler(consts.API_ERROR, 'environment_id must be provided')
98
99         try:
100             uuid.UUID(environment_id)
101         except ValueError:
102             return result_handler(consts.API_ERROR, 'invalid environment id')
103
104         environment_handler = V2EnvironmentHandler()
105         try:
106             environment_handler.get_by_uuid(environment_id)
107         except ValueError:
108             return result_handler(consts.API_ERROR, 'no such environment id')
109
110         LOG.info('update environment_id in task')
111         task_handler = V2TaskHandler()
112         task_handler.update_attr(task_id, {'environment_id': environment_id})
113
114         return result_handler(consts.API_SUCCESS, {'uuid': task_id})