@sidequest/engine 1.7.0 → 1.7.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/engine.cjs +3 -0
- package/dist/engine.cjs.map +1 -1
- package/dist/engine.js +3 -0
- package/dist/engine.js.map +1 -1
- package/dist/index.cjs +2 -0
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.ts +1 -0
- package/dist/index.js +1 -0
- package/dist/index.js.map +1 -1
- package/dist/job/cron-registry.cjs +86 -0
- package/dist/job/cron-registry.cjs.map +1 -0
- package/dist/job/cron-registry.d.ts +39 -0
- package/dist/job/cron-registry.js +84 -0
- package/dist/job/cron-registry.js.map +1 -0
- package/dist/job/job-builder.cjs +8 -3
- package/dist/job/job-builder.cjs.map +1 -1
- package/dist/job/job-builder.d.ts +16 -15
- package/dist/job/job-builder.js +8 -3
- package/dist/job/job-builder.js.map +1 -1
- package/package.json +6 -6
package/dist/engine.cjs
CHANGED
|
@@ -7,6 +7,7 @@ var os = require('os');
|
|
|
7
7
|
var util = require('util');
|
|
8
8
|
var constants$1 = require('./constants.cjs');
|
|
9
9
|
var constants = require('./job/constants.cjs');
|
|
10
|
+
var cronRegistry = require('./job/cron-registry.cjs');
|
|
10
11
|
var jobBuilder = require('./job/job-builder.cjs');
|
|
11
12
|
var grantQueueConfig = require('./queue/grant-queue-config.cjs');
|
|
12
13
|
var shutdown = require('./utils/shutdown.cjs');
|
|
@@ -162,6 +163,8 @@ class Engine {
|
|
|
162
163
|
if (!this.shuttingDown) {
|
|
163
164
|
this.shuttingDown = true;
|
|
164
165
|
core.logger("Engine").debug("Closing Sidequest engine...");
|
|
166
|
+
// Stop all scheduled cron jobs first
|
|
167
|
+
await cronRegistry.ScheduledJobRegistry.stopAll();
|
|
165
168
|
if (this.mainWorker) {
|
|
166
169
|
const promise = new Promise((resolve) => {
|
|
167
170
|
this.mainWorker.on("exit", resolve);
|
package/dist/engine.cjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"engine.cjs","sources":["../src/engine.ts"],"sourcesContent":[null],"names":["logger","cpus","MISC_FALLBACK","JOB_BUILDER_FALLBACK","QUEUE_FALLBACK","inspect","configureLogger","LazyBackend","grantQueueConfig","fork","DEFAULT_WORKER_PATH","gracefulShutdown","clearGracefulShutdown","JobBuilder"],"mappings":"
|
|
1
|
+
{"version":3,"file":"engine.cjs","sources":["../src/engine.ts"],"sourcesContent":[null],"names":["logger","cpus","MISC_FALLBACK","JOB_BUILDER_FALLBACK","QUEUE_FALLBACK","inspect","configureLogger","LazyBackend","grantQueueConfig","fork","DEFAULT_WORKER_PATH","gracefulShutdown","ScheduledJobRegistry","clearGracefulShutdown","JobBuilder"],"mappings":"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"}
|
package/dist/engine.js
CHANGED
|
@@ -5,6 +5,7 @@ import { cpus } from 'os';
|
|
|
5
5
|
import { inspect } from 'util';
|
|
6
6
|
import { DEFAULT_WORKER_PATH } from './constants.js';
|
|
7
7
|
import { JOB_BUILDER_FALLBACK } from './job/constants.js';
|
|
8
|
+
import { ScheduledJobRegistry } from './job/cron-registry.js';
|
|
8
9
|
import { JobBuilder } from './job/job-builder.js';
|
|
9
10
|
import { grantQueueConfig } from './queue/grant-queue-config.js';
|
|
10
11
|
import { gracefulShutdown, clearGracefulShutdown } from './utils/shutdown.js';
|
|
@@ -160,6 +161,8 @@ class Engine {
|
|
|
160
161
|
if (!this.shuttingDown) {
|
|
161
162
|
this.shuttingDown = true;
|
|
162
163
|
logger("Engine").debug("Closing Sidequest engine...");
|
|
164
|
+
// Stop all scheduled cron jobs first
|
|
165
|
+
await ScheduledJobRegistry.stopAll();
|
|
163
166
|
if (this.mainWorker) {
|
|
164
167
|
const promise = new Promise((resolve) => {
|
|
165
168
|
this.mainWorker.on("exit", resolve);
|
package/dist/engine.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"engine.js","sources":["../src/engine.ts"],"sourcesContent":[null],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"engine.js","sources":["../src/engine.ts"],"sourcesContent":[null],"names":[],"mappings":"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"}
|
package/dist/index.cjs
CHANGED
|
@@ -6,6 +6,7 @@ var dispatcher = require('./execution/dispatcher.cjs');
|
|
|
6
6
|
var executorManager = require('./execution/executor-manager.cjs');
|
|
7
7
|
var queueManager = require('./execution/queue-manager.cjs');
|
|
8
8
|
var constants$1 = require('./job/constants.cjs');
|
|
9
|
+
var cronRegistry = require('./job/cron-registry.cjs');
|
|
9
10
|
var jobBuilder = require('./job/job-builder.cjs');
|
|
10
11
|
var jobTransitioner = require('./job/job-transitioner.cjs');
|
|
11
12
|
var grantQueueConfig = require('./queue/grant-queue-config.cjs');
|
|
@@ -27,6 +28,7 @@ exports.Dispatcher = dispatcher.Dispatcher;
|
|
|
27
28
|
exports.ExecutorManager = executorManager.ExecutorManager;
|
|
28
29
|
exports.QueueManager = queueManager.QueueManager;
|
|
29
30
|
exports.JOB_BUILDER_FALLBACK = constants$1.JOB_BUILDER_FALLBACK;
|
|
31
|
+
exports.ScheduledJobRegistry = cronRegistry.ScheduledJobRegistry;
|
|
30
32
|
exports.JobBuilder = jobBuilder.JobBuilder;
|
|
31
33
|
exports.JobTransitioner = jobTransitioner.JobTransitioner;
|
|
32
34
|
exports.differentQueueConfig = grantQueueConfig.differentQueueConfig;
|
package/dist/index.cjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.cjs","sources":[],"sourcesContent":[],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"index.cjs","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
|
package/dist/index.d.ts
CHANGED
|
@@ -4,6 +4,7 @@ export { Dispatcher } from './execution/dispatcher.js';
|
|
|
4
4
|
export { ExecutorManager } from './execution/executor-manager.js';
|
|
5
5
|
export { QueueManager } from './execution/queue-manager.js';
|
|
6
6
|
export { JOB_BUILDER_FALLBACK } from './job/constants.js';
|
|
7
|
+
export { ScheduledJobRegistry } from './job/cron-registry.js';
|
|
7
8
|
export { JobBuilder, JobBuilderDefaults, UniquenessInput } from './job/job-builder.js';
|
|
8
9
|
export { JobTransitioner } from './job/job-transitioner.js';
|
|
9
10
|
export { QueueDefaults, differentQueueConfig, grantQueueConfig } from './queue/grant-queue-config.js';
|
package/dist/index.js
CHANGED
|
@@ -4,6 +4,7 @@ export { Dispatcher } from './execution/dispatcher.js';
|
|
|
4
4
|
export { ExecutorManager } from './execution/executor-manager.js';
|
|
5
5
|
export { QueueManager } from './execution/queue-manager.js';
|
|
6
6
|
export { JOB_BUILDER_FALLBACK } from './job/constants.js';
|
|
7
|
+
export { ScheduledJobRegistry } from './job/cron-registry.js';
|
|
7
8
|
export { JobBuilder } from './job/job-builder.js';
|
|
8
9
|
export { JobTransitioner } from './job/job-transitioner.js';
|
|
9
10
|
export { differentQueueConfig, grantQueueConfig } from './queue/grant-queue-config.js';
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sources":[],"sourcesContent":[],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"index.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;"}
|
|
@@ -0,0 +1,86 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
var core = require('@sidequest/core');
|
|
4
|
+
|
|
5
|
+
/**
|
|
6
|
+
* A registry for tracking and managing scheduled cron jobs.
|
|
7
|
+
* This allows centralized control over all scheduled tasks for proper cleanup.
|
|
8
|
+
*/
|
|
9
|
+
class ScheduledJobRegistry {
|
|
10
|
+
static scheduledTasks = new Map();
|
|
11
|
+
/**
|
|
12
|
+
* Register a scheduled task in the registry.
|
|
13
|
+
* @param task - The scheduled task to register
|
|
14
|
+
* @returns A unique task ID for the registered task
|
|
15
|
+
*/
|
|
16
|
+
static register(task) {
|
|
17
|
+
this.scheduledTasks.set(task.id, task);
|
|
18
|
+
core.logger("CronRegistry").debug(`Registered scheduled task ${task.id}`);
|
|
19
|
+
return task.id;
|
|
20
|
+
}
|
|
21
|
+
/**
|
|
22
|
+
* Unregister and stop a specific scheduled task.
|
|
23
|
+
* @param taskId - The ID of the task to unregister
|
|
24
|
+
* @returns True if the task was found and stopped, false otherwise
|
|
25
|
+
*/
|
|
26
|
+
static async stop(taskId) {
|
|
27
|
+
const task = this.scheduledTasks.get(taskId);
|
|
28
|
+
if (task) {
|
|
29
|
+
try {
|
|
30
|
+
await task.stop();
|
|
31
|
+
core.logger("CronRegistry").debug(`Stopped scheduled task ${taskId}`);
|
|
32
|
+
return true;
|
|
33
|
+
}
|
|
34
|
+
catch (error) {
|
|
35
|
+
core.logger("CronRegistry").error(`Error stopping scheduled task ${taskId}:`, error);
|
|
36
|
+
return false;
|
|
37
|
+
}
|
|
38
|
+
finally {
|
|
39
|
+
this.scheduledTasks.delete(taskId);
|
|
40
|
+
core.logger("CronRegistry").debug(`Unregistered scheduled task ${taskId}`);
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
return false;
|
|
44
|
+
}
|
|
45
|
+
/**
|
|
46
|
+
* Stop and unregister all scheduled tasks.
|
|
47
|
+
* This should be called during application shutdown to ensure proper cleanup.
|
|
48
|
+
*/
|
|
49
|
+
static async stopAll() {
|
|
50
|
+
const taskCount = this.scheduledTasks.size;
|
|
51
|
+
if (taskCount === 0) {
|
|
52
|
+
core.logger("CronRegistry").debug("No scheduled tasks to stop");
|
|
53
|
+
return;
|
|
54
|
+
}
|
|
55
|
+
core.logger("CronRegistry").info(`Stopping ${taskCount} scheduled task(s)...`);
|
|
56
|
+
for (const [taskId, task] of this.scheduledTasks) {
|
|
57
|
+
try {
|
|
58
|
+
await task.stop();
|
|
59
|
+
core.logger("CronRegistry").debug(`Stopped scheduled task ${taskId}`);
|
|
60
|
+
}
|
|
61
|
+
catch (error) {
|
|
62
|
+
core.logger("CronRegistry").error(`Error stopping scheduled task ${taskId}:`, error);
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
this.scheduledTasks.clear();
|
|
66
|
+
core.logger("CronRegistry").info("All scheduled tasks stopped and registry cleared");
|
|
67
|
+
}
|
|
68
|
+
/**
|
|
69
|
+
* Get the number of registered tasks.
|
|
70
|
+
* @returns The count of registered tasks
|
|
71
|
+
*/
|
|
72
|
+
static getTaskCount() {
|
|
73
|
+
return this.scheduledTasks.size;
|
|
74
|
+
}
|
|
75
|
+
/**
|
|
76
|
+
* Check if a task is registered.
|
|
77
|
+
* @param taskId - The ID of the task to check
|
|
78
|
+
* @returns True if the task is registered, false otherwise
|
|
79
|
+
*/
|
|
80
|
+
static hasTask(taskId) {
|
|
81
|
+
return this.scheduledTasks.has(taskId);
|
|
82
|
+
}
|
|
83
|
+
}
|
|
84
|
+
|
|
85
|
+
exports.ScheduledJobRegistry = ScheduledJobRegistry;
|
|
86
|
+
//# sourceMappingURL=cron-registry.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cron-registry.cjs","sources":["../../src/job/cron-registry.ts"],"sourcesContent":[null],"names":["logger"],"mappings":";;;;AAGA;;;AAGG;MACU,oBAAoB,CAAA;AACvB,IAAA,OAAO,cAAc,GAAG,IAAI,GAAG,EAAyB;AAEhE;;;;AAIG;IACH,OAAO,QAAQ,CAAC,IAAmB,EAAA;QACjC,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,EAAE,IAAI,CAAC;AACtC,QAAAA,WAAM,CAAC,cAAc,CAAC,CAAC,KAAK,CAAC,CAAA,0BAAA,EAA6B,IAAI,CAAC,EAAE,CAAA,CAAE,CAAC;QACpE,OAAO,IAAI,CAAC,EAAE;IAChB;AAEA;;;;AAIG;AACH,IAAA,aAAa,IAAI,CAAC,MAAc,EAAA;QAC9B,MAAM,IAAI,GAAG,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,MAAM,CAAC;QAC5C,IAAI,IAAI,EAAE;AACR,YAAA,IAAI;AACF,gBAAA,MAAM,IAAI,CAAC,IAAI,EAAE;gBACjBA,WAAM,CAAC,cAAc,CAAC,CAAC,KAAK,CAAC,CAAA,uBAAA,EAA0B,MAAM,CAAA,CAAE,CAAC;AAChE,gBAAA,OAAO,IAAI;YACb;YAAE,OAAO,KAAK,EAAE;AACd,gBAAAA,WAAM,CAAC,cAAc,CAAC,CAAC,KAAK,CAAC,CAAA,8BAAA,EAAiC,MAAM,CAAA,CAAA,CAAG,EAAE,KAAK,CAAC;AAC/E,gBAAA,OAAO,KAAK;YACd;oBAAU;AACR,gBAAA,IAAI,CAAC,cAAc,CAAC,MAAM,CAAC,MAAM,CAAC;gBAClCA,WAAM,CAAC,cAAc,CAAC,CAAC,KAAK,CAAC,CAAA,4BAAA,EAA+B,MAAM,CAAA,CAAE,CAAC;YACvE;QACF;AACA,QAAA,OAAO,KAAK;IACd;AAEA;;;AAGG;IACH,aAAa,OAAO,GAAA;AAClB,QAAA,MAAM,SAAS,GAAG,IAAI,CAAC,cAAc,CAAC,IAAI;AAC1C,QAAA,IAAI,SAAS,KAAK,CAAC,EAAE;YACnBA,WAAM,CAAC,cAAc,CAAC,CAAC,KAAK,CAAC,4BAA4B,CAAC;YAC1D;QACF;QAEAA,WAAM,CAAC,cAAc,CAAC,CAAC,IAAI,CAAC,CAAA,SAAA,EAAY,SAAS,CAAA,qBAAA,CAAuB,CAAC;QAEzE,KAAK,MAAM,CAAC,MAAM,EAAE,IAAI,CAAC,IAAI,IAAI,CAAC,cAAc,EAAE;AAChD,YAAA,IAAI;AACF,gBAAA,MAAM,IAAI,CAAC,IAAI,EAAE;gBACjBA,WAAM,CAAC,cAAc,CAAC,CAAC,KAAK,CAAC,CAAA,uBAAA,EAA0B,MAAM,CAAA,CAAE,CAAC;YAClE;YAAE,OAAO,KAAK,EAAE;AACd,gBAAAA,WAAM,CAAC,cAAc,CAAC,CAAC,KAAK,CAAC,CAAA,8BAAA,EAAiC,MAAM,CAAA,CAAA,CAAG,EAAE,KAAK,CAAC;YACjF;QACF;AAEA,QAAA,IAAI,CAAC,cAAc,CAAC,KAAK,EAAE;QAC3BA,WAAM,CAAC,cAAc,CAAC,CAAC,IAAI,CAAC,kDAAkD,CAAC;IACjF;AAEA;;;AAGG;AACH,IAAA,OAAO,YAAY,GAAA;AACjB,QAAA,OAAO,IAAI,CAAC,cAAc,CAAC,IAAI;IACjC;AAEA;;;;AAIG;IACH,OAAO,OAAO,CAAC,MAAc,EAAA;QAC3B,OAAO,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,MAAM,CAAC;IACxC;;;;;"}
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
import { ScheduledTask } from 'node-cron';
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* A registry for tracking and managing scheduled cron jobs.
|
|
5
|
+
* This allows centralized control over all scheduled tasks for proper cleanup.
|
|
6
|
+
*/
|
|
7
|
+
declare class ScheduledJobRegistry {
|
|
8
|
+
private static scheduledTasks;
|
|
9
|
+
/**
|
|
10
|
+
* Register a scheduled task in the registry.
|
|
11
|
+
* @param task - The scheduled task to register
|
|
12
|
+
* @returns A unique task ID for the registered task
|
|
13
|
+
*/
|
|
14
|
+
static register(task: ScheduledTask): string;
|
|
15
|
+
/**
|
|
16
|
+
* Unregister and stop a specific scheduled task.
|
|
17
|
+
* @param taskId - The ID of the task to unregister
|
|
18
|
+
* @returns True if the task was found and stopped, false otherwise
|
|
19
|
+
*/
|
|
20
|
+
static stop(taskId: string): Promise<boolean>;
|
|
21
|
+
/**
|
|
22
|
+
* Stop and unregister all scheduled tasks.
|
|
23
|
+
* This should be called during application shutdown to ensure proper cleanup.
|
|
24
|
+
*/
|
|
25
|
+
static stopAll(): Promise<void>;
|
|
26
|
+
/**
|
|
27
|
+
* Get the number of registered tasks.
|
|
28
|
+
* @returns The count of registered tasks
|
|
29
|
+
*/
|
|
30
|
+
static getTaskCount(): number;
|
|
31
|
+
/**
|
|
32
|
+
* Check if a task is registered.
|
|
33
|
+
* @param taskId - The ID of the task to check
|
|
34
|
+
* @returns True if the task is registered, false otherwise
|
|
35
|
+
*/
|
|
36
|
+
static hasTask(taskId: string): boolean;
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
export { ScheduledJobRegistry };
|
|
@@ -0,0 +1,84 @@
|
|
|
1
|
+
import { logger } from '@sidequest/core';
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* A registry for tracking and managing scheduled cron jobs.
|
|
5
|
+
* This allows centralized control over all scheduled tasks for proper cleanup.
|
|
6
|
+
*/
|
|
7
|
+
class ScheduledJobRegistry {
|
|
8
|
+
static scheduledTasks = new Map();
|
|
9
|
+
/**
|
|
10
|
+
* Register a scheduled task in the registry.
|
|
11
|
+
* @param task - The scheduled task to register
|
|
12
|
+
* @returns A unique task ID for the registered task
|
|
13
|
+
*/
|
|
14
|
+
static register(task) {
|
|
15
|
+
this.scheduledTasks.set(task.id, task);
|
|
16
|
+
logger("CronRegistry").debug(`Registered scheduled task ${task.id}`);
|
|
17
|
+
return task.id;
|
|
18
|
+
}
|
|
19
|
+
/**
|
|
20
|
+
* Unregister and stop a specific scheduled task.
|
|
21
|
+
* @param taskId - The ID of the task to unregister
|
|
22
|
+
* @returns True if the task was found and stopped, false otherwise
|
|
23
|
+
*/
|
|
24
|
+
static async stop(taskId) {
|
|
25
|
+
const task = this.scheduledTasks.get(taskId);
|
|
26
|
+
if (task) {
|
|
27
|
+
try {
|
|
28
|
+
await task.stop();
|
|
29
|
+
logger("CronRegistry").debug(`Stopped scheduled task ${taskId}`);
|
|
30
|
+
return true;
|
|
31
|
+
}
|
|
32
|
+
catch (error) {
|
|
33
|
+
logger("CronRegistry").error(`Error stopping scheduled task ${taskId}:`, error);
|
|
34
|
+
return false;
|
|
35
|
+
}
|
|
36
|
+
finally {
|
|
37
|
+
this.scheduledTasks.delete(taskId);
|
|
38
|
+
logger("CronRegistry").debug(`Unregistered scheduled task ${taskId}`);
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
return false;
|
|
42
|
+
}
|
|
43
|
+
/**
|
|
44
|
+
* Stop and unregister all scheduled tasks.
|
|
45
|
+
* This should be called during application shutdown to ensure proper cleanup.
|
|
46
|
+
*/
|
|
47
|
+
static async stopAll() {
|
|
48
|
+
const taskCount = this.scheduledTasks.size;
|
|
49
|
+
if (taskCount === 0) {
|
|
50
|
+
logger("CronRegistry").debug("No scheduled tasks to stop");
|
|
51
|
+
return;
|
|
52
|
+
}
|
|
53
|
+
logger("CronRegistry").info(`Stopping ${taskCount} scheduled task(s)...`);
|
|
54
|
+
for (const [taskId, task] of this.scheduledTasks) {
|
|
55
|
+
try {
|
|
56
|
+
await task.stop();
|
|
57
|
+
logger("CronRegistry").debug(`Stopped scheduled task ${taskId}`);
|
|
58
|
+
}
|
|
59
|
+
catch (error) {
|
|
60
|
+
logger("CronRegistry").error(`Error stopping scheduled task ${taskId}:`, error);
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
this.scheduledTasks.clear();
|
|
64
|
+
logger("CronRegistry").info("All scheduled tasks stopped and registry cleared");
|
|
65
|
+
}
|
|
66
|
+
/**
|
|
67
|
+
* Get the number of registered tasks.
|
|
68
|
+
* @returns The count of registered tasks
|
|
69
|
+
*/
|
|
70
|
+
static getTaskCount() {
|
|
71
|
+
return this.scheduledTasks.size;
|
|
72
|
+
}
|
|
73
|
+
/**
|
|
74
|
+
* Check if a task is registered.
|
|
75
|
+
* @param taskId - The ID of the task to check
|
|
76
|
+
* @returns True if the task is registered, false otherwise
|
|
77
|
+
*/
|
|
78
|
+
static hasTask(taskId) {
|
|
79
|
+
return this.scheduledTasks.has(taskId);
|
|
80
|
+
}
|
|
81
|
+
}
|
|
82
|
+
|
|
83
|
+
export { ScheduledJobRegistry };
|
|
84
|
+
//# sourceMappingURL=cron-registry.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cron-registry.js","sources":["../../src/job/cron-registry.ts"],"sourcesContent":[null],"names":[],"mappings":";;AAGA;;;AAGG;MACU,oBAAoB,CAAA;AACvB,IAAA,OAAO,cAAc,GAAG,IAAI,GAAG,EAAyB;AAEhE;;;;AAIG;IACH,OAAO,QAAQ,CAAC,IAAmB,EAAA;QACjC,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,EAAE,IAAI,CAAC;AACtC,QAAA,MAAM,CAAC,cAAc,CAAC,CAAC,KAAK,CAAC,CAAA,0BAAA,EAA6B,IAAI,CAAC,EAAE,CAAA,CAAE,CAAC;QACpE,OAAO,IAAI,CAAC,EAAE;IAChB;AAEA;;;;AAIG;AACH,IAAA,aAAa,IAAI,CAAC,MAAc,EAAA;QAC9B,MAAM,IAAI,GAAG,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,MAAM,CAAC;QAC5C,IAAI,IAAI,EAAE;AACR,YAAA,IAAI;AACF,gBAAA,MAAM,IAAI,CAAC,IAAI,EAAE;gBACjB,MAAM,CAAC,cAAc,CAAC,CAAC,KAAK,CAAC,CAAA,uBAAA,EAA0B,MAAM,CAAA,CAAE,CAAC;AAChE,gBAAA,OAAO,IAAI;YACb;YAAE,OAAO,KAAK,EAAE;AACd,gBAAA,MAAM,CAAC,cAAc,CAAC,CAAC,KAAK,CAAC,CAAA,8BAAA,EAAiC,MAAM,CAAA,CAAA,CAAG,EAAE,KAAK,CAAC;AAC/E,gBAAA,OAAO,KAAK;YACd;oBAAU;AACR,gBAAA,IAAI,CAAC,cAAc,CAAC,MAAM,CAAC,MAAM,CAAC;gBAClC,MAAM,CAAC,cAAc,CAAC,CAAC,KAAK,CAAC,CAAA,4BAAA,EAA+B,MAAM,CAAA,CAAE,CAAC;YACvE;QACF;AACA,QAAA,OAAO,KAAK;IACd;AAEA;;;AAGG;IACH,aAAa,OAAO,GAAA;AAClB,QAAA,MAAM,SAAS,GAAG,IAAI,CAAC,cAAc,CAAC,IAAI;AAC1C,QAAA,IAAI,SAAS,KAAK,CAAC,EAAE;YACnB,MAAM,CAAC,cAAc,CAAC,CAAC,KAAK,CAAC,4BAA4B,CAAC;YAC1D;QACF;QAEA,MAAM,CAAC,cAAc,CAAC,CAAC,IAAI,CAAC,CAAA,SAAA,EAAY,SAAS,CAAA,qBAAA,CAAuB,CAAC;QAEzE,KAAK,MAAM,CAAC,MAAM,EAAE,IAAI,CAAC,IAAI,IAAI,CAAC,cAAc,EAAE;AAChD,YAAA,IAAI;AACF,gBAAA,MAAM,IAAI,CAAC,IAAI,EAAE;gBACjB,MAAM,CAAC,cAAc,CAAC,CAAC,KAAK,CAAC,CAAA,uBAAA,EAA0B,MAAM,CAAA,CAAE,CAAC;YAClE;YAAE,OAAO,KAAK,EAAE;AACd,gBAAA,MAAM,CAAC,cAAc,CAAC,CAAC,KAAK,CAAC,CAAA,8BAAA,EAAiC,MAAM,CAAA,CAAA,CAAG,EAAE,KAAK,CAAC;YACjF;QACF;AAEA,QAAA,IAAI,CAAC,cAAc,CAAC,KAAK,EAAE;QAC3B,MAAM,CAAC,cAAc,CAAC,CAAC,IAAI,CAAC,kDAAkD,CAAC;IACjF;AAEA;;;AAGG;AACH,IAAA,OAAO,YAAY,GAAA;AACjB,QAAA,OAAO,IAAI,CAAC,cAAc,CAAC,IAAI;IACjC;AAEA;;;;AAIG;IACH,OAAO,OAAO,CAAC,MAAc,EAAA;QAC3B,OAAO,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,MAAM,CAAC;IACxC;;;;;"}
|
package/dist/job/job-builder.cjs
CHANGED
|
@@ -7,6 +7,7 @@ var manualLoader = require('../shared-runner/manual-loader.cjs');
|
|
|
7
7
|
require('piscina');
|
|
8
8
|
require('../constants.cjs');
|
|
9
9
|
var constants = require('./constants.cjs');
|
|
10
|
+
var cronRegistry = require('./cron-registry.cjs');
|
|
10
11
|
|
|
11
12
|
/**
|
|
12
13
|
* Builder for creating and enqueuing jobs with custom configuration.
|
|
@@ -176,10 +177,11 @@ class JobBuilder {
|
|
|
176
177
|
* @remarks
|
|
177
178
|
* - The schedule is **not persisted** to any database. It will be lost if the process restarts and must be re-registered at startup.
|
|
178
179
|
* - You must call this method during application initialization to ensure the job is scheduled correctly.
|
|
179
|
-
* - Uses node-cron
|
|
180
|
+
* - Uses node-cron's `noOverlap: true` option to prevent concurrent executions.
|
|
181
|
+
* - The scheduled task is registered with the CronRegistry for proper cleanup during shutdown.
|
|
180
182
|
*
|
|
181
183
|
* @param cronExpression - A valid cron expression (node-cron compatible) that defines when the job should be enqueued.
|
|
182
|
-
* @param args - Arguments to be passed to the job
|
|
184
|
+
* @param args - Arguments to be passed to the job's `run` method on each scheduled execution.
|
|
183
185
|
*
|
|
184
186
|
* @returns The underlying `ScheduledTask` instance created by node-cron.
|
|
185
187
|
*
|
|
@@ -198,11 +200,14 @@ class JobBuilder {
|
|
|
198
200
|
Object.freeze(jobData);
|
|
199
201
|
core.logger("JobBuilder").debug(`Scheduling job ${jobData.class} with cron: "${cronExpression}", args: ${node_util.inspect(args)}, ` +
|
|
200
202
|
`constructor args: ${node_util.inspect(this.constructorArgs)}`);
|
|
201
|
-
|
|
203
|
+
const scheduledTask = nodeCron.schedule(cronExpression, async () => {
|
|
202
204
|
const newJobData = Object.assign({}, jobData);
|
|
203
205
|
core.logger("JobBuilder").debug(`Cron triggered for job ${newJobData.class} at ${newJobData.available_at.toISOString()} with args: ${node_util.inspect(args)}`);
|
|
204
206
|
return this.backend.createNewJob(jobData);
|
|
205
207
|
}, { noOverlap: true });
|
|
208
|
+
// Register the scheduled task with the ScheduledJobRegistry for proper later cleanup
|
|
209
|
+
cronRegistry.ScheduledJobRegistry.register(scheduledTask);
|
|
210
|
+
return scheduledTask;
|
|
206
211
|
}
|
|
207
212
|
}
|
|
208
213
|
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"job-builder.cjs","sources":["../../src/job/job-builder.ts"],"sourcesContent":[null],"names":["JOB_BUILDER_FALLBACK","MANUAL_SCRIPT_TAG","UniquenessFactory","logger","inspect"],"mappings":"
|
|
1
|
+
{"version":3,"file":"job-builder.cjs","sources":["../../src/job/job-builder.ts"],"sourcesContent":[null],"names":["JOB_BUILDER_FALLBACK","MANUAL_SCRIPT_TAG","UniquenessFactory","logger","inspect","ScheduledJobRegistry"],"mappings":"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"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { Backend } from '@sidequest/backend';
|
|
2
|
-
import { TimePeriod, JobClassType, JobData } from '@sidequest/core';
|
|
1
|
+
import { Backend, NewJobData } from '@sidequest/backend';
|
|
2
|
+
import { TimePeriod, JobClassType, UniquenessConfig, JobData } from '@sidequest/core';
|
|
3
3
|
import { ScheduledTask } from 'node-cron';
|
|
4
4
|
|
|
5
5
|
/**
|
|
@@ -48,16 +48,16 @@ interface JobBuilderDefaults {
|
|
|
48
48
|
* @template T The job class type.
|
|
49
49
|
*/
|
|
50
50
|
declare class JobBuilder<T extends JobClassType> {
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
51
|
+
protected backend: Backend;
|
|
52
|
+
protected JobClass: T;
|
|
53
|
+
protected defaults?: JobBuilderDefaults | undefined;
|
|
54
|
+
protected manualJobResolution: boolean;
|
|
55
|
+
protected constructorArgs?: ConstructorParameters<T>;
|
|
56
|
+
protected queueName?: string;
|
|
57
|
+
protected jobTimeout?: number;
|
|
58
|
+
protected uniquenessConfig?: UniquenessConfig;
|
|
59
|
+
protected jobMaxAttempts?: number;
|
|
60
|
+
protected jobAvailableAt?: Date;
|
|
61
61
|
/**
|
|
62
62
|
* Creates a new JobBuilder for the given job class.
|
|
63
63
|
* @param JobClass The job class constructor.
|
|
@@ -104,7 +104,7 @@ declare class JobBuilder<T extends JobClassType> {
|
|
|
104
104
|
* @returns This builder instance.
|
|
105
105
|
*/
|
|
106
106
|
availableAt(value: Date): this;
|
|
107
|
-
|
|
107
|
+
protected build(...args: Parameters<InstanceType<T>["run"]>): Promise<NewJobData>;
|
|
108
108
|
/**
|
|
109
109
|
* Enqueues the job with the specified arguments.
|
|
110
110
|
* @param args Arguments to pass to the job's run method.
|
|
@@ -120,10 +120,11 @@ declare class JobBuilder<T extends JobClassType> {
|
|
|
120
120
|
* @remarks
|
|
121
121
|
* - The schedule is **not persisted** to any database. It will be lost if the process restarts and must be re-registered at startup.
|
|
122
122
|
* - You must call this method during application initialization to ensure the job is scheduled correctly.
|
|
123
|
-
* - Uses node-cron
|
|
123
|
+
* - Uses node-cron's `noOverlap: true` option to prevent concurrent executions.
|
|
124
|
+
* - The scheduled task is registered with the CronRegistry for proper cleanup during shutdown.
|
|
124
125
|
*
|
|
125
126
|
* @param cronExpression - A valid cron expression (node-cron compatible) that defines when the job should be enqueued.
|
|
126
|
-
* @param args - Arguments to be passed to the job
|
|
127
|
+
* @param args - Arguments to be passed to the job's `run` method on each scheduled execution.
|
|
127
128
|
*
|
|
128
129
|
* @returns The underlying `ScheduledTask` instance created by node-cron.
|
|
129
130
|
*
|
package/dist/job/job-builder.js
CHANGED
|
@@ -5,6 +5,7 @@ import { MANUAL_SCRIPT_TAG } from '../shared-runner/manual-loader.js';
|
|
|
5
5
|
import 'piscina';
|
|
6
6
|
import '../constants.js';
|
|
7
7
|
import { JOB_BUILDER_FALLBACK } from './constants.js';
|
|
8
|
+
import { ScheduledJobRegistry } from './cron-registry.js';
|
|
8
9
|
|
|
9
10
|
/**
|
|
10
11
|
* Builder for creating and enqueuing jobs with custom configuration.
|
|
@@ -174,10 +175,11 @@ class JobBuilder {
|
|
|
174
175
|
* @remarks
|
|
175
176
|
* - The schedule is **not persisted** to any database. It will be lost if the process restarts and must be re-registered at startup.
|
|
176
177
|
* - You must call this method during application initialization to ensure the job is scheduled correctly.
|
|
177
|
-
* - Uses node-cron
|
|
178
|
+
* - Uses node-cron's `noOverlap: true` option to prevent concurrent executions.
|
|
179
|
+
* - The scheduled task is registered with the CronRegistry for proper cleanup during shutdown.
|
|
178
180
|
*
|
|
179
181
|
* @param cronExpression - A valid cron expression (node-cron compatible) that defines when the job should be enqueued.
|
|
180
|
-
* @param args - Arguments to be passed to the job
|
|
182
|
+
* @param args - Arguments to be passed to the job's `run` method on each scheduled execution.
|
|
181
183
|
*
|
|
182
184
|
* @returns The underlying `ScheduledTask` instance created by node-cron.
|
|
183
185
|
*
|
|
@@ -196,11 +198,14 @@ class JobBuilder {
|
|
|
196
198
|
Object.freeze(jobData);
|
|
197
199
|
logger("JobBuilder").debug(`Scheduling job ${jobData.class} with cron: "${cronExpression}", args: ${inspect(args)}, ` +
|
|
198
200
|
`constructor args: ${inspect(this.constructorArgs)}`);
|
|
199
|
-
|
|
201
|
+
const scheduledTask = nodeCron.schedule(cronExpression, async () => {
|
|
200
202
|
const newJobData = Object.assign({}, jobData);
|
|
201
203
|
logger("JobBuilder").debug(`Cron triggered for job ${newJobData.class} at ${newJobData.available_at.toISOString()} with args: ${inspect(args)}`);
|
|
202
204
|
return this.backend.createNewJob(jobData);
|
|
203
205
|
}, { noOverlap: true });
|
|
206
|
+
// Register the scheduled task with the ScheduledJobRegistry for proper later cleanup
|
|
207
|
+
ScheduledJobRegistry.register(scheduledTask);
|
|
208
|
+
return scheduledTask;
|
|
204
209
|
}
|
|
205
210
|
}
|
|
206
211
|
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"job-builder.js","sources":["../../src/job/job-builder.ts"],"sourcesContent":[null],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"job-builder.js","sources":["../../src/job/job-builder.ts"],"sourcesContent":[null],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@sidequest/engine",
|
|
3
|
-
"version": "1.7.
|
|
3
|
+
"version": "1.7.1",
|
|
4
4
|
"description": "@sidequest/engine is the core engine of SideQuest, a distributed background job processing system for Node.js and TypeScript.",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"nodejs",
|
|
@@ -42,12 +42,12 @@
|
|
|
42
42
|
},
|
|
43
43
|
"license": "LGPL-3.0-or-later",
|
|
44
44
|
"dependencies": {
|
|
45
|
-
"@sidequest/backend": "1.7.
|
|
46
|
-
"@sidequest/core": "1.7.
|
|
47
|
-
"node-cron": "^4.
|
|
48
|
-
"piscina": "^5.1.
|
|
45
|
+
"@sidequest/backend": "1.7.1",
|
|
46
|
+
"@sidequest/core": "1.7.1",
|
|
47
|
+
"node-cron": "^4.2.1",
|
|
48
|
+
"piscina": "^5.1.3"
|
|
49
49
|
},
|
|
50
50
|
"peerDependencies": {
|
|
51
|
-
"sidequest": "1.7.
|
|
51
|
+
"sidequest": "1.7.1"
|
|
52
52
|
}
|
|
53
53
|
}
|