Sanitize telemetry ingestion errors

This commit is contained in:
Jeppe B
2026-06-01 23:37:48 +02:00
parent e3b38519fb
commit a2dda5ea5b
2 changed files with 11 additions and 3 deletions
+3 -2
View File
@@ -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 || {},
+8 -1
View File
@@ -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