From 494e042dd8197dbd67ddd43a684bc2fa6d1d2b1a Mon Sep 17 00:00:00 2001 From: mike12345567 Date: Wed, 17 Nov 2021 16:28:52 +0000 Subject: [PATCH] Adding a mechanism for disabling cron jobs when an app is unpublished. --- packages/server/src/api/controllers/application.js | 4 ++++ packages/server/src/automations/utils.js | 9 +++++++++ 2 files changed, 13 insertions(+) diff --git a/packages/server/src/api/controllers/application.js b/packages/server/src/api/controllers/application.js index cd14313b47..9061525ae5 100644 --- a/packages/server/src/api/controllers/application.js +++ b/packages/server/src/api/controllers/application.js @@ -46,6 +46,7 @@ const { const { getTenantId, isMultiTenant } = require("@budibase/auth/tenancy") const { syncGlobalUsers } = require("./user") const { app: appCache } = require("@budibase/auth/cache") +const { cleanupAutomations } = require("../../automations/utils") const URL_REGEX_SLASH = /\/|\\/g @@ -319,6 +320,9 @@ exports.delete = async ctx => { if (!env.isTest() && !ctx.query.unpublish) { await deleteApp(ctx.params.appId) } + if (ctx.query.unpublish) { + await cleanupAutomations(ctx.params.appId) + } // make sure the app/role doesn't stick around after the app has been deleted await removeAppFromUserRoles(ctx, ctx.params.appId) await appCache.invalidateAppMetadata(ctx.params.appId) diff --git a/packages/server/src/automations/utils.js b/packages/server/src/automations/utils.js index 58a2829a7a..6e58e9aae0 100644 --- a/packages/server/src/automations/utils.js +++ b/packages/server/src/automations/utils.js @@ -163,3 +163,12 @@ exports.checkForWebhooks = async ({ appId, oldAuto, newAuto }) => { } return newAuto } + +/** + * When removing an app/unpublishing it need to make sure automations are cleaned up (cron). + * @param appId {string} the app that is being removed. + * @return {Promise} clean is complete if this succeeds. + */ +exports.cleanupAutomations = async appId => { + await exports.disableAllCrons(appId) +}