feat(safety-net): complete wave 1 atomicity (adr-038, adr-039, debounce, graceful degrade, xclaim)
This commit is contained in:
@@ -430,6 +430,24 @@ class IncidentService:
|
||||
Incident | None: 成功返回 Incident,失敗返回 None
|
||||
"""
|
||||
try:
|
||||
# 0. 去抖動 (Debounce) - 防止告警風暴
|
||||
fingerprint = signal_data.get("fingerprint")
|
||||
if fingerprint:
|
||||
try:
|
||||
redis_client = get_redis()
|
||||
debounce_key = f"debounce:{fingerprint}"
|
||||
# SETNX 若成功表示是新的,給予 3 分鐘 TTL (180s)
|
||||
is_new = await redis_client.set(debounce_key, "1", ex=180, nx=True)
|
||||
if not is_new:
|
||||
logger.info(
|
||||
"incident_debounced",
|
||||
fingerprint=fingerprint,
|
||||
reason="Duplicate signal within 3 minutes",
|
||||
)
|
||||
return None
|
||||
except Exception as e:
|
||||
logger.warning("incident_debounce_redis_error", error=str(e))
|
||||
|
||||
# 1. 解析 Signal
|
||||
signal = Signal(
|
||||
alert_name=signal_data.get("alert_name", "unknown"),
|
||||
|
||||
Reference in New Issue
Block a user