From 7e498621e06005b5f2fc5327a2aa304b6ceea1a2 Mon Sep 17 00:00:00 2001 From: OG T Date: Fri, 10 Apr 2026 00:15:40 +0800 Subject: [PATCH] =?UTF-8?q?fix(signoz=5Fwebhook):=20AIBlastRadius=20?= =?UTF-8?q?=E2=86=92=20BlastRadius=20=E5=9E=8B=E5=88=A5=E8=BD=89=E6=8F=9B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit blast_radius 欄位傳入 AIBlastRadius 物件導致 Pydantic validation error, approval 無法存進 DB(Telegram 仍送出但無法批准)。 修法:明確轉換 AIBlastRadius → BlastRadius,data_impact enum 用 .value 橋接。 Co-Authored-By: Claude Sonnet 4.6 --- apps/api/src/api/v1/signoz_webhook.py | 24 ++++++++++++++++++------ 1 file changed, 18 insertions(+), 6 deletions(-) diff --git a/apps/api/src/api/v1/signoz_webhook.py b/apps/api/src/api/v1/signoz_webhook.py index 3602c282..a4cca676 100644 --- a/apps/api/src/api/v1/signoz_webhook.py +++ b/apps/api/src/api/v1/signoz_webhook.py @@ -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",