feat(approvals): integrate approval-hold detection and auto-remediation into fleet alert, loop diagnostics, and muse API

This commit is contained in:
operator
2026-10-05 17:43:04 +00:00
parent 611181b81e
commit 45edc5432c
3 changed files with 132 additions and 36 deletions
+11 -1
View File
@@ -14,6 +14,7 @@ CLI:
netvm-registry.py # prints "node:port" lines for active nodes
netvm-registry.py <node> # prints just the port (for bash)
"""
import hashlib
import os
import re
import sys
@@ -45,9 +46,12 @@ def load(registry_path=None):
port_n = int(port)
except ValueError:
continue
tag = hashlib.sha256(node.encode()).hexdigest()[:8]
idx = int(tag[:3], 16) % 200 + 10
peer_ip = f"10.201.{idx}.2"
nodes[node] = {"netns": netns, "egress_ip": egress,
"cdp_port": port_n, "status": status,
"agent": agent}
"agent": agent, "peer_ip": peer_ip}
except FileNotFoundError:
pass
return nodes
@@ -59,6 +63,12 @@ def port_for(node, registry_path=None):
return rec["cdp_port"] if rec else None
def peer_ip_for(node, registry_path=None):
"""CDP peer IP for a node, or None if the node isn't registered."""
rec = load(registry_path).get(node)
return rec["peer_ip"] if rec else None
def active_nodes(registry_path=None):
"""{node: port} for nodes with status == active."""
return {n: r["cdp_port"] for n, r in load(registry_path).items()