Files
MikrotikManager/backend/src/services/bgp-session-read.ts
T

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)) }