Proven working Postgresql monitor

This commit is contained in:
Lyncoln
2026-09-17 09:23:17 -04:00
commit 0123da0e12
7 changed files with 769 additions and 0 deletions
+165
View File
@@ -0,0 +1,165 @@
#!/usr/bin/env python3
import json
import os
import signal
import socket
import traceback
from registry import Registry, RegistryError
SOCKET_PATH = os.environ.get(
"MANAGED_CONTAINERD_SOCKET",
"/run/managed-containerd/managed-containerd.sock",
)
server_socket = None
registry = None
def handle_request(req):
action = req.get("action")
if action == "ping":
return {
"ok": True,
"daemon": "managed-containerd",
"protocol_version": 1,
}
if action == "registry.list":
return {
"ok": True,
"resources": registry.list_resources(),
}
resource = req.get("resource")
if not resource:
return {
"ok": False,
"error": "resource is required",
}
return registry.execute(
resource,
action,
)
def cleanup_socket():
try:
os.unlink(SOCKET_PATH)
except FileNotFoundError:
pass
def shutdown(signum, frame):
global server_socket
print(
f"managed-containerd received signal {signum}; shutting down",
flush=True,
)
if server_socket is not None:
try:
server_socket.close()
except OSError:
pass
cleanup_socket()
raise SystemExit(0)
def serve():
global server_socket
global registry
registry = Registry()
os.makedirs(
os.path.dirname(SOCKET_PATH),
exist_ok=True,
)
cleanup_socket()
signal.signal(signal.SIGTERM, shutdown)
signal.signal(signal.SIGINT, shutdown)
server_socket = socket.socket(
socket.AF_UNIX,
socket.SOCK_STREAM,
)
server_socket.bind(SOCKET_PATH)
os.chmod(SOCKET_PATH, 0o660)
server_socket.listen(16)
print(
f"managed-containerd listening on {SOCKET_PATH}",
flush=True,
)
print(
"registered resources: "
+ ", ".join(registry.resources),
flush=True,
)
try:
while True:
conn, _ = server_socket.accept()
with conn:
try:
raw = b""
while b"\n" not in raw:
chunk = conn.recv(65536)
if not chunk:
break
raw += chunk
req = json.loads(
raw.decode("utf-8").strip()
)
response = handle_request(req)
except (
RegistryError,
ValueError,
KeyError,
) as exc:
response = {
"ok": False,
"error": str(exc),
}
except Exception as exc:
traceback.print_exc()
response = {
"ok": False,
"error": str(exc),
}
conn.sendall(
json.dumps(
response,
default=str,
).encode("utf-8")
+ b"\n"
)
finally:
cleanup_socket()
if __name__ == "__main__":
serve()