Handle some JSON parsing issues

This commit is contained in:
shamoon
2026-01-04 08:24:08 -08:00
parent 67ee98ca73
commit 89e82c87ea
2 changed files with 22 additions and 9 deletions

View File

@@ -28,9 +28,17 @@ function waitForEvent(ws, handler, { event = "message", parseJson = true } = {})
const handleEvent = (payload) => { const handleEvent = (payload) => {
try { try {
const parsed = parseJson ? JSON.parse(payload.toString()) : payload; let parsed = payload;
if (parseJson) logger.info("Received TrueNAS websocket message: %o", parsed); if (parseJson) {
else logger.info("Received TrueNAS websocket message: %o", payload); if (Buffer.isBuffer(payload)) {
parsed = JSON.parse(payload.toString());
} else if (typeof payload === "string") {
parsed = JSON.parse(payload);
}
logger.info("Received TrueNAS websocket message: %o", parsed);
} else {
logger.info("Received TrueNAS websocket message: %o", payload);
}
const handlerResult = handler(parsed); const handlerResult = handler(parsed);
if (handlerResult !== undefined) { if (handlerResult !== undefined) {
cleanup(); cleanup();

View File

@@ -10,9 +10,12 @@ const widget = {
alerts: { alerts: {
endpoint: "alert/list", endpoint: "alert/list",
wsMethod: "alert.list", wsMethod: "alert.list",
map: (data) => ({ map: (data) => {
pending: jsonArrayFilter(data, (item) => item?.dismissed === false).length, if (Array.isArray(data)) {
}), return { pending: data.filter((item) => item?.dismissed === false).length };
}
return { pending: jsonArrayFilter(data, (item) => item?.dismissed === false).length };
},
}, },
status: { status: {
endpoint: "system/info", endpoint: "system/info",
@@ -22,12 +25,14 @@ const widget = {
pools: { pools: {
endpoint: "pool", endpoint: "pool",
wsMethod: "pool.query", wsMethod: "pool.query",
map: (data) => map: (data) => {
asJson(data).map((entry) => ({ const list = Array.isArray(data) ? data : asJson(data);
return list.map((entry) => ({
id: entry.name, id: entry.name,
name: entry.name, name: entry.name,
healthy: entry.healthy, healthy: entry.healthy,
})), }));
},
}, },
dataset: { dataset: {
endpoint: "pool/dataset", endpoint: "pool/dataset",