fix(signoz_webhook): AIBlastRadius → BlastRadius 型別轉換
Some checks failed
CD Pipeline / build-and-deploy (push) Has been cancelled

blast_radius 欄位傳入 AIBlastRadius 物件導致 Pydantic validation error,
approval 無法存進 DB(Telegram 仍送出但無法批准)。

修法:明確轉換 AIBlastRadius → BlastRadius,data_impact enum 用 .value 橋接。

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
OG T
2026-04-10 00:15:40 +08:00
parent 3fa377cce9
commit 7e498621e0

View File

@@ -313,16 +313,28 @@ async def create_signoz_approval(
action = f"[AI 建議] {analysis_result.action_title}"
else:
action = f"SignOz Alert: {alert_name}"
approval_request = ApprovalRequestCreate(
action=action,
description=description,
risk_level=analysis_result.risk_level if analysis_result else risk_level,
blast_radius=analysis_result.blast_radius if analysis_result else BlastRadius(
# 轉換 AIBlastRadius → BlastRadius (兩者欄位相同enum 型別不同)
if analysis_result and analysis_result.blast_radius:
ai_br = analysis_result.blast_radius
blast_radius = BlastRadius(
affected_pods=ai_br.affected_pods,
estimated_downtime=ai_br.estimated_downtime,
related_services=ai_br.related_services,
data_impact=DataImpact(ai_br.data_impact.value),
)
else:
blast_radius = BlastRadius(
affected_pods=1,
estimated_downtime="0",
related_services=[service_name],
data_impact=DataImpact.READ_ONLY,
),
)
approval_request = ApprovalRequestCreate(
action=action,
description=description,
risk_level=analysis_result.risk_level if analysis_result else risk_level,
blast_radius=blast_radius,
kubectl_command=command,
dry_run_checks=[],
requested_by="signoz-webhook",