fix(verifier): recognize rollout success evidence
This commit is contained in:
@@ -235,10 +235,10 @@ def _classify_tool(tool: MCPTool, provider: MCPToolProvider) -> RegisteredTool:
|
||||
priority = 5
|
||||
|
||||
# D1 K8s 狀態
|
||||
if any(k in name for k in ("describe", "pod", "deployment", "node", "hpa", "event", "k8s_get")):
|
||||
if any(k in name for k in ("describe", "pod", "deployment", "node", "hpa", "event", "k8s_get", "rollout")):
|
||||
dims.append(SensorDimension.D1_K8S_STATE)
|
||||
hints = ["Kube", "Pod", "Deploy", "Node", "Velero", "ArgoCD"]
|
||||
priority = 2
|
||||
priority = 1 if "rollout" in name else 2
|
||||
|
||||
# D2 日誌(精確匹配:避免 "topology" 中的 "log" substring 誤觸)
|
||||
elif any(k in name for k in ("logs", "stderr", "journal")) or "_log" in name or name.startswith("log"):
|
||||
|
||||
@@ -464,7 +464,17 @@ def _assess_recovery(
|
||||
return "failed"
|
||||
|
||||
# 成功信號
|
||||
success_signals = ["running", "ready", "1/1", "2/2", "3/3", "healthy"]
|
||||
success_signals = [
|
||||
"running",
|
||||
"ready",
|
||||
"1/1",
|
||||
"2/2",
|
||||
"3/3",
|
||||
"healthy",
|
||||
"successfully rolled out",
|
||||
"'success': true",
|
||||
'"success": true',
|
||||
]
|
||||
if any(sig in post_str for sig in success_signals):
|
||||
# 但如果 pre_state 已經是 running,可能是無效操作
|
||||
if pre_str and any(sig in pre_str for sig in success_signals):
|
||||
|
||||
@@ -142,6 +142,12 @@ class TestClassifyTool:
|
||||
h in reg.incident_type_hints for h in ["Pod", "Deploy", "Node"]
|
||||
)
|
||||
|
||||
def test_rollout_tool_is_high_priority_d1(self):
|
||||
reg = _classify_tool(_make_tool("k8s_watch_rollout"), self._provider())
|
||||
assert SensorDimension.D1_K8S_STATE in reg.dimensions
|
||||
assert reg.priority == 1
|
||||
assert "Deploy" in reg.incident_type_hints
|
||||
|
||||
def test_ssh_type_hints(self):
|
||||
reg = _classify_tool(_make_tool("ssh_run"), self._provider())
|
||||
assert any(h in reg.incident_type_hints for h in ["Host", "Docker"])
|
||||
|
||||
@@ -76,6 +76,16 @@ class TestAssessRecovery:
|
||||
post = {"pod": {"containers": "1/1"}}
|
||||
assert _assess_recovery(None, post, "scale_up") == "success"
|
||||
|
||||
def test_rollout_success_is_success(self):
|
||||
post = {
|
||||
"k8s_watch_rollout": {
|
||||
"deployment": "awoooi-auto-repair-canary",
|
||||
"success": True,
|
||||
"status": 'deployment "awoooi-auto-repair-canary" successfully rolled out',
|
||||
}
|
||||
}
|
||||
assert _assess_recovery(None, post, "auto_repair_playbook:PB-CANARY") == "success"
|
||||
|
||||
def test_crashloopbackoff_is_failed(self):
|
||||
post = {"pod": {"status": "CrashLoopBackOff"}}
|
||||
assert _assess_recovery(None, post, "restart_service") == "failed"
|
||||
|
||||
Reference in New Issue
Block a user