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:
@@ -0,0 +1,31 @@
|
||||
from sqlalchemy import Column, Integer, String, Boolean, DateTime, Text
|
||||
from sqlalchemy.sql import func
|
||||
from app.core.database import Base
|
||||
|
||||
|
||||
class NotificationConfig(Base):
|
||||
"""通知渠道配置(当前支持飞书机器人)。
|
||||
使用单行记录(id=1)存储,便于 Web 界面读写和热更新。
|
||||
"""
|
||||
__tablename__ = "notification_config"
|
||||
|
||||
id = Column(Integer, primary_key=True)
|
||||
# 飞书
|
||||
feishu_enabled = Column(Boolean, default=False) # 总开关
|
||||
feishu_webhook_url = Column(String(500), default="") # 机器人 webhook 地址
|
||||
feishu_secret = Column(String(255), default="") # 签名校验密钥(可选)
|
||||
feishu_min_severity = Column(String(20), default="warning") # 最低告警级别
|
||||
feishu_alert_types = Column(Text, default="") # 逗号分隔的类型白名单,空=全部
|
||||
|
||||
updated_at = Column(DateTime(timezone=True), server_default=func.now(), onupdate=func.now())
|
||||
|
||||
@classmethod
|
||||
def get_singleton(cls, db):
|
||||
"""获取或创建单行配置"""
|
||||
row = db.query(cls).filter(cls.id == 1).first()
|
||||
if row is None:
|
||||
row = cls(id=1)
|
||||
db.add(row)
|
||||
db.commit()
|
||||
db.refresh(row)
|
||||
return row
|
||||
Reference in New Issue
Block a user