fix: keep sentinel monitor usable on partial refresh failure
This commit is contained in:
@@ -108,21 +108,33 @@ createApp({
|
|||||||
error.value = "";
|
error.value = "";
|
||||||
setReady(false);
|
setReady(false);
|
||||||
try {
|
try {
|
||||||
const [overviewPayload, runsPayload, findingsPayload] = await Promise.all([
|
const overviewPayload = await fetchJson("/api/overview");
|
||||||
fetchJson("/api/overview"),
|
const [runsResult, findingsResult] = await Promise.allSettled([
|
||||||
fetchJson("/api/runs?limit=30&sort=updated"),
|
fetchJson("/api/runs?limit=30&sort=updated"),
|
||||||
fetchJson("/api/findings?limit=30&window=24h"),
|
fetchJson("/api/findings?limit=30&window=24h"),
|
||||||
]);
|
]);
|
||||||
overview.value = overviewPayload;
|
overview.value = overviewPayload;
|
||||||
runs.value = Array.isArray(runsPayload.runs) ? runsPayload.runs : Array.isArray(runsPayload.items) ? runsPayload.items : [];
|
if (runsResult.status === "fulfilled") {
|
||||||
findings.value = Array.isArray(findingsPayload.findings) ? findingsPayload.findings : Array.isArray(findingsPayload.groups) ? findingsPayload.groups : [];
|
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();
|
lastLoadedAt.value = new Date().toISOString();
|
||||||
lastAutoRefreshAt = Date.now();
|
lastAutoRefreshAt = Date.now();
|
||||||
const keepSelected = runs.value.find((run) => run.id === selectedRunId.value);
|
const keepSelected = runs.value.find((run) => run.id === selectedRunId.value);
|
||||||
const nextRun = keepSelected || runs.value[0] || latestRun.value;
|
const nextRun = keepSelected || runs.value[0] || latestRun.value;
|
||||||
if (nextRun?.id) void selectRun(nextRun, true);
|
if (nextRun?.id) void selectRun(nextRun, true);
|
||||||
} catch (cause) {
|
} 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 {
|
} finally {
|
||||||
loading.value = false;
|
loading.value = false;
|
||||||
setReady(true);
|
setReady(true);
|
||||||
|
|||||||
Reference in New Issue
Block a user