fix(sensors+rules+dedup): 全景三根因修復 — asyncssh缺失/YAML規則空洞/重複卡片
Some checks failed
CD Pipeline / build-and-deploy (push) Has been cancelled
Some checks failed
CD Pipeline / build-and-deploy (push) Has been cancelled
Fix 1: asyncssh 未安裝 → sensors_succeeded 永遠=0 - apps/api/pyproject.toml 加入 asyncssh>=2.14.0 - 根因:ssh_provider.py 的 import asyncssh 在 try/except 外,ImportError 直接噴出 - 效果:15 個 SSH tool 全部恢復可用 Fix 2: YAML 規則空洞 → HostHighLoadAverage/PostgreSQLDiskGrowthRate 落 generic_fallback → restart - 合併 host_cpu_high 為 host_resource_alert,覆蓋 25+ 個主機層 alertname - 新增 postgresql_disk_monitoring 規則,覆蓋磁碟增長/exporter/vacuum 類告警 - 所有主機層/磁碟監控告警 → NO_ACTION,禁止 kubectl restart Fix 3: 同一 incident 被多 pod 同時處理 → 送出 3 張重複 Telegram 卡 - decision_manager.get_or_create_decision(): ANALYZING 狀態加入早返回 - 根因:ANALYZING 不在 (READY/EXECUTING/COMPLETED) 條件 → pod-B/C 各自建新 token 2026-04-16 ogt + Claude Sonnet 4.6 (台北時區)
This commit is contained in:
@@ -1237,6 +1237,18 @@ class DecisionManager:
|
||||
# COMPLETED 狀態: 直接返回,避免重複建立 decision 導致 Telegram 轟炸
|
||||
if existing_token.state == DecisionState.COMPLETED:
|
||||
return existing_token
|
||||
# 2026-04-16 ogt + Claude Sonnet 4.6: 修復重複卡片根因 — ANALYZING 未早返回
|
||||
# 問題:多 pod 並發時 pod-A 在 ANALYZING,pod-B/C 發現 ANALYZING 不在返回條件
|
||||
# → 各自建新 token → 同一 incident 跑 3 次 agent_debate → 送出 3 張 TG 卡
|
||||
# 修復:ANALYZING 狀態也直接返回,避免重複處理
|
||||
if existing_token.state == DecisionState.ANALYZING:
|
||||
logger.debug(
|
||||
"decision_analyzing_in_progress",
|
||||
incident_id=incident.incident_id,
|
||||
token=existing_token.token,
|
||||
reason="另一個 worker 正在分析中,跳過重複建立",
|
||||
)
|
||||
return existing_token
|
||||
|
||||
# ADR-073 Phase 3-1: TYPE-1 triage guard — 純資訊告警跳過 LLM 分析
|
||||
# classify_alert_early() 已在 webhook 入口設定 notification_type
|
||||
|
||||
Reference in New Issue
Block a user