fix(api): сохранять неизвестные показатели BFD и OSPF

This commit is contained in:
Denozordec committed 2026-09-30 19:42:07 +07:00
1 parent 47dcd89b3c
commit e3791f3496
13 files changed
+136 -44

No files matched your search

+15 -20
View File
@@ -67,7 +67,7 @@ interface OspfNeighbor {
state: OspfNeighborState
cost: number | null
uptime: string
priority: number
priority: number | null
dataUnknown?: boolean
}
@@ -91,16 +91,16 @@ interface BfdSession {
localAddr: string
remoteAddr: string
state: BfdState
interval: number // txInterval ms
multiplier: number
interval: number | null // txInterval ms
multiplier: number | null
iface: string
uptime: string | null
multihop: boolean
rxInterval: number // ms
holdTime: number // ms
packetsRx: number
packetsTx: number
stateChanges: number
rxInterval: number | null // ms
holdTime: number | null // ms
packetsRx: number | null
packetsTx: number | null
stateChanges: number | null
dataUnknown?: boolean
}
@@ -109,7 +109,7 @@ interface BfdSession {
interface BackendNeighbor {
id: string; serverId: number; serverName: string; serverSite: string; serverCountry: string
address: string; routerId: string; instance: string; area: string; areaId: string
interface: string; state: string; uptime: string | null; stateChanges: number; priority: number
interface: string; state: string; uptime: string | null; stateChanges: number | null; priority: number | null
}
interface BackendInterface {
@@ -123,8 +123,8 @@ interface BackendInterface {
interface BackendBfdSession {
id: string; serverId: number; serverName: string; serverSite: string; serverCountry: string
localAddr: string; remoteAddr: string; interface: string; state: string; uptime: string | null
multihop: boolean; multiplier: number; txInterval: number; rxInterval: number; holdTime: number
packetsRx: number; packetsTx: number; stateChanges: number
multihop: boolean; multiplier: number | null; txInterval: number | null; rxInterval: number | null; holdTime: number | null
packetsRx: number | null; packetsTx: number | null; stateChanges: number | null
}
interface BackendOspfRoute {
@@ -1056,13 +1056,7 @@ function BfdTab({ sessions, dataIncomplete }: { sessions: BfdSession[]; dataInco
const upCount = sessions.filter(b => b.state === "Up").length
const downCount = sessions.filter(b => b.state === "Down" || b.state === "AdminDown").length
const initCount = sessions.filter(b => b.state === "Init").length
const totalPkts = sessions.reduce((s, b) => s + b.packetsRx, 0)
function fmtMs(ms: number) {
if (!ms) return "—"
if (ms < 1000) return `${ms}ms`
return `${(ms / 1000).toFixed(1)}s`
}
const totalPkts = sessions.some(b => b.packetsRx === null) ? null : sessions.reduce((sum, b) => sum + (b.packetsRx ?? 0), 0)
return (
<div className="flex flex-col gap-4">
@@ -1118,8 +1112,9 @@ function BfdTab({ sessions, dataIncomplete }: { sessions: BfdSession[]; dataInco
<div className="flex items-center gap-4 flex-wrap px-1">
<p className="text-xs text-muted-foreground">
BFD обнаруживает сбои быстрее OSPF Hello/Dead таймеров.
Tx&nbsp;/&nbsp;Rx — интервалы отправки и приёма контрольных пакетов.
{!dataIncomplete && totalPkts > 0 && <span className="ml-2 tabular-nums">Всего получено: {totalPkts.toLocaleString()} пакетов.</span>}
{!dataIncomplete && totalPkts === null && <span> Общее число полученных пакетов неизвестно.</span>}
TX факт — наблюдаемый интервал отправки; RX минимум — требуемый минимальный интервал.
{!dataIncomplete && totalPkts !== null && <span className="ml-2 tabular-nums">Всего получено: {totalPkts.toLocaleString()} пакетов.</span>}
</p>
</div>
)}