fix(bgp): отображать только подтверждённые показатели сессий

This commit is contained in:
Denozordec committed 2026-09-30 16:56:28 +07:00
1 parent 7046808429
commit 8fdc4b917b
13 files changed
+148 -169

No files matched your search

@@ -135,3 +135,33 @@ export function parseBgpSessions(server: ServerRow, raw: RosBgpSession[]): BgpSe
}
})
}
/** Каталог не заменяет отсутствующие показатели значениями по умолчанию старого API. */
export type BgpCatalogSessionRead = Omit<BgpSessionRead, "holdTime" | "keepalive" | "prefixesRx" | "prefixesTx" | "inputMessages" | "outputMessages"> & {
holdTime: number | null; keepalive: number | null; prefixesRx: number | null; prefixesTx: number | null;
inputMessages: number | null; outputMessages: number | null; afi: string | null;
}
function readCounter(value: string | undefined): number | null {
if (value === undefined || !/^\d+$/.test(value.trim())) return null
const parsed = Number(value)
return Number.isSafeInteger(parsed) ? parsed : null
}
function readTimer(value: string | undefined): number | null {
if (value === "0" || value === "infinity") return 0
if (!value || !/^(?:\d+(?:w|d|h|ms|m|s))+$/.test(value)) return null
return parseDuration(value)
}
export function parseBgpCatalogSessions(server: ServerRow, raw: RosBgpSession[]): BgpCatalogSessionRead[] {
return parseBgpSessions(server, raw).map((session, index) => {
const s = raw[index]
return { ...session,
state: s.established === "true" ? "Established" : s.state?.trim() ? detectState(s) : "Unknown",
holdTime: readTimer(s["hold-time"]) ?? readCounter(s["active-holdtime"]),
keepalive: readTimer(s["keepalive-time"]),
prefixesRx: readCounter(s["prefix-count"]), prefixesTx: null,
inputMessages: readCounter(s["remote.messages"] ?? s["total-messages-received"]),
outputMessages: readCounter(s["local.messages"] ?? s["total-messages-sent"]),
afi: s["remote.afi"]?.trim() || null,
}
})
}