feat(alerts): 飞书通知支持 Web 界面配置(数据库存储+热更新)

1. 新增 notification_config 模型,飞书配置存数据库(单行id=1)
2. feishu_service 改为从数据库读配置,支持热更新,Web保存即生效
3. alerts.py 新增接口:
   - GET /alerts/notify/feishu/config 读配置(secret只返回是否已设)
   - PUT /alerts/notify/feishu/config 保存配置+热更新
   (status/test 同步改为走数据库配置)
4. 前端告警中心增加「飞书通知设置」弹窗:
   - 开关/Webhook/签名密钥/最低级别/类型白名单
   - 保存配置、发送测试按钮
5. alert_service.create_alert 推送时按数据库配置判断

配置无需改文件/重启,前端界面直接保存即生效。
This commit is contained in:
Your Name
2026-08-12 13:14:38 +08:00
parent 717fa31456
commit 365ab73e7d
7 changed files with 274 additions and 24 deletions
+4 -10
View File
@@ -13,15 +13,9 @@ from app.models.network import Network, IPAddress
from app.models.snmp import NetworkDevice, ARPEntry
# 飞书告警通知(延迟导入避免循环依赖)
_feishu_service = None
def _get_feishu_service():
global _feishu_service
if _feishu_service is None:
from app.services.feishu_service import get_feishu_service
_feishu_service = get_feishu_service()
return _feishu_service
def _get_feishu_service(db=None):
from app.services.feishu_service import get_feishu_service
return get_feishu_service(db)
logger = logging.getLogger(__name__)
@@ -85,7 +79,7 @@ class AlertService:
# 飞书告警通知(仅新创建的告警推送;existing 去重返回的不会走到这里,避免刷屏)
try:
_get_feishu_service().send_alert({
_get_feishu_service(db).send_alert({
"alert_type": alert_type.value if hasattr(alert_type, "value") else str(alert_type),
"severity": severity.value if hasattr(severity, "value") else str(severity),
"title": title,