fix(api): 修復 Sentry Approval 欄位對齊 ApprovalRequestBase

- ApprovalRequestCreate 使用正確欄位 (action, description, blast_radius...)
- BlastRadius 改用 Model 實例而非不存在的 enum
- 移除未使用的 DryRunCheck import
- 原始欄位移至 metadata

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
This commit is contained in:
OG T
2026-03-27 23:14:24 +08:00
parent 74734f5b8a
commit a5ff57ddc3

View File

@@ -25,7 +25,6 @@ from src.models.approval import (
ApprovalRequestCreate,
BlastRadius,
DataImpact,
DryRunCheck,
RiskLevel,
)
from src.services.approval_db import get_approval_service
@@ -382,25 +381,30 @@ async def create_sentry_approval(
project = error_context.get("project", "unknown")
issue_id = error_context.get("issue_id", "unknown")
# 組裝 Approval 請求 (符合 ApprovalRequestBase schema)
approval_request = ApprovalRequestCreate(
source="sentry",
alert_type=f"sentry_{level}",
target_resource=culprit,
namespace=project,
action=f"Sentry {level.upper()} Alert: {culprit}",
description=f"{title}\n\nRoot Cause: {analysis.root_cause if analysis else '待分析'}\nSuggestion: {analysis.fix_suggestion if analysis else '待 AI 分析'}",
risk_level=risk_level,
root_cause=analysis.root_cause if analysis else title,
suggestion=analysis.fix_suggestion if analysis else "待 AI 分析",
blast_radius=BlastRadius.SERVICE, # Sentry 錯誤通常影響單一服務
data_impact=DataImpact.READ_ONLY,
dry_run_check=DryRunCheck.PASSED,
llm_provider=analysis.analyzed_by if analysis else "pending",
llm_confidence=analysis.confidence if analysis else 0.0,
blast_radius=BlastRadius(
affected_pods=1,
estimated_downtime="0",
related_services=[project],
data_impact=DataImpact.READ_ONLY,
),
dry_run_checks=[], # Sentry 告警無 dry-run
requested_by="sentry-webhook",
metadata={
"source": "sentry",
"alert_type": f"sentry_{level}",
"sentry_issue_id": issue_id,
"sentry_project": project,
"culprit": culprit,
"error_count": error_context.get("count", 1),
"first_seen": error_context.get("first_seen"),
"stacktrace": error_context.get("stacktrace", []),
"llm_provider": analysis.analyzed_by if analysis else "pending",
"llm_confidence": analysis.confidence if analysis else 0.0,
},
)