コード例 #1
0
    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)
コード例 #2
0
    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)()
コード例 #3
0
    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)
コード例 #4
0
ファイル: testcases.py プロジェクト: alexnemes/yardstick_dpdk
    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})