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 <cursoragent@cursor.com>
40 lines
1.4 KiB
TypeScript
40 lines
1.4 KiB
TypeScript
import { eq } from "drizzle-orm"
|
||
import { db } from "../../db/index.js"
|
||
import { parseJsonObject } from "../../db/json.js"
|
||
import { alertEnginePrevLive } from "../../db/schema.js"
|
||
|
||
export type PrevLiveKind = "gre" | "bgp"
|
||
|
||
/** Предыдущие строковые состояния (GRE: up|down|degraded; BGP: state как с роутера). */
|
||
export type PrevLiveStringMap = Record<string, string>
|
||
|
||
function safeParseMap(json: unknown): PrevLiveStringMap {
|
||
return parseJsonObject(json) as PrevLiveStringMap
|
||
}
|
||
|
||
export async function loadPrevLiveMap(kind: PrevLiveKind): Promise<PrevLiveStringMap> {
|
||
const row = (await db
|
||
.select()
|
||
.from(alertEnginePrevLive)
|
||
.where(eq(alertEnginePrevLive.kind, kind))
|
||
.limit(1))[0]
|
||
return safeParseMap(row?.payloadJson)
|
||
}
|
||
|
||
export async function savePrevLiveMap(kind: PrevLiveKind, map: PrevLiveStringMap) {
|
||
const payloadJson = map
|
||
const existing = (await db
|
||
.select()
|
||
.from(alertEnginePrevLive)
|
||
.where(eq(alertEnginePrevLive.kind, kind))
|
||
.limit(1))[0]
|
||
if (existing) {
|
||
if (existing.payloadJson === payloadJson) return
|
||
await db.update(alertEnginePrevLive)
|
||
.set({ payloadJson, updatedAt: new Date().toISOString() })
|
||
.where(eq(alertEnginePrevLive.kind, kind))
|
||
return
|
||
}
|
||
await db.insert(alertEnginePrevLive).values({ kind, payloadJson, updatedAt: new Date().toISOString() })
|
||
}
|