Handle some JSON parsing issues

This commit is contained in:
shamoon
2026-01-04 08:24:08 -08:00
parent 43e3c95800
commit 14bd23d54e
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) => {
try {
const parsed = parseJson ? JSON.parse(payload.toString()) : payload;
if (parseJson) logger.info("Received TrueNAS websocket message: %o", parsed);
else logger.info("Received TrueNAS websocket message: %o", payload);
let parsed = payload;
if (parseJson) {
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);
if (handlerResult !== undefined) {
cleanup();

View File

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