From 680b53c29b7bd651258f18589e4372ed17b2d4b8 Mon Sep 17 00:00:00 2001 From: Cameron Paczek Date: Thu, 26 Jan 2023 00:45:52 -0800 Subject: [PATCH 1/5] add function to remove cron jobs --- packages/core/strapi/lib/services/cron.js | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/packages/core/strapi/lib/services/cron.js b/packages/core/strapi/lib/services/cron.js index 4b1f6136cd..8561cbc2a4 100644 --- a/packages/core/strapi/lib/services/cron.js +++ b/packages/core/strapi/lib/services/cron.js @@ -37,6 +37,12 @@ const createCronService = () => { } return this; }, + remove(name) { + const matchingJobsSpecs = jobsSpecs.filter(({ options }) => options.name === name); + matchingJobsSpecs.forEach(({ job }) => job.cancel()); + jobsSpecs = jobsSpecs.filter(({ options }) => options.name !== name); + return this; + }, start() { jobsSpecs.forEach(({ job, options }) => job.schedule(options)); running = true; From 046535397a2cf9c20d4c5897c70ab4337e4956fb Mon Sep 17 00:00:00 2001 From: Cameron Paczek Date: Wed, 15 Feb 2023 12:33:32 -0800 Subject: [PATCH 2/5] Change removal logic --- packages/core/strapi/lib/services/cron.js | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/packages/core/strapi/lib/services/cron.js b/packages/core/strapi/lib/services/cron.js index 8561cbc2a4..7d1dab4698 100644 --- a/packages/core/strapi/lib/services/cron.js +++ b/packages/core/strapi/lib/services/cron.js @@ -28,8 +28,8 @@ const createCronService = () => { const fnWithStrapi = (...args) => fn({ strapi }, ...args); - const job = new Job(null, fnWithStrapi); - jobsSpecs.push({ job, options }); + const job = new Job(taskValue.name || null, fnWithStrapi); + jobsSpecs.push({ job, options, name: taskValue.name }); if (running) { job.schedule(options); @@ -38,9 +38,9 @@ const createCronService = () => { return this; }, remove(name) { - const matchingJobsSpecs = jobsSpecs.filter(({ options }) => options.name === name); + const matchingJobsSpecs = jobsSpecs.filter(({ name: jobSpecName }) => jobSpecName === name); matchingJobsSpecs.forEach(({ job }) => job.cancel()); - jobsSpecs = jobsSpecs.filter(({ options }) => options.name !== name); + jobsSpecs = jobsSpecs.filter(({ name: jobSpecName }) => jobSpecName !== name); return this; }, start() { From 2c019059108f388bb90855fcd98107c14ca4d5dd Mon Sep 17 00:00:00 2001 From: Cameron Paczek Date: Fri, 17 Feb 2023 01:01:03 -0800 Subject: [PATCH 3/5] update to use key as task name. --- packages/core/strapi/lib/services/cron.js | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/packages/core/strapi/lib/services/cron.js b/packages/core/strapi/lib/services/cron.js index 7d1dab4698..43b8f3d432 100644 --- a/packages/core/strapi/lib/services/cron.js +++ b/packages/core/strapi/lib/services/cron.js @@ -14,10 +14,15 @@ const createCronService = () => { let fn; let options; + let taskName; if (isFunction(taskValue)) { + // don't use task name if key is the rule + taskName = null; fn = taskValue.bind(tasks); options = taskExpression; } else if (isFunction(taskValue.task)) { + // set task name if key is not the rule + taskName = taskExpression; fn = taskValue.task.bind(taskValue); options = taskValue.options; } else { @@ -28,8 +33,8 @@ const createCronService = () => { const fnWithStrapi = (...args) => fn({ strapi }, ...args); - const job = new Job(taskValue.name || null, fnWithStrapi); - jobsSpecs.push({ job, options, name: taskValue.name }); + const job = new Job(null, fnWithStrapi); + jobsSpecs.push({ job, options, name: taskName }); if (running) { job.schedule(options); From 99d50d84474d72f551bc6f423254878e9aa90378 Mon Sep 17 00:00:00 2001 From: Cameron Paczek Date: Thu, 2 Mar 2023 14:24:46 -0800 Subject: [PATCH 4/5] add ability to list jobs --- packages/core/strapi/lib/services/cron.js | 1 + 1 file changed, 1 insertion(+) diff --git a/packages/core/strapi/lib/services/cron.js b/packages/core/strapi/lib/services/cron.js index 43b8f3d432..aaa0b3c8a5 100644 --- a/packages/core/strapi/lib/services/cron.js +++ b/packages/core/strapi/lib/services/cron.js @@ -63,6 +63,7 @@ const createCronService = () => { jobsSpecs = []; return this; }, + jobs: jobsSpecs, }; }; From 0da597202fbfff6744cfe3dfc5c24ec2c70c7623 Mon Sep 17 00:00:00 2001 From: Cameron Paczek Date: Thu, 2 Mar 2023 14:28:36 -0800 Subject: [PATCH 5/5] enfoce name to be supplied when removing cron jobs --- packages/core/strapi/lib/services/cron.js | 1 + 1 file changed, 1 insertion(+) diff --git a/packages/core/strapi/lib/services/cron.js b/packages/core/strapi/lib/services/cron.js index aaa0b3c8a5..4df2f1bfd4 100644 --- a/packages/core/strapi/lib/services/cron.js +++ b/packages/core/strapi/lib/services/cron.js @@ -43,6 +43,7 @@ const createCronService = () => { return this; }, remove(name) { + if (!name) throw new Error('You must provide a name to remove a cron job.'); const matchingJobsSpecs = jobsSpecs.filter(({ name: jobSpecName }) => jobSpecName === name); matchingJobsSpecs.forEach(({ job }) => job.cancel()); jobsSpecs = jobsSpecs.filter(({ name: jobSpecName }) => jobSpecName !== name);