75efd506f5
探针报 psutil missing 时显示安装按钮;POST install-psutil 经 SSH pip/apt 安装并审计。
62 lines
2.2 KiB
Python
62 lines
2.2 KiB
Python
"""Chinese user-facing messages for watch probe failures."""
|
|
|
|
from __future__ import annotations
|
|
|
|
_EXACT: dict[str, str] = {
|
|
"parse_error": "探针返回数据无法解析",
|
|
"psutil missing": "子机未安装 psutil",
|
|
"ssh_probe_failed": "SSH 探针脚本执行失败",
|
|
"SSH watch probe failed": "SSH 监测探针失败",
|
|
"SSH probe failed": "SSH 探针失败",
|
|
"timeout": "连接超时",
|
|
"探针失败": "探针失败",
|
|
"无 Agent 且 SSH 探针失败": "无 Agent 且 SSH 探针失败",
|
|
"服务器不存在": "服务器不存在",
|
|
}
|
|
|
|
|
|
def watch_probe_error_zh(error: str | None, *, status: str | None = None) -> str | None:
|
|
"""Map probe error text to Chinese for UI / audit display."""
|
|
if not error:
|
|
if status == "parse_error":
|
|
return "探针返回数据无法解析"
|
|
if status == "ssh_timeout":
|
|
return "SSH 连接超时"
|
|
if status == "ssh_auth":
|
|
return "SSH 认证失败"
|
|
if status == "no_cred":
|
|
return "需要 Agent 或 SSH 凭据"
|
|
if status == "redis_stale":
|
|
return "Agent 心跳已过期"
|
|
if status == "offline":
|
|
return "目标服务器离线或不可达"
|
|
return None
|
|
|
|
text = error.strip()
|
|
if text in _EXACT:
|
|
return _EXACT[text]
|
|
|
|
lower = text.lower()
|
|
if lower.startswith("parse_error"):
|
|
detail = text.split(":", 1)[1].strip() if ":" in text else ""
|
|
if detail in _EXACT:
|
|
return f"探针返回数据无法解析:{_EXACT[detail]}"
|
|
if detail:
|
|
return f"探针返回数据无法解析:{detail}"
|
|
return "探针返回数据无法解析"
|
|
|
|
if "timed out" in lower or lower.endswith("timeout"):
|
|
return f"SSH 连接超时:{text}"
|
|
if "permission denied" in lower or "authentication failed" in lower:
|
|
return f"SSH 认证失败:{text}"
|
|
if "psutil missing" in lower:
|
|
return "子机未安装 psutil"
|
|
if "ssh_probe_failed" in lower or "ssh watch probe failed" in lower:
|
|
return "SSH 探针脚本执行失败"
|
|
|
|
# Already Chinese or mixed — return as-is if contains CJK
|
|
if any("\u4e00" <= ch <= "\u9fff" for ch in text):
|
|
return text
|
|
|
|
return f"探针异常:{text}"
|