From 49d14a00afca27a52062965246909f37102f7dc1 Mon Sep 17 00:00:00 2001 From: Denozordec Date: Tue, 12 May 2026 22:11:49 +0700 Subject: [PATCH] =?UTF-8?q?fix(data-collection):=20=D1=83=D0=BB=D1=83?= =?UTF-8?q?=D1=87=D1=88=D0=B8=D1=82=D1=8C=20=D0=BE=D0=B1=D1=80=D0=B0=D0=B1?= =?UTF-8?q?=D0=BE=D1=82=D0=BA=D1=83=20=D0=BE=D1=88=D0=B8=D0=B1=D0=BE=D0=BA?= =?UTF-8?q?=20=D0=B8=20=D0=B7=D0=B0=D0=B3=D1=80=D1=83=D0=B7=D0=BA=D1=83=20?= =?UTF-8?q?=D0=B4=D0=B0=D0=BD=D0=BD=D1=8B=D1=85=20=D1=81=20API?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/(main)/data-collection/page.tsx | 190 ++++++++++++++++++---------- tsconfig.tsbuildinfo | 2 +- 2 files changed, 127 insertions(+), 65 deletions(-) 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 (