All checks were successful
continuous-integration/drone/push Build is passing
- 新增 platform_tool_configs 表和 ToolConfig Model - 新增工具配置 CRUD API (/api/tool-configs) - 租户详情页添加工具配置管理 Tab - 修复查看 Token 显示问题,添加专用获取接口
80 lines
2.7 KiB
Python
80 lines
2.7 KiB
Python
"""平台服务入口"""
|
||
import logging
|
||
from fastapi import FastAPI
|
||
from fastapi.middleware.cors import CORSMiddleware
|
||
|
||
from .config import get_settings
|
||
from .routers import stats_router, logs_router, config_router, health_router
|
||
from .routers.auth import router as auth_router
|
||
from .routers.tenants import router as tenants_router
|
||
from .routers.tenant_apps import router as tenant_apps_router
|
||
from .routers.tenant_wechat_apps import router as tenant_wechat_apps_router
|
||
from .routers.apps import router as apps_router
|
||
from .routers.wechat import router as wechat_router
|
||
from .routers.alerts import router as alerts_router
|
||
from .routers.cost import router as cost_router
|
||
from .routers.quota import router as quota_router
|
||
from .routers.tool_configs import router as tool_configs_router
|
||
from .middleware import TraceMiddleware, setup_exception_handlers, RequestLoggerMiddleware
|
||
from .middleware.trace import setup_logging
|
||
|
||
# 配置日志(包含 TraceID)
|
||
setup_logging(level=logging.INFO, include_trace=True)
|
||
|
||
settings = get_settings()
|
||
|
||
app = FastAPI(
|
||
title=settings.APP_NAME,
|
||
version=settings.APP_VERSION,
|
||
description="平台基础设施服务 - 统计/日志/配置管理"
|
||
)
|
||
|
||
# 配置统一异常处理
|
||
setup_exception_handlers(app)
|
||
|
||
# 中间件按添加的反序执行,所以:
|
||
# 1. CORS 最后添加,最先执行
|
||
# 2. TraceMiddleware 在 RequestLoggerMiddleware 之后添加,这样先执行
|
||
# 3. RequestLoggerMiddleware 最先添加,最后执行(此时 trace_id 已设置)
|
||
|
||
# 请求日志中间件(自动记录到数据库)
|
||
app.add_middleware(RequestLoggerMiddleware, app_code="000-platform")
|
||
|
||
# TraceID 追踪中间件
|
||
app.add_middleware(TraceMiddleware, log_requests=True)
|
||
|
||
# CORS
|
||
app.add_middleware(
|
||
CORSMiddleware,
|
||
allow_origins=["*"],
|
||
allow_credentials=True,
|
||
allow_methods=["*"],
|
||
allow_headers=["*"],
|
||
expose_headers=["X-Trace-ID", "X-Response-Time"]
|
||
)
|
||
|
||
# 注册路由
|
||
app.include_router(health_router, prefix="/api")
|
||
app.include_router(auth_router, prefix="/api")
|
||
app.include_router(tenants_router, prefix="/api")
|
||
app.include_router(tenant_apps_router, prefix="/api")
|
||
app.include_router(tenant_wechat_apps_router, prefix="/api")
|
||
app.include_router(apps_router, prefix="/api")
|
||
app.include_router(stats_router, prefix="/api")
|
||
app.include_router(logs_router, prefix="/api")
|
||
app.include_router(config_router, prefix="/api")
|
||
app.include_router(wechat_router, prefix="/api")
|
||
app.include_router(alerts_router, prefix="/api")
|
||
app.include_router(cost_router, prefix="/api")
|
||
app.include_router(quota_router, prefix="/api")
|
||
app.include_router(tool_configs_router, prefix="/api")
|
||
|
||
|
||
@app.get("/")
|
||
async def root():
|
||
return {
|
||
"service": settings.APP_NAME,
|
||
"version": settings.APP_VERSION,
|
||
"docs": "/docs"
|
||
}
|