diff --git a/app/(main)/data-collection/page.tsx b/app/(main)/data-collection/page.tsx index e666138..68856de 100644 --- a/app/(main)/data-collection/page.tsx +++ b/app/(main)/data-collection/page.tsx @@ -24,7 +24,7 @@ import { type SchedulerRunRowDto, type UptimeSettingsDto, } from "@/lib/scheduler-settings" -import { requestJson } from "@/shared/api/http-client" +import { requestJson, ApiClientError } from "@/shared/api/http-client" import { parseSchedulerRunSnapshot, type AlertEngineRuleDiagSnapshot, @@ -58,6 +58,27 @@ function makeApiFetch(backendUrl: string) { } } +function extractApiError(reason: unknown): string { + if (reason instanceof ApiClientError) return reason.message + if (reason instanceof Error) return reason.message + return String(reason) +} + +function readSettled(result: PromiseSettledResult): T | null { + return result.status === "fulfilled" ? result.value : null +} + +function collectSettledErrors(results: PromiseSettledResult[], labels: string[]): string[] { + const errors: string[] = [] + for (let i = 0; i < results.length; i += 1) { + const result = results[i] + if (result.status === "rejected") { + errors.push(`${labels[i]}: ${extractApiError(result.reason)}`) + } + } + return errors +} + function Toggle({ checked, onChange }: { checked: boolean; onChange: (v: boolean) => void }) { return (