fix(aiops): Critic 修復 — PromQL 注入防線 + flag=False escalation bug + 計數虛報
All checks were successful
Code Review / ai-code-review (push) Successful in 53s
All checks were successful
Code Review / ai-code-review (push) Successful in 53s
Bug 1 (drift.py): DRIFT_AUTO_ADOPT_ENABLED=false 時仍設 auto_block_reason
→ 導致 escalation 被觸發,把「停用」誤判為「阻擋事故」
修法: flag=False 不設 auto_block_reason,視為靜默停用
Bug 2 (coverage_evaluator_job.py): asset name/host/namespace/ip 直接 f-string
進 PromQL,無白名單驗證
→ 髒資料可生成語意污染規則或讓 Prometheus reload 失敗
修法: 加 _safe_label_val 正規表達式白名單(^[a-zA-Z0-9._\-]+$),
不合法直接 skip + debug log
Bug 3 (coverage_evaluator_job.py): ON CONFLICT DO NOTHING 衝突時 created 仍 +1
→ stats["rules_auto_created"] 計數虛高,Redis 冷卻被誤設
修法: 改用 INSERT ... RETURNING rule_name,fetchone() 確認實際插入才計數和設冷卻
附加: Redis RuntimeError 單獨 catch + log(不再靜默 pass)
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
@@ -186,9 +186,8 @@ async def _analyze_and_notify(report: DriftReport) -> None:
|
||||
auto_adopted = False
|
||||
auto_block_reason = ""
|
||||
from src.core.config import get_settings as _gs
|
||||
_drift_auto_enabled = getattr(_gs(), "DRIFT_AUTO_ADOPT_ENABLED", True)
|
||||
if not _drift_auto_enabled:
|
||||
auto_block_reason = "DRIFT_AUTO_ADOPT_ENABLED=false,功能已停用"
|
||||
_drift_auto_enabled = _gs().DRIFT_AUTO_ADOPT_ENABLED
|
||||
# flag=False 視為「停用」,不設 auto_block_reason 避免誤觸 escalation
|
||||
try:
|
||||
if _drift_auto_enabled:
|
||||
adopt_svc = get_drift_adopt_service()
|
||||
|
||||
Reference in New Issue
Block a user