diff options
author | Rex Lee <limingjiang@huawei.com> | 2017-07-12 01:35:03 +0000 |
---|---|---|
committer | Gerrit Code Review <gerrit@opnfv.org> | 2017-07-12 01:35:03 +0000 |
commit | 7949507437f8b1b1d9100bd13cf2d90bae60279d (patch) | |
tree | f6030e60eeeebeae7670f2022c06f13296c6bb2a /api/resources/v1/asynctasks.py | |
parent | 7ee54db221fbb4173de011585a425f0750dd6ccf (diff) | |
parent | 0d18f9d3299480cb43e6b335180e5cbdb58505c3 (diff) |
Merge "Yardstick API architecture improvement"
Diffstat (limited to 'api/resources/v1/asynctasks.py')
-rw-r--r-- | api/resources/v1/asynctasks.py | 65 |
1 files changed, 65 insertions, 0 deletions
diff --git a/api/resources/v1/asynctasks.py b/api/resources/v1/asynctasks.py new file mode 100644 index 000000000..759df214c --- /dev/null +++ b/api/resources/v1/asynctasks.py @@ -0,0 +1,65 @@ +# ############################################################################ +# Copyright (c) 2017 Huawei Technologies Co.,Ltd 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 uuid +import logging + +from api import ApiResource +from api.database.v1.handlers import AsyncTaskHandler +from yardstick.common import constants as consts +from yardstick.common.utils import result_handler + +LOG = logging.getLogger(__name__) +LOG.setLevel(logging.DEBUG) + + +class V1AsyncTask(ApiResource): + + def get(self): + args = self._get_args() + + try: + task_id = args['task_id'] + except KeyError: + return result_handler(consts.API_ERROR, 'task_id must be provided') + + try: + uuid.UUID(task_id) + except ValueError: + return result_handler(consts.API_ERROR, 'invalid task_id') + + asynctask_handler = AsyncTaskHandler() + try: + asynctask = asynctask_handler.get_task_by_taskid(task_id) + except ValueError: + return result_handler(consts.API_ERROR, 'invalid task_id') + + def _unfinished(): + return result_handler(consts.TASK_NOT_DONE, {}) + + def _finished(): + return result_handler(consts.TASK_DONE, {}) + + def _error(): + return result_handler(consts.TASK_FAILED, asynctask.error) + + status = asynctask.status + LOG.debug('Task status is: %s', status) + + if status not in [consts.TASK_NOT_DONE, + consts.TASK_DONE, + consts.TASK_FAILED]: + return result_handler(consts.API_ERROR, 'internal server error') + + switcher = { + consts.TASK_NOT_DONE: _unfinished, + consts.TASK_DONE: _finished, + consts.TASK_FAILED: _error + } + + return switcher.get(status)() |