From 25efcb1483eb6e244dc8e4ee240a99d22cb450c8 Mon Sep 17 00:00:00 2001 From: Codex Date: Sat, 27 Jun 2026 08:36:33 +0000 Subject: [PATCH] fix: keep sentinel monitor usable on partial refresh failure --- .../monitor-web.js | 22 ++++++++++++++----- 1 file changed, 17 insertions(+), 5 deletions(-) diff --git a/scripts/assets/web-probe-sentinel-monitor-web/monitor-web.js b/scripts/assets/web-probe-sentinel-monitor-web/monitor-web.js index 977dad57..f7edc83a 100644 --- a/scripts/assets/web-probe-sentinel-monitor-web/monitor-web.js +++ b/scripts/assets/web-probe-sentinel-monitor-web/monitor-web.js @@ -108,21 +108,33 @@ createApp({ error.value = ""; setReady(false); try { - const [overviewPayload, runsPayload, findingsPayload] = await Promise.all([ - fetchJson("/api/overview"), + const overviewPayload = await fetchJson("/api/overview"); + const [runsResult, findingsResult] = await Promise.allSettled([ fetchJson("/api/runs?limit=30&sort=updated"), fetchJson("/api/findings?limit=30&window=24h"), ]); overview.value = overviewPayload; - runs.value = Array.isArray(runsPayload.runs) ? runsPayload.runs : Array.isArray(runsPayload.items) ? runsPayload.items : []; - findings.value = Array.isArray(findingsPayload.findings) ? findingsPayload.findings : Array.isArray(findingsPayload.groups) ? findingsPayload.groups : []; + if (runsResult.status === "fulfilled") { + const runsPayload = runsResult.value; + runs.value = Array.isArray(runsPayload.runs) ? runsPayload.runs : Array.isArray(runsPayload.items) ? runsPayload.items : []; + } else if (runs.value.length === 0) { + throw runsResult.reason; + } + if (findingsResult.status === "fulfilled") { + const findingsPayload = findingsResult.value; + findings.value = Array.isArray(findingsPayload.findings) ? findingsPayload.findings : Array.isArray(findingsPayload.groups) ? findingsPayload.groups : []; + } else { + console.warn("monitor-web findings refresh failed", findingsResult.reason); + } lastLoadedAt.value = new Date().toISOString(); lastAutoRefreshAt = Date.now(); const keepSelected = runs.value.find((run) => run.id === selectedRunId.value); const nextRun = keepSelected || runs.value[0] || latestRun.value; if (nextRun?.id) void selectRun(nextRun, true); } catch (cause) { - error.value = String(cause?.message || cause); + const message = String(cause?.message || cause); + if (!options.silent || runs.value.length === 0) error.value = message; + else console.warn("monitor-web silent refresh failed", message); } finally { loading.value = false; setReady(true);