diff options
Diffstat (limited to 'api/utils/thread.py')
-rw-r--r-- | api/utils/thread.py | 37 |
1 files changed, 37 insertions, 0 deletions
diff --git a/api/utils/thread.py b/api/utils/thread.py new file mode 100644 index 000000000..2106548f5 --- /dev/null +++ b/api/utils/thread.py @@ -0,0 +1,37 @@ +import threading +import logging + +from oslo_serialization import jsonutils + +from api.database.v1.handlers import TasksHandler +from yardstick.common import constants as consts + +logger = logging.getLogger(__name__) +logger.setLevel(logging.DEBUG) + + +class TaskThread(threading.Thread): + + def __init__(self, target, args): + super(TaskThread, self).__init__(target=target, args=args) + self.target = target + self.args = args + + def run(self): + task_handler = TasksHandler() + data = {'task_id': self.args.task_id, 'status': consts.TASK_NOT_DONE} + task_handler.insert(data) + + logger.info('Starting run task') + try: + data = self.target(self.args) + except Exception as e: + logger.exception('Task Failed') + update_data = {'status': consts.TASK_FAILED, 'error': str(e)} + task_handler.update_attr(self.args.task_id, update_data) + else: + logger.info('Task Finished') + logger.debug('Result: %s', data) + + data['result'] = jsonutils.dumps(data.get('result', {})) + task_handler.update_attr(self.args.task_id, data) |