All checks were successful
continuous-integration/drone/push Build is passing
- 新增 platform_scheduled_tasks, platform_task_logs, platform_script_vars, platform_secrets 数据库表 - 实现 ScriptSDK 提供 AI/通知/DB/HTTP/变量存储/参数获取等功能 - 实现安全的脚本执行器,支持沙箱环境和禁止危险操作 - 实现 APScheduler 调度服务,支持简单时间点和 CRON 表达式 - 新增定时任务 API 路由,包含 CRUD、执行、日志、密钥管理 - 新增定时任务前端页面,支持脚本编辑、测试运行、日志查看
94 lines
3.0 KiB
Python
94 lines
3.0 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.tasks import router as tasks_router
|
||
from .middleware import TraceMiddleware, setup_exception_handlers, RequestLoggerMiddleware
|
||
from .middleware.trace import setup_logging
|
||
from .services.scheduler import scheduler_service
|
||
|
||
# 配置日志(包含 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(tasks_router)
|
||
|
||
|
||
# 应用生命周期事件
|
||
@app.on_event("startup")
|
||
async def startup_event():
|
||
"""应用启动时启动调度器"""
|
||
scheduler_service.start()
|
||
|
||
|
||
@app.on_event("shutdown")
|
||
async def shutdown_event():
|
||
"""应用关闭时关闭调度器"""
|
||
scheduler_service.shutdown()
|
||
|
||
|
||
@app.get("/")
|
||
async def root():
|
||
return {
|
||
"service": settings.APP_NAME,
|
||
"version": settings.APP_VERSION,
|
||
"docs": "/docs"
|
||
}
|