executor_monitor.py 1.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445
  1. """Executor monitoring API router (P1-9).
  2. Endpoints for local executor heartbeat, status, and task overview.
  3. """
  4. from typing import Any, Dict, Optional
  5. from fastapi import APIRouter
  6. from pydantic import BaseModel, Field
  7. from ..services.task_manager import get_task_manager
  8. router = APIRouter(prefix="/api/executor", tags=["executor"])
  9. class HeartbeatRequest(BaseModel):
  10. executor_id: str = Field(..., description="Unique executor identifier")
  11. status: str = Field(default="idle", description="idle / running / error")
  12. current_task: Optional[str] = Field(default=None, description="Current task_id")
  13. progress: Optional[Dict[str, Any]] = Field(default=None, description="Progress data")
  14. @router.post("/heartbeat")
  15. def executor_heartbeat(request: HeartbeatRequest):
  16. """Local executor reports heartbeat and status."""
  17. manager = get_task_manager()
  18. result = manager.executor_heartbeat(
  19. executor_id=request.executor_id,
  20. status=request.status,
  21. current_task=request.current_task,
  22. progress=request.progress,
  23. )
  24. return result
  25. @router.get("/status")
  26. def get_executor_status():
  27. """Get all registered executors and their online status."""
  28. manager = get_task_manager()
  29. return manager.get_executor_status()
  30. @router.get("/overview")
  31. def get_task_overview():
  32. """Get task overview statistics for monitoring dashboard."""
  33. manager = get_task_manager()
  34. return manager.get_overview()