forked from tsai/budibase
9 changed files with 151 additions and 64 deletions
@ -1,48 +0,0 @@ |
|||||
const { |
|
||||
MIGRATIONS, |
|
||||
MIGRATION_DBS, |
|
||||
migrateIfRequired, |
|
||||
} = require("@budibase/backend-core/migrations") |
|
||||
const { getGlobalDB } = require("@budibase/backend-core/tenancy") |
|
||||
const { getAllApps } = require("@budibase/backend-core/db") |
|
||||
const CouchDB = require("../db") |
|
||||
const { getUsageQuotaDoc, useQuotas } = require("../utilities/usageQuota") |
|
||||
const { getUniqueRows } = require("../utilities/usageQuota/rows") |
|
||||
|
|
||||
const syncRowsQuota = async db => { |
|
||||
// get all rows in all apps
|
|
||||
const allApps = await getAllApps(CouchDB, { all: true }) |
|
||||
const appIds = allApps ? allApps.map(app => app.appId) : [] |
|
||||
const rows = await getUniqueRows(appIds) |
|
||||
|
|
||||
// sync row count
|
|
||||
const usageDoc = await getUsageQuotaDoc(db) |
|
||||
usageDoc.usageQuota.rows = rows.length |
|
||||
await db.put(usageDoc) |
|
||||
} |
|
||||
|
|
||||
const syncAppsQuota = async db => { |
|
||||
// get app count
|
|
||||
const devApps = await getAllApps(CouchDB, { dev: true }) |
|
||||
const appCount = devApps ? devApps.length : 0 |
|
||||
|
|
||||
// sync app count
|
|
||||
const usageDoc = await getUsageQuotaDoc(db) |
|
||||
usageDoc.usageQuota.apps = appCount |
|
||||
await db.put(usageDoc) |
|
||||
} |
|
||||
|
|
||||
exports.runIfRequired = async () => { |
|
||||
await migrateIfRequired( |
|
||||
MIGRATION_DBS.GLOBAL_DB, |
|
||||
MIGRATIONS.SYNC_APP_AND_RESET_ROWS_QUOTAS, |
|
||||
async () => { |
|
||||
if (!useQuotas()) { |
|
||||
return |
|
||||
} |
|
||||
const db = getGlobalDB() |
|
||||
await syncAppsQuota(db) |
|
||||
await syncRowsQuota(db) |
|
||||
} |
|
||||
) |
|
||||
} |
|
||||
@ -0,0 +1,27 @@ |
|||||
|
const env = require("../../../environment") |
||||
|
const TestConfig = require("../../../tests/utilities/TestConfiguration") |
||||
|
|
||||
|
const syncApps = jest.fn() |
||||
|
const syncRows = jest.fn() |
||||
|
|
||||
|
jest.mock("../../usageQuotas/syncApps", () => ({ run: syncApps }) ) |
||||
|
jest.mock("../../usageQuotas/syncRows", () => ({ run: syncRows }) ) |
||||
|
|
||||
|
const migrations = require("../../usageQuotas") |
||||
|
|
||||
|
describe("run", () => { |
||||
|
let config = new TestConfig(false) |
||||
|
|
||||
|
beforeEach(async () => { |
||||
|
await config.init() |
||||
|
env._set("USE_QUOTAS", 1) |
||||
|
}) |
||||
|
|
||||
|
afterAll(config.end) |
||||
|
|
||||
|
it("runs the required migrations", async () => { |
||||
|
await migrations.run() |
||||
|
expect(syncApps).toHaveBeenCalledTimes(1) |
||||
|
expect(syncRows).toHaveBeenCalledTimes(1) |
||||
|
}) |
||||
|
}) |
||||
@ -0,0 +1,43 @@ |
|||||
|
const { getGlobalDB } = require("@budibase/backend-core/tenancy") |
||||
|
const TestConfig = require("../../../tests/utilities/TestConfiguration") |
||||
|
const { getUsageQuotaDoc, update, Properties } = require("../../../utilities/usageQuota") |
||||
|
const syncRows = require("../../usageQuotas/syncRows") |
||||
|
const env = require("../../../environment") |
||||
|
|
||||
|
describe("syncRows", () => { |
||||
|
let config = new TestConfig(false) |
||||
|
|
||||
|
beforeEach(async () => { |
||||
|
await config.init() |
||||
|
env._set("USE_QUOTAS", 1) |
||||
|
}) |
||||
|
|
||||
|
afterAll(config.end) |
||||
|
|
||||
|
it("runs successfully", async () => { |
||||
|
// create the usage quota doc and mock usages
|
||||
|
const db = getGlobalDB() |
||||
|
await getUsageQuotaDoc(db) |
||||
|
await update(Properties.ROW, 300) |
||||
|
|
||||
|
let usageDoc = await getUsageQuotaDoc(db) |
||||
|
expect(usageDoc.usageQuota.rows).toEqual(300) |
||||
|
|
||||
|
// app 1
|
||||
|
await config.createTable() |
||||
|
await config.createRow() |
||||
|
// app 2
|
||||
|
await config.createApp() |
||||
|
await config.createTable() |
||||
|
await config.createRow() |
||||
|
await config.createRow() |
||||
|
|
||||
|
// migrate
|
||||
|
await syncRows.run() |
||||
|
|
||||
|
// assert the migration worked
|
||||
|
usageDoc = await getUsageQuotaDoc(db) |
||||
|
expect(usageDoc.usageQuota.rows).toEqual(3) |
||||
|
}) |
||||
|
}) |
||||
|
|
||||
@ -0,0 +1,24 @@ |
|||||
|
const { |
||||
|
MIGRATIONS, |
||||
|
MIGRATION_DBS, |
||||
|
migrateIfRequired, |
||||
|
} = require("@budibase/backend-core/migrations") |
||||
|
const { useQuotas } = require("../../utilities/usageQuota") |
||||
|
const syncApps = require("./syncApps") |
||||
|
const syncRows = require("./syncRows") |
||||
|
|
||||
|
exports.run = async () => { |
||||
|
if (!useQuotas()) { |
||||
|
return |
||||
|
} |
||||
|
|
||||
|
// Jan 2022
|
||||
|
await migrateIfRequired( |
||||
|
MIGRATION_DBS.GLOBAL_DB, |
||||
|
MIGRATIONS.QUOTAS_1, |
||||
|
async () => { |
||||
|
await syncApps.run() |
||||
|
await syncRows.run() |
||||
|
} |
||||
|
) |
||||
|
} |
||||
@ -0,0 +1,16 @@ |
|||||
|
const { getGlobalDB } = require("@budibase/backend-core/tenancy") |
||||
|
const { getAllApps } = require("@budibase/backend-core/db") |
||||
|
const CouchDB = require("../../db") |
||||
|
const { getUsageQuotaDoc } = require("../../utilities/usageQuota") |
||||
|
|
||||
|
exports.run = async () => { |
||||
|
const db = getGlobalDB() |
||||
|
// get app count
|
||||
|
const devApps = await getAllApps(CouchDB, { dev: true }) |
||||
|
const appCount = devApps ? devApps.length : 0 |
||||
|
|
||||
|
// sync app count
|
||||
|
const usageDoc = await getUsageQuotaDoc(db) |
||||
|
usageDoc.usageQuota.apps = appCount |
||||
|
await db.put(usageDoc) |
||||
|
} |
||||
@ -0,0 +1,18 @@ |
|||||
|
const { getGlobalDB } = require("@budibase/backend-core/tenancy") |
||||
|
const { getAllApps } = require("@budibase/backend-core/db") |
||||
|
const CouchDB = require("../../db") |
||||
|
const { getUsageQuotaDoc } = require("../../utilities/usageQuota") |
||||
|
const { getUniqueRows } = require("../../utilities/usageQuota/rows") |
||||
|
|
||||
|
exports.run = async () => { |
||||
|
const db = getGlobalDB() |
||||
|
// get all rows in all apps
|
||||
|
const allApps = await getAllApps(CouchDB, { all: true }) |
||||
|
const appIds = allApps ? allApps.map(app => app.appId) : [] |
||||
|
const rows = await getUniqueRows(appIds) |
||||
|
|
||||
|
// sync row count
|
||||
|
const usageDoc = await getUsageQuotaDoc(db) |
||||
|
usageDoc.usageQuota.rows = rows.length |
||||
|
await db.put(usageDoc) |
||||
|
} |
||||
Loading…
Reference in new issue