Skip to content

API 层

目标

API 层为 Dashboard 与脚本提供统一入口:

  • 管理场景与 runs(完整 CRUD)
  • 提供 metrics/traces/artifacts 获取
  • 提供 Start/Stop 运行控制
  • 提供 WebSocket 实时推送
  • 提供健康检查与系统配置查询

当前实现

框架与中间件

  • FastAPI + Uvicorn:异步 ASGI 服务器
  • CORS 中间件:允许所有来源(开发阶段),支持凭证
  • RequestLoggingMiddleware:记录每个请求的方法、路径、状态码与耗时
  • 应用工厂create_app() 支持注入 settings、scenarios_dir、run_executor

依赖注入 (deps.py)

所有路由通过 FastAPI 的 Depends() 机制获取依赖,依赖项在 lifespan 中初始化并绑定到 app.state

python
# 示例:路由函数声明依赖
@router.get("/runs/{run_id}")
def get_run(
    run_id: str,
    run_service: RunService = Depends(get_run_service),
) -> RunDetailResponse:
    ...

依赖链:

RuntimeSettings → Database → RunRepository
                           → TraceRepository
                           → ScenarioRepository
RunService ← (repo, scenarios_dir, executor, location_initializer,
              event_publisher, trace_repo, scenario_repo)

Pydantic v2 Schemas (schemas.py)

请求与响应模型使用 Pydantic v2 定义,包含:

  • 运行相关RunCreateRequestRunItemRunListResponseRunDetailResponseRunStatusResponseRunMetricsResponseRunTracesResponseRunArtifactsResponseRunEventsResponse
  • 场景相关ScenarioCreateRequestScenarioUpdateRequestScenarioFullResponseScenarioMergedListResponseScenarioImportRequestScenarioExportResponse
  • 健康检查HealthResponseHealthDbHealthAdapterHealthNodeCheckNodeHealthResponse
  • 配置ConfigResponseConfigNodeEndpointLocationInitConfig
  • 策略StrategyItemStrategyListResponse

WebSocket 广播器 (ws.py)

RunEventBroadcaster 实现多连接广播:

  • 每个连接拥有独立的异步队列(默认 128 槽)
  • 独立的 _sender_loop 异步任务负责发送
  • 队列满时丢弃最旧消息(背压策略)
  • publish_from_sync() 提供同步线程安全的发布接口
  • 连接时自动推送当前 state 和 metrics 快照

WS 推送频率

  • 按 step 推送:每步发送 step + schedule + metrics 三条事件
  • 状态变更时推送 state 事件