feat(auto-repair): 所有操作強制寫入 DB — auto_repair_executions 表
Some checks failed
CD Pipeline / build-and-deploy (push) Failing after 1m32s
Some checks failed
CD Pipeline / build-and-deploy (push) Failing after 1m32s
統帥指令: 所有自動修復操作(成功/失敗)必須持久化 變更: - migrations/phase10_auto_repair_executions.sql: 新增表 + 4 個索引 - db/models.py: 新增 AutoRepairExecution SQLAlchemy model - repositories/audit_log_repository.py: 新增 AutoRepairExecutionRepository (create/list_by_incident/get_stats) - auto_repair_service.py: execute_auto_repair 成功/失敗分支都寫入 DB - 新增 similarity_score 參數傳遞 - AutoRepairDecision 新增 similarity_score 欄位 - webhooks.py: 傳入 similarity_score 到 execute_auto_repair 已執行 migration: awoooi_prod@192.168.0.188:5432 ✅ Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -63,6 +63,8 @@ class AutoRepairDecision:
|
||||
blocked_by: str | None = None # 阻擋原因 (如 HIGH_RISK, P1_SEVERITY)
|
||||
# 2026-04-07 Claude Code: Sprint 4 B2 — 追蹤首次信任
|
||||
is_cold_start: bool = False
|
||||
# 2026-04-08 Claude Code: 傳入 execute_auto_repair 供 DB 記錄
|
||||
similarity_score: float | None = None
|
||||
|
||||
|
||||
@dataclass
|
||||
@@ -280,9 +282,10 @@ class AutoRepairService:
|
||||
return AutoRepairDecision(
|
||||
can_auto_repair=True,
|
||||
playbook=best_match.playbook,
|
||||
reason=f"匹配高品質 Playbook: {best_match.playbook.name} (成功率 {best_match.playbook.success_rate:.0%})",
|
||||
reason=f"匹配 Playbook: {best_match.playbook.name} (相似度 {best_match.similarity_score:.0%})",
|
||||
risk_level=max_risk,
|
||||
is_cold_start=_is_cold_start,
|
||||
similarity_score=best_match.similarity_score,
|
||||
)
|
||||
|
||||
async def execute_auto_repair(
|
||||
@@ -290,13 +293,14 @@ class AutoRepairService:
|
||||
incident: Incident,
|
||||
playbook: Playbook,
|
||||
is_cold_start: bool = False,
|
||||
similarity_score: float | None = None,
|
||||
) -> AutoRepairResult:
|
||||
"""
|
||||
執行自動修復
|
||||
|
||||
流程:
|
||||
1. 依序執行 Playbook 中的 repair_steps
|
||||
2. 記錄執行結果
|
||||
2. 記錄執行結果到 DB (auto_repair_executions)
|
||||
3. 更新 Playbook 統計
|
||||
4. 記錄處置類型 (Sprint 4 B1/B2)
|
||||
"""
|
||||
@@ -351,6 +355,24 @@ class AutoRepairService:
|
||||
execution_time_ms=execution_time,
|
||||
)
|
||||
|
||||
# 2026-04-08 Claude Code: 統帥指令「所有操作都必須被記錄,寫入資料庫」
|
||||
try:
|
||||
from src.repositories.audit_log_repository import get_auto_repair_execution_repository
|
||||
max_risk = self._get_max_risk_level(playbook)
|
||||
await get_auto_repair_execution_repository().create(
|
||||
incident_id=incident.incident_id,
|
||||
playbook_id=playbook.playbook_id,
|
||||
playbook_name=playbook.name,
|
||||
success=True,
|
||||
executed_steps=executed_steps,
|
||||
triggered_by="cold_start_trust" if is_cold_start else "auto_repair",
|
||||
similarity_score=similarity_score,
|
||||
risk_level=max_risk.value if max_risk else None,
|
||||
execution_time_ms=execution_time,
|
||||
)
|
||||
except Exception as _db_e:
|
||||
logger.error("auto_repair_db_write_failed", error=str(_db_e))
|
||||
|
||||
# 2026-04-07 Claude Code: Sprint 4 B1/B2 — 記錄處置類型
|
||||
# P0-1 Fix: 統一使用 AnomalyCounter.hash_signature()
|
||||
try:
|
||||
@@ -407,6 +429,25 @@ class AutoRepairService:
|
||||
execution_time_ms=execution_time,
|
||||
)
|
||||
|
||||
# 2026-04-08 Claude Code: 失敗也必須寫入 DB
|
||||
try:
|
||||
from src.repositories.audit_log_repository import get_auto_repair_execution_repository
|
||||
max_risk = self._get_max_risk_level(playbook)
|
||||
await get_auto_repair_execution_repository().create(
|
||||
incident_id=incident.incident_id,
|
||||
playbook_id=playbook.playbook_id,
|
||||
playbook_name=playbook.name,
|
||||
success=False,
|
||||
executed_steps=executed_steps,
|
||||
error_message=str(e),
|
||||
triggered_by="cold_start_trust" if is_cold_start else "auto_repair",
|
||||
similarity_score=similarity_score,
|
||||
risk_level=max_risk.value if max_risk else None,
|
||||
execution_time_ms=execution_time,
|
||||
)
|
||||
except Exception as _db_e:
|
||||
logger.error("auto_repair_db_write_failed", error=str(_db_e))
|
||||
|
||||
# 2026-04-04 Claude Code: Phase 25 P1 — 失敗修復後 fire-and-forget 生成 ANTI_PATTERN
|
||||
# 2026-04-05 Claude Code: I1 修正 — 補齊 _pending_tasks GC 防護(對稱化)
|
||||
try:
|
||||
|
||||
Reference in New Issue
Block a user