2026-03-09 17:32:11 +08:00
|
|
|
|
"""
|
|
|
|
|
|
资源管理 API 路由
|
2026-03-10 16:36:25 +08:00
|
|
|
|
接入 ResourceManager 服务,提供声明式任务执行
|
2026-03-09 17:32:11 +08:00
|
|
|
|
"""
|
|
|
|
|
|
from fastapi import APIRouter
|
|
|
|
|
|
from pydantic import BaseModel
|
2026-03-10 16:36:25 +08:00
|
|
|
|
from typing import Optional
|
|
|
|
|
|
|
|
|
|
|
|
from ..services.resource_manager import get_resource_manager
|
2026-03-09 17:32:11 +08:00
|
|
|
|
|
|
|
|
|
|
router = APIRouter()
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
class TaskRequest(BaseModel):
|
|
|
|
|
|
agent_id: str
|
|
|
|
|
|
task: str
|
|
|
|
|
|
timeout: Optional[int] = 300
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
class TaskParseRequest(BaseModel):
|
|
|
|
|
|
task: str
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
@router.post("/execute")
|
|
|
|
|
|
async def execute_task(request: TaskRequest):
|
2026-03-10 16:36:25 +08:00
|
|
|
|
"""执行任务(自动管理文件锁和心跳)"""
|
|
|
|
|
|
manager = get_resource_manager()
|
|
|
|
|
|
result = await manager.execute_task(
|
|
|
|
|
|
agent_id=request.agent_id,
|
|
|
|
|
|
task_description=request.task,
|
|
|
|
|
|
timeout=request.timeout or 300
|
|
|
|
|
|
)
|
2026-03-09 17:32:11 +08:00
|
|
|
|
return {
|
2026-03-10 16:36:25 +08:00
|
|
|
|
"success": result.success,
|
|
|
|
|
|
"message": result.message,
|
|
|
|
|
|
"files_locked": result.files_locked,
|
|
|
|
|
|
"duration_seconds": round(result.duration_seconds, 2)
|
2026-03-09 17:32:11 +08:00
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
@router.get("/status")
|
|
|
|
|
|
async def get_all_status():
|
2026-03-10 16:36:25 +08:00
|
|
|
|
"""获取所有 Agent 状态(整合注册、心跳、锁信息)"""
|
|
|
|
|
|
manager = get_resource_manager()
|
|
|
|
|
|
statuses = await manager.get_all_status()
|
|
|
|
|
|
return {"agents": statuses}
|
2026-03-09 17:32:11 +08:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
@router.post("/parse-task")
|
|
|
|
|
|
async def parse_task(request: TaskParseRequest):
|
2026-03-10 16:36:25 +08:00
|
|
|
|
"""解析任务中涉及的文件路径"""
|
|
|
|
|
|
manager = get_resource_manager()
|
|
|
|
|
|
files = await manager.parse_task_files(request.task)
|
2026-03-09 17:32:11 +08:00
|
|
|
|
return {
|
|
|
|
|
|
"task": request.task,
|
2026-03-10 16:36:25 +08:00
|
|
|
|
"files": files
|
2026-03-09 17:32:11 +08:00
|
|
|
|
}
|