62 lines
1.8 KiB
Python
62 lines
1.8 KiB
Python
"""FastAPI 应用入口:注册路由、CORS、启动后台任务循环。"""
|
||
import logging
|
||
from contextlib import asynccontextmanager
|
||
|
||
from fastapi import FastAPI
|
||
from fastapi.middleware.cors import CORSMiddleware
|
||
|
||
from app.config import settings
|
||
from app.api import admin, agent, cli
|
||
from app.middleware import RequestLogMiddleware
|
||
from app.scheduler_loop import SchedulerLoop
|
||
from app.repository.redis_client import get_redis_pool
|
||
|
||
logging.basicConfig(
|
||
level=getattr(logging, settings.log_level.upper(), logging.INFO),
|
||
format="%(asctime)s %(levelname)s [%(name)s] %(message)s",
|
||
)
|
||
logger = logging.getLogger(__name__)
|
||
|
||
|
||
@asynccontextmanager
|
||
async def lifespan(app: FastAPI):
|
||
# 启动时会话
|
||
redis = await get_redis_pool()
|
||
loop = SchedulerLoop(redis)
|
||
app.state.redis = redis
|
||
app.state.scheduler_loop = loop
|
||
await loop.start()
|
||
logger.info("Gateway started, host=%s port=%s", settings.host, settings.port)
|
||
try:
|
||
yield
|
||
finally:
|
||
await loop.stop()
|
||
await redis.aclose()
|
||
logger.info("Gateway stopped")
|
||
|
||
|
||
app = FastAPI(
|
||
title="A2A Gateway",
|
||
description="A2A 智能网关:任务池 / Agent 池 / 规则调度 / 通信中转 / 可视化运维",
|
||
version="1.0.0",
|
||
lifespan=lifespan,
|
||
)
|
||
|
||
# CORS:允许前端开发服务器访问
|
||
app.add_middleware(
|
||
CORSMiddleware,
|
||
allow_origins=["*"],
|
||
allow_credentials=True,
|
||
allow_methods=["*"],
|
||
allow_headers=["*"],
|
||
)
|
||
app.add_middleware(RequestLogMiddleware)
|
||
|
||
app.include_router(cli.router, prefix="/api/cli", tags=["CLI"])
|
||
app.include_router(agent.router, prefix="/api/agent", tags=["Agent"])
|
||
app.include_router(admin.router, prefix="/api/admin", tags=["Admin"])
|
||
|
||
|
||
@app.get("/health", tags=["health"])
|
||
async def health():
|
||
return {"status": "ok"} |