fix(collectors): проверять реальные ответы настроек без подстановки defaults
This commit is contained in:
1 parent
5d5ea680aa
commit
a0263c22a5
5 files changed
+91
-2
No files matched your search
@@ -0,0 +1,26 @@
|
||||
import { z } from "zod"
|
||||
import { requestJson } from "./http-client"
|
||||
const count = z.number().int().nonnegative().safe()
|
||||
const timestamp = z.string().min(1).refine(value => Number.isFinite(Date.parse(value))).transform(value => new Date(value).toISOString())
|
||||
const common = z.object({ enabled: z.boolean(), intervalSec: count.positive(), lastCollectedAt: timestamp.nullable(), lastDurationMs: count.nullable(), lastError: z.string().nullable(), collectorRunning: z.boolean().optional() })
|
||||
const retained = common.extend({ retentionDays: count.positive() })
|
||||
const uptime = retained.extend({ resourcesEnabled: z.boolean(), pingEnabled: z.boolean(), speedEnabled: z.boolean(), probeIntervalSec: count.positive(), speedIntervalSec: count.positive() })
|
||||
async function settings<T>(baseUrl: string, path: string, schema: z.ZodType<T>, init?: RequestInit): Promise<T> {
|
||||
const raw = await requestJson<unknown>(baseUrl, path, { ...init, method: "GET", signal: AbortSignal.any([...(init?.signal ? [init.signal] : []), AbortSignal.timeout(30_000)]) })
|
||||
const result = schema.safeParse(raw)
|
||||
if (!result.success) throw new Error("Настройки сборщика не подтверждены: получен некорректный ответ сервера")
|
||||
return result.data
|
||||
}
|
||||
export function getTrafficCollectorSettings(baseUrl: string, init?: RequestInit) {
|
||||
return settings(baseUrl, "/api/traffic/settings", retained, init)
|
||||
}
|
||||
export function getServersApiPingSettings(baseUrl: string, init?: RequestInit) {
|
||||
return settings(baseUrl, "/api/servers-api-ping/settings", common, init)
|
||||
}
|
||||
export function getUptimeCollectorSettings(baseUrl: string, init?: RequestInit) {
|
||||
// Scheduler metadata is obtained independently through the scheduler API.
|
||||
return settings(baseUrl, "/api/uptime/settings", uptime, init)
|
||||
}
|
||||
export function getInternetPathSettings(baseUrl: string, init?: RequestInit) {
|
||||
return settings(baseUrl, "/api/internet-path/settings", retained, init)
|
||||
}
|
||||
Reference in new issue
Block a user