Docker images / prepare-release (push) Successful in 12s
Docker images / backend-test (push) Successful in 4m9s
Docker images / frontend-image (push) Successful in 4m28s
Docker images / updater-image (push) Successful in 58s
Docker images / backend-image (push) Successful in 2m49s
Docker images / notify-webhook (push) Skipped
Docker images / publish-release (push) Successful in 11s
При старте backend накатывает схему PostgreSQL 18 и, если база пустая, один раз импортирует mikrotik.db с тома. Повторный старт не копирует данные. Бэкап в UI идёт через pg_dump. Co-authored-by: Cursor <[email protected]>
57 lines
1.9 KiB
TypeScript
57 lines
1.9 KiB
TypeScript
import { parseJsonArray } from "../../../db/json.js"
|
|
import type { ServerRead, WanUplinkRead } from "../../../types/server.js"
|
|
import type { ServerRow, SnapshotRow } from "../repository/servers-repository.js"
|
|
|
|
function parseWanUplinksJson(raw: unknown): WanUplinkRead[] {
|
|
const data = parseJsonArray(raw)
|
|
const out: WanUplinkRead[] = []
|
|
for (const row of data) {
|
|
if (typeof row !== "object" || row === null) continue
|
|
const r = row as Record<string, unknown>
|
|
out.push({
|
|
id: typeof r.id === "string" ? r.id : "",
|
|
name: typeof r.name === "string" ? r.name : "",
|
|
isp: typeof r.isp === "string" ? r.isp : "",
|
|
iface: typeof r.iface === "string" ? r.iface : "",
|
|
ip: typeof r.ip === "string" ? r.ip : "",
|
|
maxDl: typeof r.maxDl === "number" && Number.isFinite(r.maxDl) ? r.maxDl : 0,
|
|
maxUl: typeof r.maxUl === "number" && Number.isFinite(r.maxUl) ? r.maxUl : 0,
|
|
})
|
|
}
|
|
return out
|
|
}
|
|
|
|
export function toServerRead(server: ServerRow, snap: SnapshotRow | undefined): ServerRead {
|
|
return {
|
|
id: server.id,
|
|
name: server.name || server.host,
|
|
host: server.host,
|
|
port: server.port,
|
|
useSsl: server.useSsl,
|
|
verifySsl: server.verifySsl,
|
|
username: server.username,
|
|
password: server.password,
|
|
type: server.type,
|
|
site: server.site,
|
|
country: server.country,
|
|
asn: server.asn,
|
|
comment: server.comment,
|
|
enabled: server.enabled,
|
|
lanSubnet: server.lanSubnet ?? "",
|
|
wanUplinks: parseWanUplinksJson(server.wanUplinks),
|
|
createdAt: server.createdAt,
|
|
updatedAt: server.updatedAt,
|
|
status: snap ? snap.status : null,
|
|
latency: snap?.latencyMs ?? null,
|
|
os: snap?.rosVersion ?? null,
|
|
model: snap?.boardName ?? null,
|
|
uptime: snap?.uptime ?? null,
|
|
cpuLoad: snap?.cpuLoad ?? null,
|
|
freeMemory: snap?.freeMemory ?? null,
|
|
totalMemory: snap?.totalMemory ?? null,
|
|
identityName: snap?.identityName ?? null,
|
|
sessions: 0,
|
|
polledAt: snap?.polledAt ?? null,
|
|
}
|
|
}
|