diff --git a/packages/cli/config/index.ts b/packages/cli/config/index.ts index 2390617466..9492b4cb63 100644 --- a/packages/cli/config/index.ts +++ b/packages/cli/config/index.ts @@ -205,8 +205,8 @@ const config = convict({ env: 'EXECUTIONS_DATA_MAX_AGE' }, pruneDataTimeout: { - doc: 'Timeout (ms) after execution data has been pruned', - default: 3600000, + doc: 'Timeout (seconds) after execution data has been pruned', + default: 3600, env: 'EXECUTIONS_DATA_PRUNE_TIMEOUT' }, }, diff --git a/packages/cli/src/WorkflowExecuteAdditionalData.ts b/packages/cli/src/WorkflowExecuteAdditionalData.ts index 9b55f88b58..4230e79f58 100644 --- a/packages/cli/src/WorkflowExecuteAdditionalData.ts +++ b/packages/cli/src/WorkflowExecuteAdditionalData.ts @@ -86,22 +86,22 @@ function executeErrorWorkflow(workflowData: IWorkflowBase, fullRunData: IRun, mo * Throttled to be executed just once in configured timeframe. * */ -let throttling: boolean; +let throttling = false; function pruneExecutionData(): void { if (!throttling) { throttling = true; - const timeout = config.get('executions.pruneDataTimeout') as number; // in ms + const timeout = config.get('executions.pruneDataTimeout') as number; // in seconds const maxAge = config.get('executions.pruneDataMaxAge') as number; // in h const date = new Date(); // today date.setHours(date.getHours() - maxAge); // throttle just on success to allow for self healing on failure - Db.collections.Execution!.delete({ startedAt: LessThanOrEqual(date.toISOString()) }) + Db.collections.Execution!.delete({ stoppedAt: LessThanOrEqual(date.toISOString()) }) .then(data => setTimeout(() => { throttling = false; - }, timeout) - ).catch(err => throttling = false) + }, timeout * 1000) + ).catch(err => throttling = false); } } @@ -215,6 +215,11 @@ function hookFunctionsSave(parentProcessMode?: string): IWorkflowExecuteHooks { workflowExecuteAfter: [ async function (this: WorkflowHooks, fullRunData: IRun, newStaticData: IDataObject): Promise { + // Prune old execution data + if (config.get('executions.pruneData')) { + pruneExecutionData(); + } + const isManualMode = [this.mode, parentProcessMode].includes('manual'); try { @@ -284,11 +289,6 @@ function hookFunctionsSave(parentProcessMode?: string): IWorkflowExecuteHooks { await Db.collections.Execution!.update(this.retryOf, { retrySuccessId: executionResult.id }); } - // Prune old execution data - if (config.get('executions.pruneData')) { - pruneExecutionData() - } - if (!isManualMode) { executeErrorWorkflow(this.workflowData, fullRunData, this.mode, executionResult ? executionResult.id as string : undefined, this.retryOf); }