def get(self, task_id): try: uuid.UUID(task_id) except ValueError: return result_handler(consts.API_ERROR, 'invalid task_id') task_handler = TasksHandler() try: task = task_handler.get_task_by_taskid(task_id) except ValueError: return result_handler(consts.API_ERROR, 'invalid task_id') index = int(self._get_args().get('index', 0)) try: with open( os.path.join(consts.TASK_LOG_DIR, '{}.log'.format(task_id))) as f: f.seek(index) data = f.readlines() index = f.tell() except OSError as e: if e.errno == errno.ENOENT: return result_handler(consts.API_ERROR, 'log file does not exist') return result_handler(consts.API_ERROR, 'error with log file') return_data = {'index': index, 'data': data} return result_handler(task.status, return_data)
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') task_handler = TasksHandler() try: task = task_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(): if task.result: return result_handler(consts.TASK_DONE, json.loads(task.result)) else: return result_handler(consts.TASK_DONE, {}) def _error(): return result_handler(consts.TASK_FAILED, task.error) status = task.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)()
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)
def run_test_case(self, args): try: name = args['testcase'] except KeyError: return result_handler(consts.API_ERROR, 'testcase must be provided') testcase = os.path.join(consts.SAMPLE_CASE_DIR, '{}.yaml'.format(name)) task_id = str(uuid.uuid4()) task_args = {'inputfile': [testcase], 'task_id': task_id} task_args.update(args.get('opts', {})) param = Param(task_args) task_thread = TaskThread(Task().start, param, TasksHandler()) task_thread.start() return result_handler(consts.API_SUCCESS, {'task_id': task_id})