From ae3512fecf5d7ba02165c01cb6a50007a9dffd6d Mon Sep 17 00:00:00 2001 From: Ali BARIN Date: Thu, 9 Mar 2023 15:13:50 +0000 Subject: [PATCH] feat: don't interrupt execution due to quota --- packages/backend/src/models/flow.ts | 14 +++++++++++++- packages/backend/src/services/action.ts | 5 ----- packages/backend/src/services/flow.ts | 6 ------ packages/backend/src/workers/flow.ts | 7 +++++++ 4 files changed, 20 insertions(+), 12 deletions(-) diff --git a/packages/backend/src/models/flow.ts b/packages/backend/src/models/flow.ts index 7a96b6c1..90abceef 100644 --- a/packages/backend/src/models/flow.ts +++ b/packages/backend/src/models/flow.ts @@ -131,7 +131,7 @@ class Flow extends Base { }); } - async throwIfQuotaExceeded() { + async checkIfQuotaExceeded() { if (!appConfig.isCloud) return; const user = await this.$relatedQuery('user'); @@ -139,6 +139,18 @@ class Flow extends Base { const hasExceeded = await usageData.checkIfLimitExceeded(); + if (hasExceeded) { + return true; + } + + return false; + } + + async throwIfQuotaExceeded() { + if (!appConfig.isCloud) return; + + const hasExceeded = await this.checkIfQuotaExceeded(); + if (hasExceeded) { throw new Error('The allowed task quota has been exhausted!'); } diff --git a/packages/backend/src/services/action.ts b/packages/backend/src/services/action.ts index 79af8b9f..0b1caf51 100644 --- a/packages/backend/src/services/action.ts +++ b/packages/backend/src/services/action.ts @@ -1,4 +1,3 @@ -import appConfig from '../config/app'; import Step from '../models/step'; import Flow from '../models/flow'; import Execution from '../models/execution'; @@ -23,10 +22,6 @@ export const processAction = async (options: ProcessActionOptions) => { .findById(executionId) .throwIfNotFound(); - if (!execution.testRun) { - await flow.throwIfQuotaExceeded(); - } - const step = await Step.query().findById(stepId).throwIfNotFound(); const $ = await globalVariable({ diff --git a/packages/backend/src/services/flow.ts b/packages/backend/src/services/flow.ts index 4ace0599..a0b97baf 100644 --- a/packages/backend/src/services/flow.ts +++ b/packages/backend/src/services/flow.ts @@ -1,4 +1,3 @@ -import appConfig from '../config/app'; import Flow from '../models/flow'; import globalVariable from '../helpers/global-variable'; import EarlyExitError from '../errors/early-exit'; @@ -13,11 +12,6 @@ type ProcessFlowOptions = { export const processFlow = async (options: ProcessFlowOptions) => { const { testRun, flowId } = options; const flow = await Flow.query().findById(flowId).throwIfNotFound(); - - if (!testRun) { - await flow.throwIfQuotaExceeded(); - } - const triggerStep = await flow.getTriggerStep(); const triggerCommand = await triggerStep.getTriggerCommand(); diff --git a/packages/backend/src/workers/flow.ts b/packages/backend/src/workers/flow.ts index 7ca05782..04d4bf00 100644 --- a/packages/backend/src/workers/flow.ts +++ b/packages/backend/src/workers/flow.ts @@ -12,6 +12,13 @@ export const worker = new Worker( const { flowId } = job.data; const flow = await Flow.query().findById(flowId).throwIfNotFound(); + + const quotaExceeded = await flow.checkIfQuotaExceeded(); + + if (quotaExceeded) { + return; + } + const triggerStep = await flow.getTriggerStep(); const { data, error } = await processFlow({ flowId });