fix(ui): показывать время получения аналитики потоков

This commit is contained in:
Denozordec committed 2026-09-28 11:22:20 +07:00
1 parent 7318c5286b
commit 65241c94e9
6 files changed
+70 -12

No files matched your search

+5 -5
View File
@@ -30,15 +30,15 @@ export function useFlowLive(opts: {
dedup?: boolean
excludeMesh?: boolean
excludeOverlay?: boolean
}): { sample: FlowAnalyticsDto | null; error: string | null } {
}): { sample: FlowAnalyticsDto | null; error: string | null; receivedAt: number | null } {
const key = JSON.stringify([opts.enabled, opts.backendUrl, opts.range, opts.serverId, opts.userId, opts.iface, opts.dedup, opts.excludeMesh, opts.excludeOverlay])
const [result, setResult] = useState<{ key: string; sample: FlowAnalyticsDto | null; error: string | null } | null>(null)
const [result, setResult] = useState<{ key: string; sample: FlowAnalyticsDto | null; error: string | null; receivedAt: number | null } | null>(null)
useEffect(() => {
if (!opts.enabled) return
const ac = new AbortController()
const setError = (error: string) => {
if (!ac.signal.aborted) setResult(previous => ({ key, sample: previous?.key === key ? previous.sample : null, error }))
if (!ac.signal.aborted) setResult(previous => ({ key, sample: previous?.key === key ? previous.sample : null, receivedAt: previous?.key === key ? previous.receivedAt : null, error }))
}
const path = `/api/traffic/flow/live${flowQuery({
range: opts.range,
@@ -82,7 +82,7 @@ export function useFlowLive(opts: {
if (!isValidFlowLiveSample(parsed)) {
throw new Error("Некорректные данные live-потока")
}
setResult({ key, sample: parsed, error: parsed.degraded ? "Коллектор перегружен: упрощённая аналитика" : null })
setResult({ key, sample: parsed, receivedAt: Date.now(), error: parsed.degraded ? "Коллектор перегружен: упрощённая аналитика" : null })
} else if (ev.event === "error" && ev.data) {
const parsed: unknown = JSON.parse(ev.data)
throw new Error(parsed && typeof parsed === "object" && "error" in parsed && typeof parsed.error === "string" ? parsed.error : "Ошибка live-потока")
@@ -99,5 +99,5 @@ export function useFlowLive(opts: {
return () => ac.abort()
}, [opts.enabled, opts.backendUrl, opts.range, opts.serverId, opts.userId, opts.iface, opts.dedup, opts.excludeMesh, opts.excludeOverlay, key])
return result?.key === key ? { sample: result.sample, error: result.error } : { sample: null, error: null }
return result?.key === key ? { sample: result.sample, error: result.error, receivedAt: result.receivedAt } : { sample: null, error: null, receivedAt: null }
}