All checks were successful
continuous-integration/drone/push Build is passing
- 新增 platform_notification_channels 表管理通知渠道(钉钉/企微机器人)
- 新增通知渠道管理页面,支持创建、编辑、测试、删除
- 定时任务增加通知渠道选择和企微应用选择
- 脚本执行支持返回值(result变量),自动发送到配置的渠道
- 调度器执行脚本后根据配置自动发送通知
使用方式:
1. 在「通知渠道」页面为租户配置钉钉/企微机器人
2. 创建定时任务时选择通知渠道
3. 脚本中设置 result = {'content': '内容', 'title': '标题'}
4. 任务执行后自动发送到配置的渠道
96 lines
3.1 KiB
Python
96 lines
3.1 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 .routers.notification_channels import router as notification_channels_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.include_router(notification_channels_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"
|
||
}
|