20 lines
1.4 KiB
TypeScript
20 lines
1.4 KiB
TypeScript
import { MikrotikClient } from "./mikrotik.js"
|
|
import { parseBgpSessions, parseBgpCatalogSessions } from "./bgp-parse-sessions.js"
|
|
import { readInternetPathRows } from "./internet-path-snapshot.js"
|
|
import type { ServerRow } from "../modules/servers/repository/servers-repository.js"
|
|
import type { RosBgpSession } from "../types/server.js"
|
|
|
|
export async function readRawBgpSessionsForServer(server: ServerRow): Promise<Record<string, unknown>[]> {
|
|
if (!server.enabled) throw Object.assign(new Error("Сервер выключен. Опрос BGP не выполнялся"), { statusCode: 409 })
|
|
const raw: unknown = await MikrotikClient.fromServer(server).getBgpSessionsRaw()
|
|
if (!Array.isArray(raw) || raw.some(row => !row || typeof row !== "object" || Array.isArray(row))) throw new Error("Некорректный список BGP sessions")
|
|
return raw
|
|
}
|
|
async function rowsForParsing(server: ServerRow) {
|
|
const rows = readInternetPathRows(await readRawBgpSessionsForServer(server), "BGP sessions", [".id"])
|
|
if (new Set(rows.map(row => row[".id"])).size !== rows.length) throw new Error("Повторяющиеся ID BGP-сессий")
|
|
return rows as unknown as RosBgpSession[]
|
|
}
|
|
export async function readBgpSessionsForServer(server: ServerRow) { return parseBgpSessions(server, await rowsForParsing(server)) }
|
|
export async function readBgpCatalogForServer(server: ServerRow) { return parseBgpCatalogSessions(server, await rowsForParsing(server)) }
|