Add source

This commit is contained in:
2025-12-04 00:12:56 +03:00
parent b75875df5e
commit 0cb7045e7a
75 changed files with 9055 additions and 0 deletions

View File

@@ -0,0 +1,84 @@
"""
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}. Возможно, она уже завершается.")