fix(traffic): проверять live-срез и прекращать опрос выключенных устройств

This commit is contained in:
Denozordec committed 2026-10-12 21:35:55 +07:00
1 parent 1275dd7b9b
commit 2358ecef60
29 files changed
+1620 -114

No files matched your search

+13 -3
View File
@@ -793,6 +793,7 @@ export default function TrafficPage() {
const [range, setRange] = useState<Range>("1h")
const [search, setSearch] = useState("")
const [trafficRetry, setTrafficRetry] = useState(0)
const [liveRetry, setLiveRetry] = useState(0)
const trafficKey = JSON.stringify([isLive, backendUrl, range, groupMode, trafficRetry])
const [trafficState, setTrafficState] = useState<{ key: string; status: "ready" | "error"; receivedAt?: number; error?: string } | null>(null)
const trafficReady = trafficState?.key === trafficKey && trafficState.status === "ready"
@@ -843,6 +844,7 @@ export default function TrafficPage() {
backendUrl,
serverId: selectedId,
iface: selectedIface,
reloadKey: liveRetry,
})
const confirmedFlowSelection = isLive && Boolean(currentFlows) && !liveError && (
range === "30d"
@@ -1472,7 +1474,14 @@ export default function TrafficPage() {
</>}
{isLive && effectiveMode === "servers" && detailServer && <>
<TrafficDataTime label="Получение истории сервера" receivedAt={currentDetail?.receivedAt} source="API" />
<TrafficDataTime label="Последнее измерение сервера" receivedAt={liveReceivedAt} source="live-поток" serverAt={liveSample?.at} />
<TrafficDataTime label="Последнее измерение сервера" receivedAt={liveReceivedAt} source="live-поток" serverAt={liveSample?.at}
serverTimeLabel={liveSample?.timestampKind === "backend-receipt" ? "ответ RouterOS получен приложением" : undefined} />
{liveStreamError && <Alert variant={liveStreamError === "Ожидание нового live-измерения" ? "default" : "warning"} role="status" className="mb-3">
<AlertTitle>{liveStreamError === "Ожидание нового live-измерения" ? "Подключение live-потока" : "Live-поток: нет свежих данных"}</AlertTitle>
<AlertDescription className="break-words">{liveStreamError}
<Button size="sm" variant="outline" disabled={liveStreamError === "Ожидание нового live-измерения"} onClick={() => setLiveRetry(value => value + 1)}>Переподключить live</Button>
</AlertDescription>
</Alert>}
</>}
{effectiveMode === "servers" && detailServer && (
<ServerDetail
@@ -1481,8 +1490,9 @@ export default function TrafficPage() {
setRange={setRange}
liveRx={liveSample?.rxMbps}
liveTx={liveSample?.txMbps}
liveHint={liveStreamError
? (liveSample ? "Последнее live-измерение · поток недоступен" : "История · live недоступен")
liveHint={liveStreamError === "Ожидание нового live-измерения"
? (liveSample ? "Последнее live" : "История · ожидание live") : liveStreamError
? (liveSample ? "Последнее live" : "История · live недоступен")
: liveSample ? "live" : isLive ? "История · ожидание live" : undefined}
/>
)}