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:
@@ -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,
|
||||
},
|
||||
)
|
||||
|
||||
|
||||
Reference in New Issue
Block a user