后端: - 拆分出 agent_service, runtime_service, trading_service, news_service - Gateway 模块化拆分 (gateway_*.py) - 添加 domains/ 领域层 - 新增 control_client, runtime_client - 更新 start-dev.sh 支持 split 服务模式 前端: - 完善 API 服务层 (newsApi, tradingApi) - 更新 vite.config.js - Explain 组件优化 测试: - 添加多个服务 app 测试 Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
69 lines
2.0 KiB
Python
69 lines
2.0 KiB
Python
# -*- coding: utf-8 -*-
|
|
"""Dedicated runtime service FastAPI surface."""
|
|
|
|
from __future__ import annotations
|
|
|
|
from fastapi import FastAPI
|
|
from fastapi.middleware.cors import CORSMiddleware
|
|
|
|
from backend.api import runtime_router
|
|
from backend.api.runtime import get_runtime_state
|
|
|
|
|
|
def create_app() -> FastAPI:
|
|
"""Create the runtime service app."""
|
|
app = FastAPI(
|
|
title="EvoTraders Runtime Service",
|
|
description="Runtime lifecycle and gateway service surface extracted from the monolith",
|
|
version="0.1.0",
|
|
)
|
|
|
|
app.add_middleware(
|
|
CORSMiddleware,
|
|
allow_origins=["*"],
|
|
allow_credentials=True,
|
|
allow_methods=["*"],
|
|
allow_headers=["*"],
|
|
)
|
|
|
|
@app.get("/health")
|
|
async def health_check() -> dict[str, object]:
|
|
"""Health check for the runtime service."""
|
|
runtime_state = get_runtime_state()
|
|
process = runtime_state.gateway_process
|
|
is_running = process is not None and process.poll() is None
|
|
return {
|
|
"status": "healthy",
|
|
"service": "runtime-service",
|
|
"gateway_running": is_running,
|
|
"gateway_port": runtime_state.gateway_port,
|
|
}
|
|
|
|
@app.get("/api/status")
|
|
async def api_status() -> dict[str, object]:
|
|
"""Service-level status payload for runtime orchestration."""
|
|
runtime_state = get_runtime_state()
|
|
process = runtime_state.gateway_process
|
|
is_running = process is not None and process.poll() is None
|
|
return {
|
|
"status": "operational",
|
|
"service": "runtime-service",
|
|
"runtime": {
|
|
"gateway_running": is_running,
|
|
"gateway_port": runtime_state.gateway_port,
|
|
"has_runtime_manager": runtime_state.runtime_manager is not None,
|
|
},
|
|
}
|
|
|
|
app.include_router(runtime_router)
|
|
return app
|
|
|
|
|
|
app = create_app()
|
|
|
|
|
|
if __name__ == "__main__":
|
|
import uvicorn
|
|
|
|
uvicorn.run(app, host="0.0.0.0", port=8003)
|