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
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
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)