53 lines
1.9 KiB
Python
53 lines
1.9 KiB
Python
"""预留 Agent 协议接口:register / unregister / heartbeat / result。"""
|
||
from fastapi import APIRouter, Depends, Request
|
||
|
||
from app.models.schemas import AgentHeartbeat, AgentInfo, AgentRegister, TaskResult
|
||
from app.services.agent_service import AgentService
|
||
from app.services.relay import RelayService
|
||
from app.services.security import require_auth
|
||
|
||
router = APIRouter()
|
||
|
||
|
||
def get_agent_service(request: Request) -> AgentService:
|
||
return AgentService(request.app.state.redis)
|
||
|
||
|
||
def get_relay_service(request: Request) -> RelayService:
|
||
return RelayService(request.app.state.redis)
|
||
|
||
|
||
@router.post("/register", response_model=AgentInfo, summary="Agent 注册")
|
||
async def register(body: AgentRegister, svc: AgentService = Depends(get_agent_service)):
|
||
require_auth(body.auth)
|
||
return await svc.register(body)
|
||
|
||
|
||
@router.post("/unregister", summary="Agent 注销")
|
||
async def unregister(body: dict, svc: AgentService = Depends(get_agent_service)):
|
||
from fastapi import HTTPException
|
||
|
||
agent_id = body.get("agent_id")
|
||
if not agent_id:
|
||
raise HTTPException(status_code=400, detail="agent_id required")
|
||
if not await svc.unregister(agent_id):
|
||
raise HTTPException(status_code=404, detail="agent not found")
|
||
return {"ok": True}
|
||
|
||
|
||
@router.post("/heartbeat", summary="Agent 心跳")
|
||
async def heartbeat(body: AgentHeartbeat, svc: AgentService = Depends(get_agent_service)):
|
||
from fastapi import HTTPException
|
||
|
||
if not await svc.heartbeat(body):
|
||
raise HTTPException(status_code=404, detail="agent not registered")
|
||
return {"ok": True}
|
||
|
||
|
||
@router.post("/result", summary="Agent 结果回传")
|
||
async def result(body: TaskResult, relay: RelayService = Depends(get_relay_service)):
|
||
from fastapi import HTTPException
|
||
|
||
if not await relay.on_result(body):
|
||
raise HTTPException(status_code=400, detail="result rejected")
|
||
return {"ok": True} |