fix(flywheel): 自動修復後移除 Telegram 按鈕 + 心跳告警排除飛輪
Some checks failed
CD Pipeline / build-and-deploy (push) Failing after 6m56s
Some checks failed
CD Pipeline / build-and-deploy (push) Failing after 6m56s
問題: 自動修復成功後 Telegram 卡片仍顯示批准/拒絕/靜默按鈕
Fix 1 — Telegram 卡片回饋閉環 (積木化合規):
- telegram_gateway.send_approval_card: 發送後自動存 tg_approval:{id} 到 Redis
- telegram_gateway.mark_auto_repaired(): 新方法 — 移除按鈕 + reply 結果
- _try_auto_repair_background: 改呼叫 gateway.mark_auto_repaired() (Service 層)
Fix 2 — 心跳/看門狗告警排除飛輪:
- constants.py: is_heartbeat_alertname() + HEARTBEAT_ALERT_NAMES
- NoAlertsReceived2Hours 等不觸發 _try_auto_repair_background
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
@@ -85,6 +85,34 @@ CICD_ALERT_SUFFIXES = (
|
||||
# CI/CD 告警關鍵字 (不區分大小寫)
|
||||
CICD_ALERT_KEYWORDS = ("CI/CD", "cicd")
|
||||
|
||||
# =============================================================================
|
||||
# Heartbeat/Watchdog Alert Detection (2026-04-10 Claude Sonnet 4.6 Asia/Taipei)
|
||||
# 心跳/看門狗告警不觸發自動修復飛輪 — 這類告警代表監控系統狀態,不是服務故障
|
||||
# =============================================================================
|
||||
HEARTBEAT_ALERT_NAMES = frozenset({
|
||||
"Watchdog",
|
||||
"DeadMansSwitch",
|
||||
"NoAlertsReceived",
|
||||
"NoAlertsReceived2Hours",
|
||||
"AlertmanagerDown",
|
||||
"PrometheusNotConnectedToAlertmanager",
|
||||
})
|
||||
|
||||
HEARTBEAT_ALERT_KEYWORDS = ("NoAlertsReceived", "Watchdog", "DeadMansSwitch", "Heartbeat")
|
||||
|
||||
|
||||
def is_heartbeat_alertname(alertname: str) -> bool:
|
||||
"""
|
||||
判斷 alertname 是否為心跳/看門狗告警
|
||||
|
||||
心跳告警代表監控系統自身健康狀態,不是服務故障,
|
||||
不應進入自動修復飛輪(不存在對應的 Playbook 修復動作)。
|
||||
"""
|
||||
return (
|
||||
alertname in HEARTBEAT_ALERT_NAMES
|
||||
or any(kw in alertname for kw in HEARTBEAT_ALERT_KEYWORDS)
|
||||
)
|
||||
|
||||
|
||||
def is_cicd_alertname(alertname: str) -> bool:
|
||||
"""
|
||||
|
||||
Reference in New Issue
Block a user