365ab73e7d
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 推送时按数据库配置判断 配置无需改文件/重启,前端界面直接保存即生效。
32 lines
1.2 KiB
Python
32 lines
1.2 KiB
Python
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
|