@sidequest/engine 1.0.0-next.6 → 1.0.0
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/README.md +65 -0
- package/dist/engine.cjs +27 -11
- package/dist/engine.cjs.map +1 -1
- package/dist/engine.d.ts +3 -2
- package/dist/engine.js +28 -12
- package/dist/engine.js.map +1 -1
- package/dist/execution/executor-manager.cjs +23 -19
- package/dist/execution/executor-manager.cjs.map +1 -1
- package/dist/execution/executor-manager.d.ts +4 -7
- package/dist/execution/executor-manager.js +24 -20
- package/dist/execution/executor-manager.js.map +1 -1
- package/dist/execution/queue-manager.cjs +5 -2
- package/dist/execution/queue-manager.cjs.map +1 -1
- package/dist/execution/queue-manager.d.ts +4 -1
- package/dist/execution/queue-manager.js +5 -2
- package/dist/execution/queue-manager.js.map +1 -1
- package/dist/index.cjs +2 -2
- package/dist/index.d.ts +1 -1
- package/dist/index.js +1 -1
- package/dist/job/job-builder.cjs +51 -9
- package/dist/job/job-builder.cjs.map +1 -1
- package/dist/job/job-builder.d.ts +22 -2
- package/dist/job/job-builder.js +52 -10
- package/dist/job/job-builder.js.map +1 -1
- package/dist/job/job-transitioner.cjs +1 -1
- package/dist/job/job-transitioner.cjs.map +1 -1
- package/dist/job/job-transitioner.js +1 -1
- package/dist/job/job-transitioner.js.map +1 -1
- package/dist/queue/grant-queue-config.cjs +4 -2
- package/dist/queue/grant-queue-config.cjs.map +1 -1
- package/dist/queue/grant-queue-config.d.ts +3 -1
- package/dist/queue/grant-queue-config.js +4 -2
- package/dist/queue/grant-queue-config.js.map +1 -1
- package/dist/shared-runner/runner-pool.cjs +9 -6
- package/dist/shared-runner/runner-pool.cjs.map +1 -1
- package/dist/shared-runner/runner-pool.d.ts +4 -2
- package/dist/shared-runner/runner-pool.js +9 -6
- package/dist/shared-runner/runner-pool.js.map +1 -1
- package/dist/shared-runner/runner.cjs +30 -2
- package/dist/shared-runner/runner.cjs.map +1 -1
- package/dist/shared-runner/runner.d.ts +20 -3
- package/dist/shared-runner/runner.js +30 -3
- package/dist/shared-runner/runner.js.map +1 -1
- package/dist/utils/import.cjs +13 -0
- package/dist/utils/import.cjs.map +1 -0
- package/dist/utils/import.d.ts +15 -0
- package/dist/utils/import.js +11 -0
- package/dist/utils/import.js.map +1 -0
- package/dist/workers/main.cjs +4 -4
- package/dist/workers/main.cjs.map +1 -1
- package/dist/workers/main.js +4 -4
- package/dist/workers/main.js.map +1 -1
- package/package.json +7 -5
- package/dist/job/job.cjs +0 -250
- package/dist/job/job.cjs.map +0 -1
- package/dist/job/job.d.ts +0 -178
- package/dist/job/job.js +0 -248
- package/dist/job/job.js.map +0 -1
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { Backend, NewQueueData } from '@sidequest/backend';
|
|
2
2
|
import { QueueConfig } from '@sidequest/core';
|
|
3
|
+
import { QueueDefaults } from '../queue/grant-queue-config.js';
|
|
3
4
|
|
|
4
5
|
/**
|
|
5
6
|
* Manages queue configurations and retrieves active queues with runnable jobs.
|
|
@@ -7,12 +8,14 @@ import { QueueConfig } from '@sidequest/core';
|
|
|
7
8
|
declare class QueueManager {
|
|
8
9
|
private backend;
|
|
9
10
|
private queues;
|
|
11
|
+
private defaults?;
|
|
10
12
|
/**
|
|
11
13
|
* Creates a new QueueManager.
|
|
12
14
|
* @param backend The backend instance.
|
|
13
15
|
* @param queues The queue configurations to manage.
|
|
16
|
+
* @param defaults Optional default queue settings.
|
|
14
17
|
*/
|
|
15
|
-
constructor(backend: Backend, queues: NewQueueData[]);
|
|
18
|
+
constructor(backend: Backend, queues: NewQueueData[], defaults?: QueueDefaults | undefined);
|
|
16
19
|
/**
|
|
17
20
|
* Gets all active queues that have runnable jobs, sorted by priority.
|
|
18
21
|
* @returns A promise resolving to an array of active queue configs.
|
|
@@ -6,14 +6,17 @@ import { grantQueueConfig } from '../queue/grant-queue-config.js';
|
|
|
6
6
|
class QueueManager {
|
|
7
7
|
backend;
|
|
8
8
|
queues;
|
|
9
|
+
defaults;
|
|
9
10
|
/**
|
|
10
11
|
* Creates a new QueueManager.
|
|
11
12
|
* @param backend The backend instance.
|
|
12
13
|
* @param queues The queue configurations to manage.
|
|
14
|
+
* @param defaults Optional default queue settings.
|
|
13
15
|
*/
|
|
14
|
-
constructor(backend, queues) {
|
|
16
|
+
constructor(backend, queues, defaults) {
|
|
15
17
|
this.backend = backend;
|
|
16
18
|
this.queues = queues;
|
|
19
|
+
this.defaults = defaults;
|
|
17
20
|
}
|
|
18
21
|
/**
|
|
19
22
|
* Gets all active queues that have runnable jobs, sorted by priority.
|
|
@@ -24,7 +27,7 @@ class QueueManager {
|
|
|
24
27
|
const queues = [];
|
|
25
28
|
for (const queue of queueNames) {
|
|
26
29
|
const fromConfig = this.queues.find((q) => q.name === queue);
|
|
27
|
-
const queueConfig = await grantQueueConfig(this.backend, { ...fromConfig, name: queue });
|
|
30
|
+
const queueConfig = await grantQueueConfig(this.backend, { ...fromConfig, name: queue }, this.defaults, false);
|
|
28
31
|
if (queueConfig) {
|
|
29
32
|
queues.push(queueConfig);
|
|
30
33
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"queue-manager.js","sources":["../../src/execution/queue-manager.ts"],"sourcesContent":[null],"names":[],"mappings":";;AAIA;;AAEG;MACU,YAAY,CAAA;
|
|
1
|
+
{"version":3,"file":"queue-manager.js","sources":["../../src/execution/queue-manager.ts"],"sourcesContent":[null],"names":[],"mappings":";;AAIA;;AAEG;MACU,YAAY,CAAA;AAQb,IAAA,OAAA;AACA,IAAA,MAAA;AACA,IAAA,QAAA;AATV;;;;;AAKG;AACH,IAAA,WAAA,CACU,OAAgB,EAChB,MAAsB,EACtB,QAAwB,EAAA;QAFxB,IAAA,CAAA,OAAO,GAAP,OAAO;QACP,IAAA,CAAA,MAAM,GAAN,MAAM;QACN,IAAA,CAAA,QAAQ,GAAR,QAAQ;IACf;AAEH;;;AAGG;AACH,IAAA,MAAM,+BAA+B,GAAA;QACnC,MAAM,UAAU,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,iBAAiB,EAAE;QAEzD,MAAM,MAAM,GAAkB,EAAE;AAChC,QAAA,KAAK,MAAM,KAAK,IAAI,UAAU,EAAE;AAC9B,YAAA,MAAM,UAAU,GAAG,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,IAAI,KAAK,KAAK,CAAC;YAC5D,MAAM,WAAW,GAAG,MAAM,gBAAgB,CAAC,IAAI,CAAC,OAAO,EAAE,EAAE,GAAG,UAAU,EAAE,IAAI,EAAE,KAAK,EAAE,EAAE,IAAI,CAAC,QAAQ,EAAE,KAAK,CAAC;YAC9G,IAAI,WAAW,EAAE;AACf,gBAAA,MAAM,CAAC,IAAI,CAAC,WAAW,CAAC;YAC1B;QACF;AAEA,QAAA,OAAO;aACJ,MAAM,CAAC,CAAC,KAAK,KAAK,KAAK,CAAC,KAAK,KAAK,QAAQ;AAC1C,aAAA,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,KAAI;AACb,YAAA,OAAO,CAAC,CAAC,CAAC,QAAQ,IAAI,CAAC,KAAK,CAAC,CAAC,QAAQ,IAAI,CAAC,CAAC;AAC9C,QAAA,CAAC,CAAC;IACN;AACD;;;;"}
|
package/dist/index.cjs
CHANGED
|
@@ -5,7 +5,6 @@ var dispatcher = require('./execution/dispatcher.cjs');
|
|
|
5
5
|
var executorManager = require('./execution/executor-manager.cjs');
|
|
6
6
|
var queueManager = require('./execution/queue-manager.cjs');
|
|
7
7
|
var constants = require('./job/constants.cjs');
|
|
8
|
-
var job = require('./job/job.cjs');
|
|
9
8
|
var jobBuilder = require('./job/job-builder.cjs');
|
|
10
9
|
var jobTransitioner = require('./job/job-transitioner.cjs');
|
|
11
10
|
var grantQueueConfig = require('./queue/grant-queue-config.cjs');
|
|
@@ -13,6 +12,7 @@ var cleanupFinishedJob = require('./routines/cleanup-finished-job.cjs');
|
|
|
13
12
|
var releaseStaleJobs = require('./routines/release-stale-jobs.cjs');
|
|
14
13
|
var runner = require('./shared-runner/runner.cjs');
|
|
15
14
|
var runnerPool = require('./shared-runner/runner-pool.cjs');
|
|
15
|
+
var _import = require('./utils/import.cjs');
|
|
16
16
|
var shutdown = require('./utils/shutdown.cjs');
|
|
17
17
|
var main = require('./workers/main.cjs');
|
|
18
18
|
|
|
@@ -23,7 +23,6 @@ exports.Dispatcher = dispatcher.Dispatcher;
|
|
|
23
23
|
exports.ExecutorManager = executorManager.ExecutorManager;
|
|
24
24
|
exports.QueueManager = queueManager.QueueManager;
|
|
25
25
|
exports.JOB_BUILDER_FALLBACK = constants.JOB_BUILDER_FALLBACK;
|
|
26
|
-
exports.Job = job.Job;
|
|
27
26
|
exports.JobBuilder = jobBuilder.JobBuilder;
|
|
28
27
|
exports.JobTransitioner = jobTransitioner.JobTransitioner;
|
|
29
28
|
exports.differentQueueConfig = grantQueueConfig.differentQueueConfig;
|
|
@@ -32,6 +31,7 @@ exports.cleanupFinishedJobs = cleanupFinishedJob.cleanupFinishedJobs;
|
|
|
32
31
|
exports.releaseStaleJobs = releaseStaleJobs.releaseStaleJobs;
|
|
33
32
|
exports.run = runner;
|
|
34
33
|
exports.RunnerPool = runnerPool.RunnerPool;
|
|
34
|
+
exports.importSidequest = _import.importSidequest;
|
|
35
35
|
exports.clearGracefulShutdown = shutdown.clearGracefulShutdown;
|
|
36
36
|
exports.gracefulShutdown = shutdown.gracefulShutdown;
|
|
37
37
|
exports.MainWorker = main.MainWorker;
|
package/dist/index.d.ts
CHANGED
|
@@ -3,7 +3,6 @@ export { Dispatcher } from './execution/dispatcher.js';
|
|
|
3
3
|
export { ExecutorManager } from './execution/executor-manager.js';
|
|
4
4
|
export { QueueManager } from './execution/queue-manager.js';
|
|
5
5
|
export { JOB_BUILDER_FALLBACK } from './job/constants.js';
|
|
6
|
-
export { Job, JobClassType } from './job/job.js';
|
|
7
6
|
export { JobBuilder, JobBuilderDefaults, UniquenessInput } from './job/job-builder.js';
|
|
8
7
|
export { JobTransitioner } from './job/job-transitioner.js';
|
|
9
8
|
export { QueueDefaults, differentQueueConfig, grantQueueConfig } from './queue/grant-queue-config.js';
|
|
@@ -12,5 +11,6 @@ export { releaseStaleJobs } from './routines/release-stale-jobs.js';
|
|
|
12
11
|
import * as runner from './shared-runner/runner.js';
|
|
13
12
|
export { runner as run };
|
|
14
13
|
export { RunnerPool } from './shared-runner/runner-pool.js';
|
|
14
|
+
export { importSidequest } from './utils/import.js';
|
|
15
15
|
export { clearGracefulShutdown, gracefulShutdown } from './utils/shutdown.js';
|
|
16
16
|
export { MainWorker } from './workers/main.js';
|
package/dist/index.js
CHANGED
|
@@ -3,7 +3,6 @@ export { Dispatcher } from './execution/dispatcher.js';
|
|
|
3
3
|
export { ExecutorManager } from './execution/executor-manager.js';
|
|
4
4
|
export { QueueManager } from './execution/queue-manager.js';
|
|
5
5
|
export { JOB_BUILDER_FALLBACK } from './job/constants.js';
|
|
6
|
-
export { Job } from './job/job.js';
|
|
7
6
|
export { JobBuilder } from './job/job-builder.js';
|
|
8
7
|
export { JobTransitioner } from './job/job-transitioner.js';
|
|
9
8
|
export { differentQueueConfig, grantQueueConfig } from './queue/grant-queue-config.js';
|
|
@@ -12,6 +11,7 @@ export { releaseStaleJobs } from './routines/release-stale-jobs.js';
|
|
|
12
11
|
import * as runner from './shared-runner/runner.js';
|
|
13
12
|
export { runner as run };
|
|
14
13
|
export { RunnerPool } from './shared-runner/runner-pool.js';
|
|
14
|
+
export { importSidequest } from './utils/import.js';
|
|
15
15
|
export { clearGracefulShutdown, gracefulShutdown } from './utils/shutdown.js';
|
|
16
16
|
export { MainWorker } from './workers/main.js';
|
|
17
17
|
//# sourceMappingURL=index.js.map
|
package/dist/job/job-builder.cjs
CHANGED
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
'use strict';
|
|
2
2
|
|
|
3
3
|
var core = require('@sidequest/core');
|
|
4
|
+
var nodeCron = require('node-cron');
|
|
4
5
|
var constants = require('./constants.cjs');
|
|
5
6
|
|
|
6
7
|
/**
|
|
@@ -114,12 +115,7 @@ class JobBuilder {
|
|
|
114
115
|
this.jobAvailableAt = value;
|
|
115
116
|
return this;
|
|
116
117
|
}
|
|
117
|
-
|
|
118
|
-
* Enqueues the job with the specified arguments.
|
|
119
|
-
* @param args Arguments to pass to the job's run method.
|
|
120
|
-
* @returns A promise resolving to the created job data.
|
|
121
|
-
*/
|
|
122
|
-
async enqueue(...args) {
|
|
118
|
+
async build(...args) {
|
|
123
119
|
const job = new this.JobClass(...this.constructorArgs);
|
|
124
120
|
await job.ready();
|
|
125
121
|
if (!job.script) {
|
|
@@ -138,15 +134,61 @@ class JobBuilder {
|
|
|
138
134
|
timeout: this.jobTimeout,
|
|
139
135
|
uniqueness_config: this.uniquenessConfig,
|
|
140
136
|
};
|
|
141
|
-
core.logger("JobBuilder").debug(`Enqueuing job ${job.className} with args: ${JSON.stringify(args)}
|
|
142
|
-
and constructor args: ${JSON.stringify(this.constructorArgs)}`);
|
|
143
137
|
if (this.uniquenessConfig) {
|
|
144
138
|
const uniqueness = core.UniquenessFactory.create(this.uniquenessConfig);
|
|
145
139
|
jobData.unique_digest = uniqueness.digest(jobData);
|
|
146
|
-
core.logger("JobBuilder").debug(`Job ${
|
|
140
|
+
core.logger("JobBuilder").debug(`Job ${jobData.class} uniqueness digest: ${jobData.unique_digest}`);
|
|
147
141
|
}
|
|
142
|
+
return jobData;
|
|
143
|
+
}
|
|
144
|
+
/**
|
|
145
|
+
* Enqueues the job with the specified arguments.
|
|
146
|
+
* @param args Arguments to pass to the job's run method.
|
|
147
|
+
* @returns A promise resolving to the created job data.
|
|
148
|
+
*/
|
|
149
|
+
async enqueue(...args) {
|
|
150
|
+
const jobData = await this.build(...args);
|
|
151
|
+
core.logger("JobBuilder").debug(`Enqueuing job ${jobData.class} with args: ${JSON.stringify(args)}
|
|
152
|
+
and constructor args: ${JSON.stringify(this.constructorArgs)}`);
|
|
148
153
|
return this.backend.createNewJob(jobData);
|
|
149
154
|
}
|
|
155
|
+
/**
|
|
156
|
+
* Registers a recurring schedule to enqueue the job automatically based on a cron expression.
|
|
157
|
+
*
|
|
158
|
+
* This sets up an in-memory schedule that enqueues the job with the provided arguments
|
|
159
|
+
* every time the cron expression is triggered.
|
|
160
|
+
*
|
|
161
|
+
* @remarks
|
|
162
|
+
* - The schedule is **not persisted** to any database. It will be lost if the process restarts and must be re-registered at startup.
|
|
163
|
+
* - You must call this method during application initialization to ensure the job is scheduled correctly.
|
|
164
|
+
* - Uses node-cron’s `noOverlap: true` option to prevent concurrent executions.
|
|
165
|
+
*
|
|
166
|
+
* @param cronExpression - A valid cron expression (node-cron compatible) that defines when the job should be enqueued.
|
|
167
|
+
* @param args - Arguments to be passed to the job’s `run` method on each scheduled execution.
|
|
168
|
+
*
|
|
169
|
+
* @returns The underlying `ScheduledTask` instance created by node-cron.
|
|
170
|
+
*
|
|
171
|
+
* @throws {Error} If the cron expression is invalid.
|
|
172
|
+
*/
|
|
173
|
+
async schedule(cronExpression, ...args) {
|
|
174
|
+
if (!nodeCron.validate(cronExpression)) {
|
|
175
|
+
throw new Error(`Invalid cron expression ${cronExpression}`);
|
|
176
|
+
}
|
|
177
|
+
// Build the job data using the provided arguments,
|
|
178
|
+
// this ensures the scheduled state is going to be respected in cases where the builder was reused.
|
|
179
|
+
// Includes class name, queue, timeout, uniqueness, etc.
|
|
180
|
+
const jobData = await this.build(...args);
|
|
181
|
+
// Freeze the job data to prevent future modifications.
|
|
182
|
+
// Ensures the same payload is used on every scheduled execution.
|
|
183
|
+
Object.freeze(jobData);
|
|
184
|
+
core.logger("JobBuilder").debug(`Scheduling job ${jobData.class} with cron: "${cronExpression}", args: ${JSON.stringify(args)}, ` +
|
|
185
|
+
`constructor args: ${JSON.stringify(this.constructorArgs)}`);
|
|
186
|
+
return nodeCron.schedule(cronExpression, async () => {
|
|
187
|
+
const newJobData = Object.assign({}, jobData);
|
|
188
|
+
core.logger("JobBuilder").debug(`Cron triggered for job ${newJobData.class} at ${newJobData.available_at.toISOString()} with args: ${JSON.stringify(args)}`);
|
|
189
|
+
return this.backend.createNewJob(jobData);
|
|
190
|
+
}, { noOverlap: true });
|
|
191
|
+
}
|
|
150
192
|
}
|
|
151
193
|
|
|
152
194
|
exports.JobBuilder = JobBuilder;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"job-builder.cjs","sources":["../../src/job/job-builder.ts"],"sourcesContent":[null],"names":["JOB_BUILDER_FALLBACK","
|
|
1
|
+
{"version":3,"file":"job-builder.cjs","sources":["../../src/job/job-builder.ts"],"sourcesContent":[null],"names":["JOB_BUILDER_FALLBACK","UniquenessFactory","logger"],"mappings":"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"}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { Backend } from '@sidequest/backend';
|
|
2
|
-
import { TimePeriod, JobData } from '@sidequest/core';
|
|
3
|
-
import {
|
|
2
|
+
import { TimePeriod, JobClassType, JobData } from '@sidequest/core';
|
|
3
|
+
import { ScheduledTask } from 'node-cron';
|
|
4
4
|
|
|
5
5
|
/**
|
|
6
6
|
* Configuration for job uniqueness constraints.
|
|
@@ -103,12 +103,32 @@ declare class JobBuilder<T extends JobClassType> {
|
|
|
103
103
|
* @returns This builder instance.
|
|
104
104
|
*/
|
|
105
105
|
availableAt(value: Date): this;
|
|
106
|
+
private build;
|
|
106
107
|
/**
|
|
107
108
|
* Enqueues the job with the specified arguments.
|
|
108
109
|
* @param args Arguments to pass to the job's run method.
|
|
109
110
|
* @returns A promise resolving to the created job data.
|
|
110
111
|
*/
|
|
111
112
|
enqueue(...args: Parameters<InstanceType<T>["run"]>): Promise<JobData>;
|
|
113
|
+
/**
|
|
114
|
+
* Registers a recurring schedule to enqueue the job automatically based on a cron expression.
|
|
115
|
+
*
|
|
116
|
+
* This sets up an in-memory schedule that enqueues the job with the provided arguments
|
|
117
|
+
* every time the cron expression is triggered.
|
|
118
|
+
*
|
|
119
|
+
* @remarks
|
|
120
|
+
* - The schedule is **not persisted** to any database. It will be lost if the process restarts and must be re-registered at startup.
|
|
121
|
+
* - You must call this method during application initialization to ensure the job is scheduled correctly.
|
|
122
|
+
* - Uses node-cron’s `noOverlap: true` option to prevent concurrent executions.
|
|
123
|
+
*
|
|
124
|
+
* @param cronExpression - A valid cron expression (node-cron compatible) that defines when the job should be enqueued.
|
|
125
|
+
* @param args - Arguments to be passed to the job’s `run` method on each scheduled execution.
|
|
126
|
+
*
|
|
127
|
+
* @returns The underlying `ScheduledTask` instance created by node-cron.
|
|
128
|
+
*
|
|
129
|
+
* @throws {Error} If the cron expression is invalid.
|
|
130
|
+
*/
|
|
131
|
+
schedule(cronExpression: string, ...args: Parameters<InstanceType<T>["run"]>): Promise<ScheduledTask>;
|
|
112
132
|
}
|
|
113
133
|
|
|
114
134
|
export { JobBuilder };
|
package/dist/job/job-builder.js
CHANGED
|
@@ -1,4 +1,5 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { UniquenessFactory, logger } from '@sidequest/core';
|
|
2
|
+
import nodeCron from 'node-cron';
|
|
2
3
|
import { JOB_BUILDER_FALLBACK } from './constants.js';
|
|
3
4
|
|
|
4
5
|
/**
|
|
@@ -112,12 +113,7 @@ class JobBuilder {
|
|
|
112
113
|
this.jobAvailableAt = value;
|
|
113
114
|
return this;
|
|
114
115
|
}
|
|
115
|
-
|
|
116
|
-
* Enqueues the job with the specified arguments.
|
|
117
|
-
* @param args Arguments to pass to the job's run method.
|
|
118
|
-
* @returns A promise resolving to the created job data.
|
|
119
|
-
*/
|
|
120
|
-
async enqueue(...args) {
|
|
116
|
+
async build(...args) {
|
|
121
117
|
const job = new this.JobClass(...this.constructorArgs);
|
|
122
118
|
await job.ready();
|
|
123
119
|
if (!job.script) {
|
|
@@ -136,15 +132,61 @@ class JobBuilder {
|
|
|
136
132
|
timeout: this.jobTimeout,
|
|
137
133
|
uniqueness_config: this.uniquenessConfig,
|
|
138
134
|
};
|
|
139
|
-
logger("JobBuilder").debug(`Enqueuing job ${job.className} with args: ${JSON.stringify(args)}
|
|
140
|
-
and constructor args: ${JSON.stringify(this.constructorArgs)}`);
|
|
141
135
|
if (this.uniquenessConfig) {
|
|
142
136
|
const uniqueness = UniquenessFactory.create(this.uniquenessConfig);
|
|
143
137
|
jobData.unique_digest = uniqueness.digest(jobData);
|
|
144
|
-
logger("JobBuilder").debug(`Job ${
|
|
138
|
+
logger("JobBuilder").debug(`Job ${jobData.class} uniqueness digest: ${jobData.unique_digest}`);
|
|
145
139
|
}
|
|
140
|
+
return jobData;
|
|
141
|
+
}
|
|
142
|
+
/**
|
|
143
|
+
* Enqueues the job with the specified arguments.
|
|
144
|
+
* @param args Arguments to pass to the job's run method.
|
|
145
|
+
* @returns A promise resolving to the created job data.
|
|
146
|
+
*/
|
|
147
|
+
async enqueue(...args) {
|
|
148
|
+
const jobData = await this.build(...args);
|
|
149
|
+
logger("JobBuilder").debug(`Enqueuing job ${jobData.class} with args: ${JSON.stringify(args)}
|
|
150
|
+
and constructor args: ${JSON.stringify(this.constructorArgs)}`);
|
|
146
151
|
return this.backend.createNewJob(jobData);
|
|
147
152
|
}
|
|
153
|
+
/**
|
|
154
|
+
* Registers a recurring schedule to enqueue the job automatically based on a cron expression.
|
|
155
|
+
*
|
|
156
|
+
* This sets up an in-memory schedule that enqueues the job with the provided arguments
|
|
157
|
+
* every time the cron expression is triggered.
|
|
158
|
+
*
|
|
159
|
+
* @remarks
|
|
160
|
+
* - The schedule is **not persisted** to any database. It will be lost if the process restarts and must be re-registered at startup.
|
|
161
|
+
* - You must call this method during application initialization to ensure the job is scheduled correctly.
|
|
162
|
+
* - Uses node-cron’s `noOverlap: true` option to prevent concurrent executions.
|
|
163
|
+
*
|
|
164
|
+
* @param cronExpression - A valid cron expression (node-cron compatible) that defines when the job should be enqueued.
|
|
165
|
+
* @param args - Arguments to be passed to the job’s `run` method on each scheduled execution.
|
|
166
|
+
*
|
|
167
|
+
* @returns The underlying `ScheduledTask` instance created by node-cron.
|
|
168
|
+
*
|
|
169
|
+
* @throws {Error} If the cron expression is invalid.
|
|
170
|
+
*/
|
|
171
|
+
async schedule(cronExpression, ...args) {
|
|
172
|
+
if (!nodeCron.validate(cronExpression)) {
|
|
173
|
+
throw new Error(`Invalid cron expression ${cronExpression}`);
|
|
174
|
+
}
|
|
175
|
+
// Build the job data using the provided arguments,
|
|
176
|
+
// this ensures the scheduled state is going to be respected in cases where the builder was reused.
|
|
177
|
+
// Includes class name, queue, timeout, uniqueness, etc.
|
|
178
|
+
const jobData = await this.build(...args);
|
|
179
|
+
// Freeze the job data to prevent future modifications.
|
|
180
|
+
// Ensures the same payload is used on every scheduled execution.
|
|
181
|
+
Object.freeze(jobData);
|
|
182
|
+
logger("JobBuilder").debug(`Scheduling job ${jobData.class} with cron: "${cronExpression}", args: ${JSON.stringify(args)}, ` +
|
|
183
|
+
`constructor args: ${JSON.stringify(this.constructorArgs)}`);
|
|
184
|
+
return nodeCron.schedule(cronExpression, async () => {
|
|
185
|
+
const newJobData = Object.assign({}, jobData);
|
|
186
|
+
logger("JobBuilder").debug(`Cron triggered for job ${newJobData.class} at ${newJobData.available_at.toISOString()} with args: ${JSON.stringify(args)}`);
|
|
187
|
+
return this.backend.createNewJob(jobData);
|
|
188
|
+
}, { noOverlap: true });
|
|
189
|
+
}
|
|
148
190
|
}
|
|
149
191
|
|
|
150
192
|
export { JobBuilder };
|
|
@@ -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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"}
|
|
@@ -21,7 +21,7 @@ class JobTransitioner {
|
|
|
21
21
|
core.logger("JobTransitioner").debug(`Transition ${transition.constructor.name} not applicable for job ${jobData.id}. Returning original job data.`);
|
|
22
22
|
return jobData;
|
|
23
23
|
}
|
|
24
|
-
core.logger("JobTransitioner").
|
|
24
|
+
core.logger("JobTransitioner").debug(`Applying transition ${transition.constructor.name} to job ${jobData.id}`);
|
|
25
25
|
const newData = transition.apply(jobData);
|
|
26
26
|
if (newData.uniqueness_config) {
|
|
27
27
|
const uniqueness = core.UniquenessFactory.create(newData.uniqueness_config);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"job-transitioner.cjs","sources":["../../src/job/job-transitioner.ts"],"sourcesContent":[null],"names":["logger","UniquenessFactory"],"mappings":";;;;AAGA;;AAEG;MACU,eAAe,CAAA;AAC1B;;;;;;;;;AASG;AACH,IAAA,OAAO,KAAK,CAAC,OAAgB,EAAE,OAAgB,EAAE,UAAyB,EAAA;QACxE,IAAI,CAAC,UAAU,CAAC,SAAS,CAAC,OAAO,CAAC,EAAE;AAClC,YAAAA,WAAM,CAAC,iBAAiB,CAAC,CAAC,KAAK,CAC7B,cAAc,UAAU,CAAC,WAAW,CAAC,IAAI,CAAA,wBAAA,EAA2B,OAAO,CAAC,EAAE,CAAA,8BAAA,CAAgC,CAC/G;AACD,YAAA,OAAO,OAAO;QAChB;AAEA,QAAAA,WAAM,CAAC,iBAAiB,CAAC,CAAC,
|
|
1
|
+
{"version":3,"file":"job-transitioner.cjs","sources":["../../src/job/job-transitioner.ts"],"sourcesContent":[null],"names":["logger","UniquenessFactory"],"mappings":";;;;AAGA;;AAEG;MACU,eAAe,CAAA;AAC1B;;;;;;;;;AASG;AACH,IAAA,OAAO,KAAK,CAAC,OAAgB,EAAE,OAAgB,EAAE,UAAyB,EAAA;QACxE,IAAI,CAAC,UAAU,CAAC,SAAS,CAAC,OAAO,CAAC,EAAE;AAClC,YAAAA,WAAM,CAAC,iBAAiB,CAAC,CAAC,KAAK,CAC7B,cAAc,UAAU,CAAC,WAAW,CAAC,IAAI,CAAA,wBAAA,EAA2B,OAAO,CAAC,EAAE,CAAA,8BAAA,CAAgC,CAC/G;AACD,YAAA,OAAO,OAAO;QAChB;AAEA,QAAAA,WAAM,CAAC,iBAAiB,CAAC,CAAC,KAAK,CAAC,uBAAuB,UAAU,CAAC,WAAW,CAAC,IAAI,CAAA,QAAA,EAAW,OAAO,CAAC,EAAE,CAAA,CAAE,CAAC;QAC1G,MAAM,OAAO,GAAG,UAAU,CAAC,KAAK,CAAC,OAAO,CAAC;AACzC,QAAA,IAAI,OAAO,CAAC,iBAAiB,EAAE;YAC7B,MAAM,UAAU,GAAGC,sBAAiB,CAAC,MAAM,CAAC,OAAO,CAAC,iBAAiB,CAAC;YACtE,OAAO,CAAC,aAAa,GAAG,UAAU,CAAC,MAAM,CAAC,OAAO,CAAC;QACpD;AACA,QAAAD,WAAM,CAAC,iBAAiB,CAAC,CAAC,KAAK,CAAC,CAAA,4BAAA,EAA+B,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,CAAA,CAAE,CAAC;AACzF,QAAA,OAAO,OAAO,CAAC,SAAS,CAAC,OAAO,CAAC;IACnC;AACD;;;;"}
|
|
@@ -19,7 +19,7 @@ class JobTransitioner {
|
|
|
19
19
|
logger("JobTransitioner").debug(`Transition ${transition.constructor.name} not applicable for job ${jobData.id}. Returning original job data.`);
|
|
20
20
|
return jobData;
|
|
21
21
|
}
|
|
22
|
-
logger("JobTransitioner").
|
|
22
|
+
logger("JobTransitioner").debug(`Applying transition ${transition.constructor.name} to job ${jobData.id}`);
|
|
23
23
|
const newData = transition.apply(jobData);
|
|
24
24
|
if (newData.uniqueness_config) {
|
|
25
25
|
const uniqueness = UniquenessFactory.create(newData.uniqueness_config);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"job-transitioner.js","sources":["../../src/job/job-transitioner.ts"],"sourcesContent":[null],"names":[],"mappings":";;AAGA;;AAEG;MACU,eAAe,CAAA;AAC1B;;;;;;;;;AASG;AACH,IAAA,OAAO,KAAK,CAAC,OAAgB,EAAE,OAAgB,EAAE,UAAyB,EAAA;QACxE,IAAI,CAAC,UAAU,CAAC,SAAS,CAAC,OAAO,CAAC,EAAE;AAClC,YAAA,MAAM,CAAC,iBAAiB,CAAC,CAAC,KAAK,CAC7B,cAAc,UAAU,CAAC,WAAW,CAAC,IAAI,CAAA,wBAAA,EAA2B,OAAO,CAAC,EAAE,CAAA,8BAAA,CAAgC,CAC/G;AACD,YAAA,OAAO,OAAO;QAChB;AAEA,QAAA,MAAM,CAAC,iBAAiB,CAAC,CAAC,
|
|
1
|
+
{"version":3,"file":"job-transitioner.js","sources":["../../src/job/job-transitioner.ts"],"sourcesContent":[null],"names":[],"mappings":";;AAGA;;AAEG;MACU,eAAe,CAAA;AAC1B;;;;;;;;;AASG;AACH,IAAA,OAAO,KAAK,CAAC,OAAgB,EAAE,OAAgB,EAAE,UAAyB,EAAA;QACxE,IAAI,CAAC,UAAU,CAAC,SAAS,CAAC,OAAO,CAAC,EAAE;AAClC,YAAA,MAAM,CAAC,iBAAiB,CAAC,CAAC,KAAK,CAC7B,cAAc,UAAU,CAAC,WAAW,CAAC,IAAI,CAAA,wBAAA,EAA2B,OAAO,CAAC,EAAE,CAAA,8BAAA,CAAgC,CAC/G;AACD,YAAA,OAAO,OAAO;QAChB;AAEA,QAAA,MAAM,CAAC,iBAAiB,CAAC,CAAC,KAAK,CAAC,uBAAuB,UAAU,CAAC,WAAW,CAAC,IAAI,CAAA,QAAA,EAAW,OAAO,CAAC,EAAE,CAAA,CAAE,CAAC;QAC1G,MAAM,OAAO,GAAG,UAAU,CAAC,KAAK,CAAC,OAAO,CAAC;AACzC,QAAA,IAAI,OAAO,CAAC,iBAAiB,EAAE;YAC7B,MAAM,UAAU,GAAG,iBAAiB,CAAC,MAAM,CAAC,OAAO,CAAC,iBAAiB,CAAC;YACtE,OAAO,CAAC,aAAa,GAAG,UAAU,CAAC,MAAM,CAAC,OAAO,CAAC;QACpD;AACA,QAAA,MAAM,CAAC,iBAAiB,CAAC,CAAC,KAAK,CAAC,CAAA,4BAAA,EAA+B,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,CAAA,CAAE,CAAC;AACzF,QAAA,OAAO,OAAO,CAAC,SAAS,CAAC,OAAO,CAAC;IACnC;AACD;;;;"}
|
|
@@ -23,12 +23,14 @@ function differentQueueConfig(queue, queueConfig) {
|
|
|
23
23
|
* Ensures a queue configuration exists, creating it if necessary.
|
|
24
24
|
* @param queue The name of the queue.
|
|
25
25
|
* @param config Optional configuration for the new queue.
|
|
26
|
+
* @param defaults Optional default values for the queue.
|
|
27
|
+
* @param forceUpdate If true, updates the queue configuration even if it already exists.
|
|
26
28
|
* @returns The queue configuration.
|
|
27
29
|
*/
|
|
28
|
-
async function grantQueueConfig(backend, queue, defaults) {
|
|
30
|
+
async function grantQueueConfig(backend, queue, defaults, forceUpdate = false) {
|
|
29
31
|
const queueConfig = await backend?.getQueue(queue.name);
|
|
30
32
|
if (queueConfig) {
|
|
31
|
-
if (differentQueueConfig(queue, queueConfig)) {
|
|
33
|
+
if (forceUpdate && differentQueueConfig(queue, queueConfig)) {
|
|
32
34
|
core.logger("Engine").warn(`Queue config for ${queue.name} exists but differs from the provided configuration. Updating...`);
|
|
33
35
|
return await backend.updateQueue({ ...queueConfig, ...queue });
|
|
34
36
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"grant-queue-config.cjs","sources":["../../src/queue/grant-queue-config.ts"],"sourcesContent":[null],"names":["logger"],"mappings":";;;;AAUA;;;;;;;;;;;AAWG;AACG,SAAU,oBAAoB,CAAC,KAAmB,EAAE,WAAwB,EAAA;AAChF,IAAA,QACE,CAAC,CAAC,CAAC,KAAK,CAAC,WAAW,IAAI,KAAK,CAAC,WAAW,KAAK,WAAW,CAAC,WAAW;AACrE,SAAC,CAAC,CAAC,KAAK,CAAC,KAAK,IAAI,KAAK,CAAC,KAAK,KAAK,WAAW,CAAC,KAAK,CAAC;AACpD,SAAC,CAAC,CAAC,KAAK,CAAC,QAAQ,IAAI,KAAK,CAAC,QAAQ,KAAK,WAAW,CAAC,QAAQ,CAAC;AAEjE;AAEA
|
|
1
|
+
{"version":3,"file":"grant-queue-config.cjs","sources":["../../src/queue/grant-queue-config.ts"],"sourcesContent":[null],"names":["logger"],"mappings":";;;;AAUA;;;;;;;;;;;AAWG;AACG,SAAU,oBAAoB,CAAC,KAAmB,EAAE,WAAwB,EAAA;AAChF,IAAA,QACE,CAAC,CAAC,CAAC,KAAK,CAAC,WAAW,IAAI,KAAK,CAAC,WAAW,KAAK,WAAW,CAAC,WAAW;AACrE,SAAC,CAAC,CAAC,KAAK,CAAC,KAAK,IAAI,KAAK,CAAC,KAAK,KAAK,WAAW,CAAC,KAAK,CAAC;AACpD,SAAC,CAAC,CAAC,KAAK,CAAC,QAAQ,IAAI,KAAK,CAAC,QAAQ,KAAK,WAAW,CAAC,QAAQ,CAAC;AAEjE;AAEA;;;;;;;AAOG;AACI,eAAe,gBAAgB,CACpC,OAAgB,EAChB,KAAmB,EACnB,QAAwB,EACxB,WAAW,GAAG,KAAK,EAAA;IAEnB,MAAM,WAAW,GAAG,MAAM,OAAO,EAAE,QAAQ,CAAC,KAAK,CAAC,IAAI,CAAC;IACvD,IAAI,WAAW,EAAE;QACf,IAAI,WAAW,IAAI,oBAAoB,CAAC,KAAK,EAAE,WAAW,CAAC,EAAE;AAC3D,YAAAA,WAAM,CAAC,QAAQ,CAAC,CAAC,IAAI,CACnB,CAAA,iBAAA,EAAoB,KAAK,CAAC,IAAI,CAAA,gEAAA,CAAkE,CACjG;AACD,YAAA,OAAO,MAAM,OAAO,CAAC,WAAW,CAAC,EAAE,GAAG,WAAW,EAAE,GAAG,KAAK,EAAE,CAAC;QAChE;aAAO;AACL,YAAA,OAAO,WAAW;QACpB;IACF;AAEA,IAAA,MAAM,SAAS,GAAiB;AAC9B,QAAA,GAAG,QAAQ;AACX,QAAA,GAAG,KAAK;KACT;AAED,IAAAA,WAAM,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,CAAA,0BAAA,EAA6B,KAAK,CAAC,IAAI,CAAA,CAAE,CAAC;AAEhE,IAAA,OAAO,OAAO,EAAE,cAAc,CAAC,SAAS,CAAC;AAC3C;;;;;"}
|
|
@@ -24,9 +24,11 @@ declare function differentQueueConfig(queue: NewQueueData, queueConfig: QueueCon
|
|
|
24
24
|
* Ensures a queue configuration exists, creating it if necessary.
|
|
25
25
|
* @param queue The name of the queue.
|
|
26
26
|
* @param config Optional configuration for the new queue.
|
|
27
|
+
* @param defaults Optional default values for the queue.
|
|
28
|
+
* @param forceUpdate If true, updates the queue configuration even if it already exists.
|
|
27
29
|
* @returns The queue configuration.
|
|
28
30
|
*/
|
|
29
|
-
declare function grantQueueConfig(backend: Backend, queue: NewQueueData, defaults?: QueueDefaults): Promise<QueueConfig>;
|
|
31
|
+
declare function grantQueueConfig(backend: Backend, queue: NewQueueData, defaults?: QueueDefaults, forceUpdate?: boolean): Promise<QueueConfig>;
|
|
30
32
|
|
|
31
33
|
export { differentQueueConfig, grantQueueConfig };
|
|
32
34
|
export type { QueueDefaults };
|
|
@@ -21,12 +21,14 @@ function differentQueueConfig(queue, queueConfig) {
|
|
|
21
21
|
* Ensures a queue configuration exists, creating it if necessary.
|
|
22
22
|
* @param queue The name of the queue.
|
|
23
23
|
* @param config Optional configuration for the new queue.
|
|
24
|
+
* @param defaults Optional default values for the queue.
|
|
25
|
+
* @param forceUpdate If true, updates the queue configuration even if it already exists.
|
|
24
26
|
* @returns The queue configuration.
|
|
25
27
|
*/
|
|
26
|
-
async function grantQueueConfig(backend, queue, defaults) {
|
|
28
|
+
async function grantQueueConfig(backend, queue, defaults, forceUpdate = false) {
|
|
27
29
|
const queueConfig = await backend?.getQueue(queue.name);
|
|
28
30
|
if (queueConfig) {
|
|
29
|
-
if (differentQueueConfig(queue, queueConfig)) {
|
|
31
|
+
if (forceUpdate && differentQueueConfig(queue, queueConfig)) {
|
|
30
32
|
logger("Engine").warn(`Queue config for ${queue.name} exists but differs from the provided configuration. Updating...`);
|
|
31
33
|
return await backend.updateQueue({ ...queueConfig, ...queue });
|
|
32
34
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"grant-queue-config.js","sources":["../../src/queue/grant-queue-config.ts"],"sourcesContent":[null],"names":[],"mappings":";;AAUA;;;;;;;;;;;AAWG;AACG,SAAU,oBAAoB,CAAC,KAAmB,EAAE,WAAwB,EAAA;AAChF,IAAA,QACE,CAAC,CAAC,CAAC,KAAK,CAAC,WAAW,IAAI,KAAK,CAAC,WAAW,KAAK,WAAW,CAAC,WAAW;AACrE,SAAC,CAAC,CAAC,KAAK,CAAC,KAAK,IAAI,KAAK,CAAC,KAAK,KAAK,WAAW,CAAC,KAAK,CAAC;AACpD,SAAC,CAAC,CAAC,KAAK,CAAC,QAAQ,IAAI,KAAK,CAAC,QAAQ,KAAK,WAAW,CAAC,QAAQ,CAAC;AAEjE;AAEA
|
|
1
|
+
{"version":3,"file":"grant-queue-config.js","sources":["../../src/queue/grant-queue-config.ts"],"sourcesContent":[null],"names":[],"mappings":";;AAUA;;;;;;;;;;;AAWG;AACG,SAAU,oBAAoB,CAAC,KAAmB,EAAE,WAAwB,EAAA;AAChF,IAAA,QACE,CAAC,CAAC,CAAC,KAAK,CAAC,WAAW,IAAI,KAAK,CAAC,WAAW,KAAK,WAAW,CAAC,WAAW;AACrE,SAAC,CAAC,CAAC,KAAK,CAAC,KAAK,IAAI,KAAK,CAAC,KAAK,KAAK,WAAW,CAAC,KAAK,CAAC;AACpD,SAAC,CAAC,CAAC,KAAK,CAAC,QAAQ,IAAI,KAAK,CAAC,QAAQ,KAAK,WAAW,CAAC,QAAQ,CAAC;AAEjE;AAEA;;;;;;;AAOG;AACI,eAAe,gBAAgB,CACpC,OAAgB,EAChB,KAAmB,EACnB,QAAwB,EACxB,WAAW,GAAG,KAAK,EAAA;IAEnB,MAAM,WAAW,GAAG,MAAM,OAAO,EAAE,QAAQ,CAAC,KAAK,CAAC,IAAI,CAAC;IACvD,IAAI,WAAW,EAAE;QACf,IAAI,WAAW,IAAI,oBAAoB,CAAC,KAAK,EAAE,WAAW,CAAC,EAAE;AAC3D,YAAA,MAAM,CAAC,QAAQ,CAAC,CAAC,IAAI,CACnB,CAAA,iBAAA,EAAoB,KAAK,CAAC,IAAI,CAAA,gEAAA,CAAkE,CACjG;AACD,YAAA,OAAO,MAAM,OAAO,CAAC,WAAW,CAAC,EAAE,GAAG,WAAW,EAAE,GAAG,KAAK,EAAE,CAAC;QAChE;aAAO;AACL,YAAA,OAAO,WAAW;QACpB;IACF;AAEA,IAAA,MAAM,SAAS,GAAiB;AAC9B,QAAA,GAAG,QAAQ;AACX,QAAA,GAAG,KAAK;KACT;AAED,IAAA,MAAM,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,CAAA,0BAAA,EAA6B,KAAK,CAAC,IAAI,CAAA,CAAE,CAAC;AAEhE,IAAA,OAAO,OAAO,EAAE,cAAc,CAAC,SAAS,CAAC;AAC3C;;;;"}
|
|
@@ -9,19 +9,22 @@ const runnerPath = path.resolve(__dirname, "runner.js");
|
|
|
9
9
|
* A pool of worker threads for running jobs in parallel using Piscina.
|
|
10
10
|
*/
|
|
11
11
|
class RunnerPool {
|
|
12
|
+
nonNullConfig;
|
|
12
13
|
/** The underlying Piscina worker pool. */
|
|
13
14
|
pool;
|
|
14
15
|
/**
|
|
15
16
|
* Creates a new RunnerPool.
|
|
16
|
-
* @param
|
|
17
|
+
* @param nonNullConfig The non-nullable engine configuration.
|
|
17
18
|
*/
|
|
18
|
-
constructor(
|
|
19
|
+
constructor(nonNullConfig) {
|
|
20
|
+
this.nonNullConfig = nonNullConfig;
|
|
19
21
|
this.pool = new Piscina({
|
|
20
22
|
filename: runnerPath,
|
|
21
|
-
minThreads,
|
|
22
|
-
maxThreads,
|
|
23
|
+
minThreads: this.nonNullConfig.minThreads,
|
|
24
|
+
maxThreads: this.nonNullConfig.maxThreads,
|
|
25
|
+
idleTimeout: this.nonNullConfig.idleWorkerTimeout,
|
|
23
26
|
});
|
|
24
|
-
core.logger("RunnerPool").debug(`Created worker pool with min ${minThreads} threads and max ${maxThreads} threads`);
|
|
27
|
+
core.logger("RunnerPool").debug(`Created worker pool with min ${this.nonNullConfig.minThreads} threads and max ${this.nonNullConfig.maxThreads} threads`);
|
|
25
28
|
}
|
|
26
29
|
/**
|
|
27
30
|
* Runs a job in the worker pool.
|
|
@@ -31,7 +34,7 @@ class RunnerPool {
|
|
|
31
34
|
*/
|
|
32
35
|
run(job, signal) {
|
|
33
36
|
core.logger("RunnerPool").debug(`Running job ${job.id} in pool`);
|
|
34
|
-
return this.pool.run(job, { signal });
|
|
37
|
+
return this.pool.run({ jobData: job, config: this.nonNullConfig }, { signal });
|
|
35
38
|
}
|
|
36
39
|
/**
|
|
37
40
|
* Destroys the worker pool and releases resources.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"runner-pool.cjs","sources":["../../src/shared-runner/runner-pool.ts"],"sourcesContent":[null],"names":["logger"],"mappings":";;;;;;
|
|
1
|
+
{"version":3,"file":"runner-pool.cjs","sources":["../../src/shared-runner/runner-pool.ts"],"sourcesContent":[null],"names":["logger"],"mappings":";;;;;;AAMA,MAAM,UAAU,GAAG,IAAI,CAAC,OAAO,CAAC,SAAmB,EAAE,WAAW,CAAC;AAEjE;;AAEG;MACU,UAAU,CAAA;AAQD,IAAA,aAAA;;AANH,IAAA,IAAI;AAErB;;;AAGG;AACH,IAAA,WAAA,CAAoB,aAAsC,EAAA;QAAtC,IAAA,CAAA,aAAa,GAAb,aAAa;AAC/B,QAAA,IAAI,CAAC,IAAI,GAAG,IAAI,OAAO,CAAC;AACtB,YAAA,QAAQ,EAAE,UAAU;AACpB,YAAA,UAAU,EAAE,IAAI,CAAC,aAAa,CAAC,UAAU;AACzC,YAAA,UAAU,EAAE,IAAI,CAAC,aAAa,CAAC,UAAU;AACzC,YAAA,WAAW,EAAE,IAAI,CAAC,aAAa,CAAC,iBAAiB;AAClD,SAAA,CAAC;QACFA,WAAM,CAAC,YAAY,CAAC,CAAC,KAAK,CACxB,CAAA,6BAAA,EAAgC,IAAI,CAAC,aAAa,CAAC,UAAU,CAAA,iBAAA,EAAoB,IAAI,CAAC,aAAa,CAAC,UAAU,CAAA,QAAA,CAAU,CACzH;IACH;AAEA;;;;;AAKG;IACH,GAAG,CAAC,GAAY,EAAE,MAAqB,EAAA;AACrC,QAAAA,WAAM,CAAC,YAAY,CAAC,CAAC,KAAK,CAAC,CAAA,YAAA,EAAe,GAAG,CAAC,EAAE,CAAA,QAAA,CAAU,CAAC;QAC3D,OAAO,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,OAAO,EAAE,GAAG,EAAE,MAAM,EAAE,IAAI,CAAC,aAAa,EAAE,EAAE,EAAE,MAAM,EAAE,CAAC;IAChF;AAEA;;AAEG;AACH,IAAA,MAAM,OAAO,GAAA;QACXA,WAAM,CAAC,YAAY,CAAC,CAAC,KAAK,CAAC,wBAAwB,CAAC;AACpD,QAAA,MAAM,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE;IAC3B;AACD;;;;"}
|
|
@@ -1,17 +1,19 @@
|
|
|
1
1
|
import { JobData, JobResult } from '@sidequest/core';
|
|
2
2
|
import EventEmitter from 'events';
|
|
3
|
+
import { NonNullableEngineConfig } from '../engine.js';
|
|
3
4
|
|
|
4
5
|
/**
|
|
5
6
|
* A pool of worker threads for running jobs in parallel using Piscina.
|
|
6
7
|
*/
|
|
7
8
|
declare class RunnerPool {
|
|
9
|
+
private nonNullConfig;
|
|
8
10
|
/** The underlying Piscina worker pool. */
|
|
9
11
|
private readonly pool;
|
|
10
12
|
/**
|
|
11
13
|
* Creates a new RunnerPool.
|
|
12
|
-
* @param
|
|
14
|
+
* @param nonNullConfig The non-nullable engine configuration.
|
|
13
15
|
*/
|
|
14
|
-
constructor(
|
|
16
|
+
constructor(nonNullConfig: NonNullableEngineConfig);
|
|
15
17
|
/**
|
|
16
18
|
* Runs a job in the worker pool.
|
|
17
19
|
* @param job The job data to run.
|
|
@@ -7,19 +7,22 @@ const runnerPath = path.resolve(import.meta.dirname, "runner.js");
|
|
|
7
7
|
* A pool of worker threads for running jobs in parallel using Piscina.
|
|
8
8
|
*/
|
|
9
9
|
class RunnerPool {
|
|
10
|
+
nonNullConfig;
|
|
10
11
|
/** The underlying Piscina worker pool. */
|
|
11
12
|
pool;
|
|
12
13
|
/**
|
|
13
14
|
* Creates a new RunnerPool.
|
|
14
|
-
* @param
|
|
15
|
+
* @param nonNullConfig The non-nullable engine configuration.
|
|
15
16
|
*/
|
|
16
|
-
constructor(
|
|
17
|
+
constructor(nonNullConfig) {
|
|
18
|
+
this.nonNullConfig = nonNullConfig;
|
|
17
19
|
this.pool = new Piscina({
|
|
18
20
|
filename: runnerPath,
|
|
19
|
-
minThreads,
|
|
20
|
-
maxThreads,
|
|
21
|
+
minThreads: this.nonNullConfig.minThreads,
|
|
22
|
+
maxThreads: this.nonNullConfig.maxThreads,
|
|
23
|
+
idleTimeout: this.nonNullConfig.idleWorkerTimeout,
|
|
21
24
|
});
|
|
22
|
-
logger("RunnerPool").debug(`Created worker pool with min ${minThreads} threads and max ${maxThreads} threads`);
|
|
25
|
+
logger("RunnerPool").debug(`Created worker pool with min ${this.nonNullConfig.minThreads} threads and max ${this.nonNullConfig.maxThreads} threads`);
|
|
23
26
|
}
|
|
24
27
|
/**
|
|
25
28
|
* Runs a job in the worker pool.
|
|
@@ -29,7 +32,7 @@ class RunnerPool {
|
|
|
29
32
|
*/
|
|
30
33
|
run(job, signal) {
|
|
31
34
|
logger("RunnerPool").debug(`Running job ${job.id} in pool`);
|
|
32
|
-
return this.pool.run(job, { signal });
|
|
35
|
+
return this.pool.run({ jobData: job, config: this.nonNullConfig }, { signal });
|
|
33
36
|
}
|
|
34
37
|
/**
|
|
35
38
|
* Destroys the worker pool and releases resources.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"runner-pool.js","sources":["../../src/shared-runner/runner-pool.ts"],"sourcesContent":[null],"names":[],"mappings":";;;;
|
|
1
|
+
{"version":3,"file":"runner-pool.js","sources":["../../src/shared-runner/runner-pool.ts"],"sourcesContent":[null],"names":[],"mappings":";;;;AAMA,MAAM,UAAU,GAAG,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,OAAO,EAAE,WAAW,CAAC;AAEjE;;AAEG;MACU,UAAU,CAAA;AAQD,IAAA,aAAA;;AANH,IAAA,IAAI;AAErB;;;AAGG;AACH,IAAA,WAAA,CAAoB,aAAsC,EAAA;QAAtC,IAAA,CAAA,aAAa,GAAb,aAAa;AAC/B,QAAA,IAAI,CAAC,IAAI,GAAG,IAAI,OAAO,CAAC;AACtB,YAAA,QAAQ,EAAE,UAAU;AACpB,YAAA,UAAU,EAAE,IAAI,CAAC,aAAa,CAAC,UAAU;AACzC,YAAA,UAAU,EAAE,IAAI,CAAC,aAAa,CAAC,UAAU;AACzC,YAAA,WAAW,EAAE,IAAI,CAAC,aAAa,CAAC,iBAAiB;AAClD,SAAA,CAAC;QACF,MAAM,CAAC,YAAY,CAAC,CAAC,KAAK,CACxB,CAAA,6BAAA,EAAgC,IAAI,CAAC,aAAa,CAAC,UAAU,CAAA,iBAAA,EAAoB,IAAI,CAAC,aAAa,CAAC,UAAU,CAAA,QAAA,CAAU,CACzH;IACH;AAEA;;;;;AAKG;IACH,GAAG,CAAC,GAAY,EAAE,MAAqB,EAAA;AACrC,QAAA,MAAM,CAAC,YAAY,CAAC,CAAC,KAAK,CAAC,CAAA,YAAA,EAAe,GAAG,CAAC,EAAE,CAAA,QAAA,CAAU,CAAC;QAC3D,OAAO,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,OAAO,EAAE,GAAG,EAAE,MAAM,EAAE,IAAI,CAAC,aAAa,EAAE,EAAE,EAAE,MAAM,EAAE,CAAC;IAChF;AAEA;;AAEG;AACH,IAAA,MAAM,OAAO,GAAA;QACX,MAAM,CAAC,YAAY,CAAC,CAAC,KAAK,CAAC,wBAAwB,CAAC;AACpD,QAAA,MAAM,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE;IAC3B;AACD;;;;"}
|