Files
Nexus/docs/changelog/2026-06-08-notify-toggle-multi-worker-sync.md
T
Nexus Agent 27da842a20 fix: Telegram 开关多 worker 同步与服务器行内详情展开
关闭 notify_* 后通过 Redis 广播同步各 worker 内存设置;修复 expanded id 类型不匹配导致点击名称无法展开详情。

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-06-08 13:05:22 +08:00

2.0 KiB
Raw Blame History

2026-06-08 — 告警 Telegram 开关多 Worker 同步

摘要

修复 Settings 关闭「CPU/内存/磁盘等资源告警 Telegram 通知」后仍收到 Telegram 的问题。根因:多 uvicorn worker 下仅处理 PUT 的进程热更新了内存 settings,处理 Agent 心跳的其他 worker 仍认为开关为开启。

动机

用户关闭「CPU 超阈值告警」等 notify_* 开关后 Telegram 仍推送;设置页文案已说明「关闭后不发送 Telegram」,但生产 --workers 4 时行为不一致。

变更

  1. server/config.py — 新增 apply_db_override(db_key, value),统一单条设置热更新逻辑。
  2. server/infrastructure/settings_broadcast.py — 新增 Redis 频道 nexus:settingsPUT 后 publish,各 worker 订阅并 apply_db_override
  3. server/main.py — lifespan 启动/停止 settings subscriber。
  4. server/api/settings.pyset_setting 热更新后调用 publish_setting_change
  5. server/utils/notify_toggles.py — 集中 notify_enabled / resource_alert_notify_enabled 等 helper。
  6. server/infrastructure/telegram/__init__.py — 全部 Telegram 发送入口复用 notify helper(行为不变,逻辑集中)。
  7. tests/test_notify_toggle_sync.py — 开关解析、Telegram 跳过、广播 publish 测试。

涉及文件

  • server/config.py
  • server/infrastructure/settings_broadcast.py
  • server/main.py
  • server/api/settings.py
  • server/utils/notify_toggles.py
  • server/infrastructure/telegram/__init__.py
  • tests/test_notify_toggle_sync.py

迁移 / 重启

  • 无 DB 迁移。
  • 需重启后端(或部署)以加载 settings subscriber。

验证

pytest tests/test_notify_toggle_sync.py tests/test_settings_telegram.py -q
  • Settings 关闭 CPU 告警 → 任意 worker 处理心跳时 send_telegram_alert 返回 False,不调用 Telegram API。
  • WebSocket 告警与 alert_logs 仍记录(与设置页说明一致)。