Add incident exports, queue SLA, and OpenWrt diff utilities
This commit is contained in:
@@ -460,3 +460,45 @@ async def get_openwrt_status(cfg: dict[str, Any], mode: str = "full") -> str:
|
||||
if mode == "leases":
|
||||
return "\n".join(header + lease_section)
|
||||
return "\n".join(header + wifi_section + lease_section)
|
||||
|
||||
|
||||
async def fetch_openwrt_leases(cfg: dict[str, Any]) -> list[str]:
|
||||
"""
|
||||
Fetch DHCP leases as list of strings "IP hostname (MAC)".
|
||||
"""
|
||||
ow_cfg = cfg.get("openwrt", {})
|
||||
host = ow_cfg.get("host")
|
||||
user = ow_cfg.get("user", "root")
|
||||
port = ow_cfg.get("port", 22)
|
||||
identity_file = ow_cfg.get("identity_file")
|
||||
timeout_sec = ow_cfg.get("timeout_sec", 8)
|
||||
strict = ow_cfg.get("strict_host_key_checking", True)
|
||||
|
||||
if not host:
|
||||
raise RuntimeError("OpenWrt host not configured")
|
||||
|
||||
ssh_cmd = [
|
||||
"ssh",
|
||||
"-o",
|
||||
"BatchMode=yes",
|
||||
"-o",
|
||||
f"ConnectTimeout={timeout_sec}",
|
||||
"-o",
|
||||
"LogLevel=ERROR",
|
||||
]
|
||||
if not strict:
|
||||
ssh_cmd += ["-o", "StrictHostKeyChecking=no", "-o", "UserKnownHostsFile=/dev/null"]
|
||||
if identity_file:
|
||||
ssh_cmd += ["-i", str(identity_file)]
|
||||
ssh_cmd += ["-p", str(port), f"{user}@{host}"]
|
||||
|
||||
remote = "ubus call luci-rpc getDHCPLeases '{\"family\":4}' 2>/dev/null || cat /tmp/dhcp.leases"
|
||||
rc, out = await run_cmd_full(ssh_cmd + ["sh", "-c", remote], timeout=timeout_sec + 10)
|
||||
if rc == 124:
|
||||
raise RuntimeError("timeout")
|
||||
if rc != 0:
|
||||
raise RuntimeError(out.strip() or f"ssh rc={rc}")
|
||||
leases = _safe_json_load(out)
|
||||
if leases:
|
||||
return _extract_leases(leases)
|
||||
return _parse_leases_fallback(out)
|
||||
|
||||
Reference in New Issue
Block a user