🌳
pt0/deployF/dbF/dbToolsF.mts
1import * as _ from 'lodash-es'
7import { doBackupDb } from './doBackupDbF.mts'
12export const backupDb = async ({qsName, isQuiet=false}: {qsName: string, isQuiet?: boolean}) => {
13 return runPgOnKlustCtx.run({runPgOnKlust} as Record<string, unknown>, async () => {
14 const decomp = await decomposeForkedKubeQs({qsName})
15 const {svcName: dbName, extQs, dbQs} = decomp
17 const dirPath = getDbBackupDir({dbName})
19 await execAsyncR(`mkdir -p ${dirPath}`)
21 const dateI = (new Date).getTime()
23 const file_path = [dirPath, `${dbName}_${dateI}.sql`].join('/')
24 await doBackupDb({qsName, file_path, format: 'custom', isQuiet})
25 })
28export const isDbUp = async ({qsName}: {qsName: secretNameType}) => {
29 const decomp = await decomposeQsFromSec(qsName)
30 return testDbConn({decomp, qsName, timeoutMs: 5000})
33export const testDbConn = async ({decomp, qsName, timeoutMs = 5000}: {decomp: Record<string, unknown>, qsName: string, timeoutMs?: number}) => {
34 const db = doKnexConn({...decomp, qsName} as any)
35 try {
36 await db.raw('select 1+1 as result').timeout(timeoutMs)
37 return true
38 } catch (ee: any) {
39 if (ee.name === 'KnexTimeoutError' || (typeof ee.code === 'string' && /^E[A-Z]/.test(ee.code))) {
40 return false
41 }
42 throw ee
43 } finally {
44 await db.destroy()
45 }