| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465 |
- """Monitoring API router (P4-M3).
- Real-time scheduler statistics, queue/running/history endpoints.
- """
- from fastapi import APIRouter, HTTPException
- from typing import Any, Dict, List, Optional
- from ..services.batch_scheduler import get_scheduler
- router = APIRouter(prefix="/api/monitor", tags=["monitor"])
- @router.get("/stats")
- async def get_stats() -> Dict[str, Any]:
- """Get real-time scheduler statistics."""
- scheduler = get_scheduler()
- return scheduler.get_statistics()
- @router.get("/queue")
- async def get_queue(limit: int = 50) -> Dict[str, Any]:
- """Get queued tasks list."""
- scheduler = get_scheduler()
- stats = scheduler.get_statistics()
- return {"tasks": stats.get("queued_tasks", [])[:limit], "count": stats.get("queued_count", 0)}
- @router.get("/running")
- async def get_running() -> Dict[str, Any]:
- """Get currently running tasks."""
- scheduler = get_scheduler()
- stats = scheduler.get_statistics()
- return {"tasks": stats.get("running_tasks", []), "count": stats.get("running_count", 0)}
- @router.get("/history")
- async def get_history(limit: int = 50) -> Dict[str, Any]:
- """Get recently completed tasks."""
- scheduler = get_scheduler()
- stats = scheduler.get_statistics()
- return {"tasks": stats.get("recent_completed", [])[-limit:], "count": stats.get("completed_count", 0)}
- @router.post("/cancel/{task_id}")
- async def cancel_task(task_id: str) -> Dict[str, Any]:
- """Cancel a queued or running task."""
- scheduler = get_scheduler()
- success = scheduler.cancel_task(task_id)
- if not success:
- raise HTTPException(status_code=404, detail=f"Task {task_id} not found in queue or running")
- return {"success": True, "task_id": task_id, "message": "Task cancelled"}
- @router.get("/health")
- async def health_check() -> Dict[str, Any]:
- """System health check."""
- import os
- import platform
- return {
- "status": "healthy",
- "platform": platform.system(),
- "python_version": platform.python_version(),
- "scheduler_active": get_scheduler() is not None,
- "timestamp": __import__("datetime").datetime.now().isoformat(),
- }
|