From a2dda5ea5b35395dca4841ab974310d0c66ef473 Mon Sep 17 00:00:00 2001 From: Jeppe B <2jepp9350@gmail.com> Date: Mon, 1 Jun 2026 23:37:48 +0200 Subject: [PATCH] Sanitize telemetry ingestion errors --- services/edge-broker/server.mjs | 5 +++-- services/edge-broker/test/broker.test.mjs | 9 ++++++++- 2 files changed, 11 insertions(+), 3 deletions(-) diff --git a/services/edge-broker/server.mjs b/services/edge-broker/server.mjs index 535a2a65..2a169501 100644 --- a/services/edge-broker/server.mjs +++ b/services/edge-broker/server.mjs @@ -4,6 +4,7 @@ import { fileURLToPath } from "node:url"; import { WebSocketServer } from "ws"; const DEFAULT_SHELL_OPEN_TIMEOUT_MS = 15000; +const TELEMETRY_INGEST_ERROR_MESSAGE = "Telemetry ingestion failed"; function parseJsonBody(req) { return new Promise((resolve, reject) => { @@ -786,8 +787,8 @@ export function createBrokerServer(options = {}) { let ingestError = null; try { ingested = await ingestTelemetry(String(ws.gatewayId), payload); - } catch (error) { - ingestError = error instanceof Error ? error.message : String(error); + } catch { + ingestError = TELEMETRY_INGEST_ERROR_MESSAGE; } const fallbackStatistics = { system_metrics: payload?.metadata?.system_metrics || {}, diff --git a/services/edge-broker/test/broker.test.mjs b/services/edge-broker/test/broker.test.mjs index f971aeed..493e0716 100644 --- a/services/edge-broker/test/broker.test.mjs +++ b/services/edge-broker/test/broker.test.mjs @@ -813,9 +813,16 @@ test("broker still fans out telemetry when manager ingestion fails", async () => ); await waitFor( - () => browserMessages.some((message) => message.type === "gateway.telemetry" && message.error === "manager unavailable"), + () => + browserMessages.some( + (message) => message.type === "gateway.telemetry" && message.error === "Telemetry ingestion failed" + ), { description: "telemetry fanout after ingest failure" } ); + assert.ok( + browserMessages.every((message) => message.error !== "manager unavailable"), + "raw manager errors must not be sent to browser streams" + ); assert.ok( browserMessages.some( (message) => message.type === "stats.updated" && message.statistics?.system_metrics?.cpu_usage_pct === 31