78 lines
1.9 KiB
TypeScript
78 lines
1.9 KiB
TypeScript
import { context, db as dbCore } from "@budibase/backend-core"
|
|
import {
|
|
getDatasourceParams,
|
|
getTableParams,
|
|
getAutomationParams,
|
|
getScreenParams,
|
|
} from "../../../db/utils"
|
|
|
|
async function runInContext(appId: string, cb: any, db?: PouchDB.Database) {
|
|
if (db) {
|
|
return cb(db)
|
|
} else {
|
|
const devAppId = dbCore.getDevAppID(appId)
|
|
return context.doInAppContext(devAppId, () => {
|
|
const db = context.getAppDB()
|
|
return cb(db)
|
|
})
|
|
}
|
|
}
|
|
|
|
export async function calculateDatasourceCount(
|
|
appId: string,
|
|
db?: PouchDB.Database
|
|
) {
|
|
return runInContext(
|
|
appId,
|
|
async (db: PouchDB.Database) => {
|
|
const datasourceList = await db.allDocs(getDatasourceParams())
|
|
const tableList = await db.allDocs(getTableParams())
|
|
return datasourceList.rows.length + tableList.rows.length
|
|
},
|
|
db
|
|
)
|
|
}
|
|
|
|
export async function calculateAutomationCount(
|
|
appId: string,
|
|
db?: PouchDB.Database
|
|
) {
|
|
return runInContext(
|
|
appId,
|
|
async (db: PouchDB.Database) => {
|
|
const automationList = await db.allDocs(getAutomationParams())
|
|
return automationList.rows.length
|
|
},
|
|
db
|
|
)
|
|
}
|
|
|
|
export async function calculateScreenCount(
|
|
appId: string,
|
|
db?: PouchDB.Database
|
|
) {
|
|
return runInContext(
|
|
appId,
|
|
async (db: PouchDB.Database) => {
|
|
const screenList = await db.allDocs(getScreenParams())
|
|
return screenList.rows.length
|
|
},
|
|
db
|
|
)
|
|
}
|
|
|
|
export async function calculateBackupStats(appId: string) {
|
|
return runInContext(appId, async (db: PouchDB.Database) => {
|
|
const promises = []
|
|
promises.push(calculateDatasourceCount(appId, db))
|
|
promises.push(calculateAutomationCount(appId, db))
|
|
promises.push(calculateScreenCount(appId, db))
|
|
const responses = await Promise.all(promises)
|
|
return {
|
|
datasources: responses[0],
|
|
automations: responses[1],
|
|
screens: responses[2],
|
|
}
|
|
})
|
|
}
|