Exemple #1
0
    async def get_running_tasks(self) -> List[Task]:
        """Retrieves a list of all tasks that are currently running

        Returns:
            An empty list if no tasks are running

            A list of Task objects
        """
        if not self._ready:
            raise NotReadyError()

        tasks = []

        for (task_id, task_process) in self._task_processes.items():
            task = Task()
            task.task_id = task_id
            task.process_name = task_process.schedule.process_name
            task.state = Task.State.RUNNING
            if task_process.cancel_requested is not None:
                task.cancel_requested = (datetime.datetime.fromtimestamp(
                    task_process.cancel_requested))
            task.start_time = datetime.datetime.fromtimestamp(
                task_process.start_time)
            tasks.append(task)

        return tasks
Exemple #2
0
    async def get_tasks(self,
                        limit=100,
                        offset=0,
                        where=None,
                        and_where=None,
                        or_where=None,
                        sort=None) -> List[Task]:
        """Retrieves tasks
        The result set is ordered by start_time descending
        Args:
            offset:
                Ignore this number of rows at the beginning of the result set.
                Results are unpredictable unless order_by is used.
            limit: Return at most this number of rows
            where: A query
            sort:
                A tuple of Task attributes to sort by.
                Defaults to ("start_time", "desc")
        """

        chain_payload = PayloadBuilder().LIMIT(limit).chain_payload()
        if offset:
            chain_payload = PayloadBuilder(chain_payload).OFFSET(
                offset).chain_payload()
        if where:
            chain_payload = PayloadBuilder(chain_payload).WHERE(
                where).chain_payload()
        if and_where:
            chain_payload = PayloadBuilder(chain_payload).AND_WHERE(
                and_where).chain_payload()
        if or_where:
            chain_payload = PayloadBuilder(chain_payload).OR_WHERE(
                or_where).chain_payload()
        if sort:
            chain_payload = PayloadBuilder(chain_payload).ORDER_BY(
                sort).chain_payload()

        query_payload = PayloadBuilder(chain_payload).payload()
        tasks = []

        try:
            self._logger.debug('Database command: %s', query_payload)
            res = self._storage.query_tbl_with_payload("tasks", query_payload)
            for row in res['rows']:
                task = Task()
                task.task_id = row.get('id')
                task.state = Task.State(int(row.get('state')))
                task.start_time = row.get('start_time')
                task.process_name = row.get('process_name')
                task.end_time = row.get('end_time')
                task.exit_code = row.get('exit_code')
                task.reason = row.get('reason')
                tasks.append(task)
        except Exception:
            self._logger.exception('Query failed: %s', query_payload)
            raise

        return tasks
 async def mock_coro():
     task = Task()
     task.task_id = self._random_uuid
     task.state = Task.State.RUNNING
     task.start_time = None
     task.process_name = "bar"
     task.end_time = None
     task.exit_code = 0
     task.reason = None
     return task
 async def patch_get_tasks():
     tasks = []
     task = Task()
     task.task_id = self._random_uuid
     task.state = Task.State.RUNNING
     task.start_time = None
     task.process_name = "bla"
     task.end_time = None
     task.exit_code = 0
     task.reason = None
     tasks.append(task)
     return tasks
Exemple #5
0
    async def get_task(self, task_id: uuid.UUID) -> Task:
        """Retrieves a task given its id"""
        query_payload = PayloadBuilder().WHERE(["id", "=", task_id]).payload()

        try:
            self._logger.debug('Database command: %s', query_payload)
            res = self._storage.query_tbl_with_payload("tasks", query_payload)
            for row in res['rows']:
                task = Task()
                task.task_id = row.get('id')
                task.state = Task.State(int(row.get('state')))
                task.start_time = row.get('start_time')
                task.process_name = row.get('process_name')
                task.end_time = row.get('end_time')
                task.exit_code = row.get('exit_code')
                task.reason = row.get('reason')
                return task
        except Exception:
            self._logger.exception('Query failed: %s', query_payload)
            raise

        raise TaskNotFoundError(task_id)