| 123456789101112131415161718192021222324252627282930313233343536373839404142434445 |
- """Executor monitoring API router (P1-9).
- Endpoints for local executor heartbeat, status, and task overview.
- """
- from typing import Any, Dict, Optional
- from fastapi import APIRouter
- from pydantic import BaseModel, Field
- from ..services.task_manager import get_task_manager
- router = APIRouter(prefix="/api/executor", tags=["executor"])
- class HeartbeatRequest(BaseModel):
- executor_id: str = Field(..., description="Unique executor identifier")
- status: str = Field(default="idle", description="idle / running / error")
- current_task: Optional[str] = Field(default=None, description="Current task_id")
- progress: Optional[Dict[str, Any]] = Field(default=None, description="Progress data")
- @router.post("/heartbeat")
- def executor_heartbeat(request: HeartbeatRequest):
- """Local executor reports heartbeat and status."""
- manager = get_task_manager()
- result = manager.executor_heartbeat(
- executor_id=request.executor_id,
- status=request.status,
- current_task=request.current_task,
- progress=request.progress,
- )
- return result
- @router.get("/status")
- def get_executor_status():
- """Get all registered executors and their online status."""
- manager = get_task_manager()
- return manager.get_executor_status()
- @router.get("/overview")
- def get_task_overview():
- """Get task overview statistics for monitoring dashboard."""
- manager = get_task_manager()
- return manager.get_overview()
|