mirror of https://github.com/Budibase/budibase.git
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