Fix edge to handle nested metrics format from gateway forwarding
This commit is contained in:
@@ -222,16 +222,37 @@ async def websocket_endpoint(websocket: WebSocket, key: str = Query(default=""))
|
||||
await websocket.close(code=4001, reason="Invalid API key")
|
||||
return
|
||||
|
||||
machine_id = data.get("machine_id", "unknown")
|
||||
machines[machine_id] = data
|
||||
log.debug(f"Metrics from {machine_id}: cpu={data.get('cpu')}%")
|
||||
# Handle both formats:
|
||||
# 1. Direct: {"type": "metrics", "machine_id": "...", "cpu": ...}
|
||||
# 2. Nested (from gateway): {"type": "metrics", "data": {...}, "timestamp": "..."}
|
||||
if "data" in data and isinstance(data["data"], dict):
|
||||
# Nested format from gateway forwarding
|
||||
payload = data["data"]
|
||||
machine_id = payload.get("machine_id", "unknown")
|
||||
# Extract metrics from nested structure
|
||||
metrics = payload.get("metrics", {})
|
||||
metric_data = {
|
||||
"type": "metrics",
|
||||
"machine_id": machine_id,
|
||||
"hostname": payload.get("hostname", ""),
|
||||
"timestamp": data.get("timestamp"),
|
||||
}
|
||||
# Flatten metrics for dashboard display
|
||||
for key_name, value in metrics.items():
|
||||
metric_data[key_name.lower()] = value
|
||||
machines[machine_id] = metric_data
|
||||
log.debug(f"Metrics (forwarded) from {machine_id}")
|
||||
else:
|
||||
# Direct format from collector
|
||||
machine_id = data.get("machine_id", "unknown")
|
||||
machines[machine_id] = data
|
||||
log.debug(f"Metrics from {machine_id}: cpu={data.get('cpu')}%")
|
||||
|
||||
# Broadcast to all connected clients
|
||||
broadcast_data = machines[machine_id]
|
||||
for conn in connections:
|
||||
try:
|
||||
await conn.send_json(
|
||||
{"type": "metrics", "machine_id": machine_id, **data}
|
||||
)
|
||||
await conn.send_json(broadcast_data)
|
||||
except Exception:
|
||||
pass
|
||||
|
||||
|
||||
Reference in New Issue
Block a user