Fix Dockhand auth for topology flow and accurate CDC change stats.
Pass DOCKHAND_API_TOKEN to container inventory calls so pipeline_active and topology animation work after Authentik. Replace ring-buffer-only CDC stats with minute rollups (no 1000 cap), add 15m/1h/6h/24h window selector on the Live Changes tab, and poll recent events on an interval. Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
+24
-2
@@ -17,6 +17,13 @@ from database_inventory import collect_database_inventory
|
||||
from node_registry import NODE_REGISTRY
|
||||
|
||||
DOCKHAND_URL = os.getenv("DOCKHAND_URL", "http://10.0.21.45:8082")
|
||||
DOCKHAND_API_TOKEN = os.getenv("DOCKHAND_API_TOKEN", "")
|
||||
|
||||
|
||||
def _dockhand_headers() -> dict[str, str]:
|
||||
if DOCKHAND_API_TOKEN:
|
||||
return {"Authorization": f"Bearer {DOCKHAND_API_TOKEN}"}
|
||||
return {}
|
||||
HDFS_NN_URL = os.getenv("HDFS_NN_URL", "http://10.0.21.61:9870")
|
||||
LAKEHOUSE_HOST = os.getenv("LAKEHOUSE_HOST", "10.0.21.50")
|
||||
AIRFLOW_URL = os.getenv("AIRFLOW_URL", "http://10.0.21.55:8080")
|
||||
@@ -110,7 +117,12 @@ async def dockhand_containers(
|
||||
await _log(log, "cmd", "fetch", f"$ GET {url}")
|
||||
t0 = time.monotonic()
|
||||
try:
|
||||
r = await client.get(f"{DOCKHAND_URL}/api/containers", params={"env": env_id}, timeout=8.0)
|
||||
r = await client.get(
|
||||
f"{DOCKHAND_URL}/api/containers",
|
||||
params={"env": env_id},
|
||||
headers=_dockhand_headers(),
|
||||
timeout=8.0,
|
||||
)
|
||||
ms = int((time.monotonic() - t0) * 1000)
|
||||
r.raise_for_status()
|
||||
data = r.json()
|
||||
@@ -750,11 +762,12 @@ async def collect_full_lab_context(
|
||||
if gpu_data is None:
|
||||
gpu_data = await collect_gpu_metrics(client, log)
|
||||
|
||||
docker_raw, db_raw, lake_raw, cc_raw, hdfs, etl, objectscale = await asyncio.gather(
|
||||
docker_raw, db_raw, lake_raw, cc_raw, gpu_raw, hdfs, etl, objectscale = await asyncio.gather(
|
||||
dockhand_containers(client, DOCKHAND_ENVS["docker01"], log),
|
||||
dockhand_containers(client, DOCKHAND_ENVS["db02"], log),
|
||||
dockhand_containers(client, DOCKHAND_ENVS["lakehouse"], log),
|
||||
dockhand_containers(client, DOCKHAND_ENV_COMMAND_CENTER, log),
|
||||
dockhand_containers(client, DOCKHAND_ENVS["gpu_dev"], log),
|
||||
collect_hdfs(client, log),
|
||||
collect_etl(client, log),
|
||||
collect_objectscale(client, log),
|
||||
@@ -771,6 +784,15 @@ async def collect_full_lab_context(
|
||||
databases["inventory"] = {"error": str(exc)}
|
||||
lakehouse = await collect_lakehouse(client, lake_raw, log)
|
||||
command_center = await collect_command_center(client, cc_raw, log)
|
||||
if gpu_data is not None and gpu_raw:
|
||||
gpu_running = sum(1 for c in gpu_raw if c.get("state") == "running")
|
||||
gpu_data = {
|
||||
**gpu_data,
|
||||
"dockhand_env": DOCKHAND_ENVS["gpu_dev"],
|
||||
"dockhand_containers": _container_rows(gpu_raw, GPU_URL.replace("http://", "").split(":")[0]),
|
||||
"dockhand_running": gpu_running,
|
||||
"dockhand_total": len(gpu_raw),
|
||||
}
|
||||
|
||||
try:
|
||||
governance = collect_governance(log)
|
||||
|
||||
Reference in New Issue
Block a user