""" Task monitoring """ from typing import Tuple from bot.modules.task_scheduler.queue import task_queue, TaskStatus import logging logger = logging.getLogger(__name__) async def get_task_status(task_id: int) -> dict: """ Get task status Args: task_id: Task ID Returns: Dictionary with task status """ task = await task_queue.get_task_by_id(task_id) if not task: return {"error": "Task not found"} return { "id": task.id, "user_id": task.user_id, "task_type": task.task_type, "status": task.status.value, "progress": task.progress, "error_message": task.error_message, "created_at": task.created_at.isoformat() if task.created_at else None } async def get_user_tasks_status(user_id: int) -> list[dict]: """ Get status of all user tasks Args: user_id: User ID Returns: List of user tasks """ tasks = await task_queue.get_user_tasks(user_id) return [await get_task_status(task.id) for task in tasks] async def cancel_user_task(user_id: int, task_id: int) -> Tuple[bool, str]: """ Cancel user task Args: user_id: User ID task_id: Task ID Returns: Tuple of (success: bool, message: str) """ task = await task_queue.get_task_by_id(task_id) if not task: return (False, f"Задача #{task_id} не найдена") if task.user_id != user_id: return (False, "Вы можете отменять только свои задачи") if task.status == TaskStatus.COMPLETED: return (False, f"Задача #{task_id} уже завершена") if task.status == TaskStatus.CANCELLED: return (False, f"Задача #{task_id} уже отменена") if task.status == TaskStatus.FAILED: return (False, f"Задача #{task_id} уже завершилась с ошибкой") success = await task_queue.cancel_task(task_id) if success: return (True, f"Задача #{task_id} успешно отменена") else: return (False, f"Не удалось отменить задачу #{task_id}. Возможно, она уже завершается.")