feat(mcp-phase4b): 自動修復後抓 K8s Pod 狀態寫入 k8s_state_after
Some checks failed
CD Pipeline / build-and-deploy (push) Failing after 24s
Some checks failed
CD Pipeline / build-and-deploy (push) Failing after 24s
_push_auto_repair_result() 成功後: - 呼叫 K8sProvider.kubectl_get(pods, label=app=<service>) - 結果截斷 500 字寫入 incidents.k8s_state_after - km_conversion_service._build_content() 已支援顯示此欄位 - 失敗靜默 debug log,不阻塞主流程 完成 KM 三段資料閉環: 症狀(labels) + 情境(metrics_before) + 動作(action) + 效果(metrics_after + k8s_state_after) Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
@@ -459,6 +459,33 @@ async def _push_auto_repair_result(
|
||||
|
||||
metrics_delta_text = _format_metrics_delta(metrics_before, metrics_after)
|
||||
|
||||
# MCP Phase 4b: 抓 K8s Pod 狀態寫入 k8s_state_after (2026-04-11 Claude Sonnet 4.6)
|
||||
try:
|
||||
from src.plugins.mcp.providers.k8s_provider import K8sProvider
|
||||
_k8s = K8sProvider()
|
||||
if _k8s.enabled:
|
||||
_service = (incident.affected_services or [""])[0]
|
||||
if _service:
|
||||
_k8s_result = await _k8s.execute(
|
||||
"kubectl_get",
|
||||
{"resource_type": "pods", "namespace": "awoooi-prod",
|
||||
"label_selector": f"app={_service}"},
|
||||
)
|
||||
if _k8s_result.success and _k8s_result.data:
|
||||
_k8s_state = str(_k8s_result.data)[:500]
|
||||
from src.db.base import get_db_context
|
||||
from src.db.models import Incident as IncidentORM
|
||||
from sqlalchemy import update as _upd2
|
||||
async with get_db_context() as _db2:
|
||||
await _db2.execute(
|
||||
_upd2(IncidentORM)
|
||||
.where(IncidentORM.incident_id == inc_id)
|
||||
.values(k8s_state_after=_k8s_state)
|
||||
)
|
||||
await _db2.commit()
|
||||
except Exception as _k8s_err:
|
||||
logger.debug("k8s_state_after_failed", incident_id=inc_id, error=str(_k8s_err))
|
||||
|
||||
if success:
|
||||
delta_line = f"\n├ 指標: <code>{metrics_delta_text}</code>" if metrics_delta_text else ""
|
||||
status_line = (
|
||||
|
||||
Reference in New Issue
Block a user