mongodash 2.1.3 → 2.3.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/dist/dashboard/favicon.ico +0 -0
- package/dist/dashboard/index.html +4 -3
- package/dist/lib/src/OnError.js +20 -11
- package/dist/lib/src/OnError.js.map +1 -1
- package/dist/lib/src/OnInfo.js +20 -11
- package/dist/lib/src/OnInfo.js.map +1 -1
- package/dist/lib/src/createContinuousLock.js +3 -2
- package/dist/lib/src/createContinuousLock.js.map +1 -1
- package/dist/lib/src/createSecureHandler.js +20 -0
- package/dist/lib/src/createSecureHandler.js.map +1 -0
- package/dist/lib/src/cronTasks.js +48 -34
- package/dist/lib/src/cronTasks.js.map +1 -1
- package/dist/lib/src/getCollection.js +4 -0
- package/dist/lib/src/getCollection.js.map +1 -1
- package/dist/lib/src/index.js +41 -39
- package/dist/lib/src/index.js.map +1 -1
- package/dist/lib/src/reactiveTasks/ReactiveTaskManager.js +1 -1
- package/dist/lib/src/reactiveTasks/ReactiveTaskManager.js.map +1 -1
- package/dist/lib/src/reactiveTasks/ReactiveTaskOps.js +13 -5
- package/dist/lib/src/reactiveTasks/ReactiveTaskOps.js.map +1 -1
- package/dist/lib/src/reactiveTasks/ReactiveTaskRepository.js +63 -69
- package/dist/lib/src/reactiveTasks/ReactiveTaskRepository.js.map +1 -1
- package/dist/lib/src/reactiveTasks/ReactiveTaskTypes.js +2 -1
- package/dist/lib/src/reactiveTasks/ReactiveTaskTypes.js.map +1 -1
- package/dist/lib/src/reactiveTasks/ReactiveTaskWorker.js +37 -10
- package/dist/lib/src/reactiveTasks/ReactiveTaskWorker.js.map +1 -1
- package/dist/lib/src/reactiveTasks/index.js +14 -15
- package/dist/lib/src/reactiveTasks/index.js.map +1 -1
- package/dist/lib/src/task-management/OperationalTaskController.js +21 -3
- package/dist/lib/src/task-management/OperationalTaskController.js.map +1 -1
- package/dist/lib/src/withLock.js +13 -8
- package/dist/lib/src/withLock.js.map +1 -1
- package/dist/lib/src/withTransaction.js +4 -10
- package/dist/lib/src/withTransaction.js.map +1 -1
- package/dist/types/src/OnError.d.ts +10 -1
- package/dist/types/src/OnInfo.d.ts +10 -1
- package/dist/types/src/createContinuousLock.d.ts +3 -4
- package/dist/types/src/createSecureHandler.d.ts +5 -0
- package/dist/types/src/cronTasks.d.ts +7 -11
- package/dist/types/src/getCollection.d.ts +1 -0
- package/dist/types/src/index.d.ts +7 -7
- package/dist/types/src/reactiveTasks/ReactiveTaskRepository.d.ts +3 -1
- package/dist/types/src/reactiveTasks/ReactiveTaskTypes.d.ts +33 -7
- package/dist/types/src/reactiveTasks/ReactiveTaskWorker.d.ts +2 -2
- package/dist/types/src/reactiveTasks/index.d.ts +0 -4
- package/dist/types/src/task-management/OperationalTaskController.d.ts +1 -1
- package/dist/types/src/withLock.d.ts +2 -5
- package/dist/types/src/withTransaction.d.ts +2 -9
- package/docs/.vitepress/cache/deps/_metadata.json +6 -6
- package/docs/.vitepress/config.mts +1 -1
- package/docs/reactive-tasks/configuration.md +1 -1
- package/docs/reactive-tasks/core-concepts.md +21 -0
- package/docs/reactive-tasks/evolution.md +1 -1
- package/docs/reactive-tasks/guides.md +77 -18
- package/docs/reactive-tasks/management.md +1 -1
- package/docs/reactive-tasks/monitoring.md +1 -1
- package/docs/reactive-tasks/reconciliation.md +1 -1
- package/package.json +1 -1
|
@@ -23,8 +23,6 @@ exports.retryReactiveTasks = retryReactiveTasks;
|
|
|
23
23
|
const _debug = require("debug");
|
|
24
24
|
const ConcurrentRunner_1 = require("../ConcurrentRunner");
|
|
25
25
|
const initPromise_1 = require("../initPromise");
|
|
26
|
-
const OnError_1 = require("../OnError");
|
|
27
|
-
const OnInfo_1 = require("../OnInfo");
|
|
28
26
|
const parseInterval_1 = require("../parseInterval");
|
|
29
27
|
const LeaderElector_1 = require("./LeaderElector");
|
|
30
28
|
const MetricsCollector_1 = require("./MetricsCollector");
|
|
@@ -49,8 +47,8 @@ Object.defineProperty(exports, "CODE_REACTIVE_TASK_PLANNER_STREAM_ERROR", { enum
|
|
|
49
47
|
Object.defineProperty(exports, "CODE_REACTIVE_TASK_STARTED", { enumerable: true, get: function () { return ReactiveTaskTypes_2.CODE_REACTIVE_TASK_STARTED; } });
|
|
50
48
|
Object.defineProperty(exports, "REACTIVE_TASK_META_DOC_ID", { enumerable: true, get: function () { return ReactiveTaskTypes_2.REACTIVE_TASK_META_DOC_ID; } });
|
|
51
49
|
Object.defineProperty(exports, "TaskConditionFailedError", { enumerable: true, get: function () { return ReactiveTaskTypes_2.TaskConditionFailedError; } });
|
|
52
|
-
|
|
53
|
-
|
|
50
|
+
const OnError_1 = require("../OnError");
|
|
51
|
+
const OnInfo_1 = require("../OnInfo");
|
|
54
52
|
let globalsCollection;
|
|
55
53
|
/**
|
|
56
54
|
* Main scheduler class implementing the described logic.
|
|
@@ -109,10 +107,13 @@ class ReactiveTaskScheduler {
|
|
|
109
107
|
if (options.reactiveTaskCleanupInterval !== undefined) {
|
|
110
108
|
this.internalOptions.getNextCleanupDate = (0, parseInterval_1.createIntervalFunction)(options.reactiveTaskCleanupInterval);
|
|
111
109
|
}
|
|
110
|
+
if (options.visibilityTimeoutMs !== undefined) {
|
|
111
|
+
this.internalOptions.visibilityTimeoutMs = options.visibilityTimeoutMs;
|
|
112
|
+
}
|
|
112
113
|
this.options = Object.assign(Object.assign({}, this.options), options);
|
|
113
|
-
this.concurrentRunner = new ConcurrentRunner_1.ConcurrentRunner({ concurrency: this.options.reactiveTaskConcurrency }, onError);
|
|
114
|
-
this.registry.setCallbacks(onInfo, onError);
|
|
115
|
-
debug(`[Scheduler ${this.instanceId}] Configured
|
|
114
|
+
this.concurrentRunner = new ConcurrentRunner_1.ConcurrentRunner({ concurrency: this.options.reactiveTaskConcurrency }, OnError_1.onError);
|
|
115
|
+
this.registry.setCallbacks(OnInfo_1.onInfo, OnError_1.onError);
|
|
116
|
+
debug(`[Scheduler ${this.instanceId}] Configured.`);
|
|
116
117
|
}
|
|
117
118
|
async addTask(taskDef) {
|
|
118
119
|
if (this.isRunning) {
|
|
@@ -152,7 +153,7 @@ class ReactiveTaskScheduler {
|
|
|
152
153
|
this.taskPlanner = new ReactiveTaskPlanner_1.ReactiveTaskPlanner(globalsCollection, this.instanceId, this.registry, {
|
|
153
154
|
onStreamError: () => {
|
|
154
155
|
var _a;
|
|
155
|
-
onInfo({
|
|
156
|
+
(0, OnInfo_1.onInfo)({
|
|
156
157
|
message: `Change Stream error.`,
|
|
157
158
|
code: ReactiveTaskTypes_1.CODE_REACTIVE_TASK_PLANNER_STREAM_ERROR,
|
|
158
159
|
});
|
|
@@ -173,7 +174,7 @@ class ReactiveTaskScheduler {
|
|
|
173
174
|
batchSize: this.internalOptions.batchSize,
|
|
174
175
|
batchIntervalMs: this.internalOptions.batchIntervalMs,
|
|
175
176
|
getNextCleanupDate: this.internalOptions.getNextCleanupDate,
|
|
176
|
-
}, onInfo, onError);
|
|
177
|
+
}, OnInfo_1.onInfo, OnError_1.onError);
|
|
177
178
|
this.leaderElector = new LeaderElector_1.LeaderElector(globalsCollection, this.instanceId, {
|
|
178
179
|
lockTtlMs: this.internalOptions.lockTtlMs,
|
|
179
180
|
lockHeartbeatMs: this.internalOptions.lockHeartbeatMs,
|
|
@@ -198,15 +199,15 @@ class ReactiveTaskScheduler {
|
|
|
198
199
|
var _a;
|
|
199
200
|
await ((_a = this.taskPlanner) === null || _a === void 0 ? void 0 : _a.onHeartbeat());
|
|
200
201
|
},
|
|
201
|
-
}, onInfo, onError);
|
|
202
|
-
this.metricsCollector = new MetricsCollector_1.MetricsCollector(this.instanceId, this.registry, globalsCollection, this.leaderElector, this.options.monitoring, onInfo, onError);
|
|
202
|
+
}, OnInfo_1.onInfo, OnError_1.onError);
|
|
203
|
+
this.metricsCollector = new MetricsCollector_1.MetricsCollector(this.instanceId, this.registry, globalsCollection, this.leaderElector, this.options.monitoring, OnInfo_1.onInfo, OnError_1.onError);
|
|
203
204
|
this.worker = new ReactiveTaskWorker_1.ReactiveTaskWorker(this.instanceId, this.registry, {
|
|
204
205
|
onTaskFound: (collectionName) => {
|
|
205
206
|
this.concurrentRunner.speedUp(collectionName);
|
|
206
207
|
},
|
|
207
208
|
}, {
|
|
208
209
|
visibilityTimeoutMs: this.internalOptions.visibilityTimeoutMs,
|
|
209
|
-
}, this.options.reactiveTaskCaller, this.options.reactiveTaskFilter, onInfo, onError, this.metricsCollector);
|
|
210
|
+
}, this.options.reactiveTaskCaller, this.options.reactiveTaskFilter, OnInfo_1.onInfo, OnError_1.onError, this.metricsCollector);
|
|
210
211
|
// Start Leader Election
|
|
211
212
|
await this.leaderElector.start();
|
|
212
213
|
// Start Metrics Collector
|
|
@@ -247,9 +248,7 @@ const scheduler = new ReactiveTaskScheduler();
|
|
|
247
248
|
exports._scheduler = scheduler;
|
|
248
249
|
// --- PUBLIC INITIALIZATION FUNCTION ---
|
|
249
250
|
function init(initOptions) {
|
|
250
|
-
const {
|
|
251
|
-
onError = _onError;
|
|
252
|
-
onInfo = _onInfo;
|
|
251
|
+
const { globalsCollection: _globalsCollection } = initOptions, schedulerOptions = __rest(initOptions, ["globalsCollection"]);
|
|
253
252
|
globalsCollection = _globalsCollection;
|
|
254
253
|
scheduler.configure(schedulerOptions);
|
|
255
254
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/reactiveTasks/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/reactiveTasks/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,9 +1,13 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.OperationalTaskController = void 0;
|
|
4
|
+
// eslint-disable-next-line @typescript-eslint/ban-ts-comment
|
|
5
|
+
// @ts-ignore
|
|
6
|
+
const mongodb_1 = require("mongodb");
|
|
4
7
|
const cronTasks_1 = require("../cronTasks");
|
|
5
8
|
const getMongoClient_1 = require("../getMongoClient");
|
|
6
|
-
const
|
|
9
|
+
const OnInfo_1 = require("../OnInfo");
|
|
10
|
+
const ReactiveTaskTypes_1 = require("../reactiveTasks/ReactiveTaskTypes");
|
|
7
11
|
class OperationalTaskController {
|
|
8
12
|
constructor(scheduler) {
|
|
9
13
|
this.scheduler = scheduler;
|
|
@@ -45,7 +49,7 @@ class OperationalTaskController {
|
|
|
45
49
|
this.scheduler.getTaskManager().getTasks(query, {
|
|
46
50
|
limit: Number(params.limit || 50),
|
|
47
51
|
skip: Number(params.skip || 0),
|
|
48
|
-
sort: { field: '
|
|
52
|
+
sort: { field: 'nextRunAt', direction: 1 },
|
|
49
53
|
}),
|
|
50
54
|
this.scheduler.getTaskManager().getTaskStats(statsQuery),
|
|
51
55
|
]);
|
|
@@ -72,7 +76,15 @@ class OperationalTaskController {
|
|
|
72
76
|
if (body.sourceDocId) {
|
|
73
77
|
query.sourceDocFilter = this.createSmartIdFilter(body.sourceDocId);
|
|
74
78
|
}
|
|
75
|
-
|
|
79
|
+
const result = await this.scheduler.getTaskManager().retryTasks(query);
|
|
80
|
+
(0, OnInfo_1.onInfo)({
|
|
81
|
+
message: `Manual intervention via Dashboard: Retry tasks matching ${JSON.stringify(body)}`,
|
|
82
|
+
code: ReactiveTaskTypes_1.CODE_MANUAL_TRIGGER,
|
|
83
|
+
action: 'retry',
|
|
84
|
+
params: body,
|
|
85
|
+
modifiedCount: result.modifiedCount,
|
|
86
|
+
});
|
|
87
|
+
return result;
|
|
76
88
|
}
|
|
77
89
|
createSmartIdFilter(sourceDocId) {
|
|
78
90
|
const input = sourceDocId.trim();
|
|
@@ -102,6 +114,12 @@ class OperationalTaskController {
|
|
|
102
114
|
if (!body.taskId)
|
|
103
115
|
throw new Error('taskId is required');
|
|
104
116
|
await (0, cronTasks_1.triggerCronTask)(body.taskId);
|
|
117
|
+
(0, OnInfo_1.onInfo)({
|
|
118
|
+
message: `Manual intervention via Dashboard: Triggered Cron Task '${body.taskId}'`,
|
|
119
|
+
code: ReactiveTaskTypes_1.CODE_MANUAL_TRIGGER,
|
|
120
|
+
action: 'triggerCron',
|
|
121
|
+
taskId: body.taskId,
|
|
122
|
+
});
|
|
105
123
|
return { success: true };
|
|
106
124
|
}
|
|
107
125
|
async getInfo() {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"OperationalTaskController.js","sourceRoot":"","sources":["../../../../src/task-management/OperationalTaskController.ts"],"names":[],"mappings":";;;
|
|
1
|
+
{"version":3,"file":"OperationalTaskController.js","sourceRoot":"","sources":["../../../../src/task-management/OperationalTaskController.ts"],"names":[],"mappings":"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"}
|
package/dist/lib/src/withLock.js
CHANGED
|
@@ -1,18 +1,13 @@
|
|
|
1
1
|
'use strict';
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.LockAlreadyAcquiredError = void 0;
|
|
4
|
-
exports.
|
|
4
|
+
exports.reset = reset;
|
|
5
5
|
exports.isLockAlreadyAcquiredError = isLockAlreadyAcquiredError;
|
|
6
6
|
exports.withLock = withLock;
|
|
7
7
|
// import * as _debug from 'debug';
|
|
8
8
|
const mongodb_1 = require("mongodb");
|
|
9
9
|
const createContinuousLock_1 = require("./createContinuousLock");
|
|
10
10
|
const getCollection_1 = require("./getCollection");
|
|
11
|
-
// const debug = _debug('mongodash:withLock');
|
|
12
|
-
let onError;
|
|
13
|
-
function init(options) {
|
|
14
|
-
onError = options.onError;
|
|
15
|
-
}
|
|
16
11
|
const lockAcquiredMessage = 'The lock is already acquired.';
|
|
17
12
|
const expirationKey = 'expiresAt';
|
|
18
13
|
let collectionPromise;
|
|
@@ -26,6 +21,11 @@ async function getLockerCollection() {
|
|
|
26
21
|
}
|
|
27
22
|
return collectionPromise;
|
|
28
23
|
}
|
|
24
|
+
function reset() {
|
|
25
|
+
// eslint-disable-next-line @typescript-eslint/ban-ts-comment
|
|
26
|
+
// @ts-ignore
|
|
27
|
+
collectionPromise = null;
|
|
28
|
+
}
|
|
29
29
|
class LockAlreadyAcquiredError extends Error {
|
|
30
30
|
constructor(key) {
|
|
31
31
|
super(lockAcquiredMessage);
|
|
@@ -40,7 +40,12 @@ function isLockAlreadyAcquiredError(err, key) {
|
|
|
40
40
|
}
|
|
41
41
|
return key ? err.key === key : true;
|
|
42
42
|
}
|
|
43
|
-
async function withLock(key, callback,
|
|
43
|
+
async function withLock(key, callback, options) {
|
|
44
|
+
var _a, _b, _c;
|
|
45
|
+
const _options = options !== null && options !== void 0 ? options : {};
|
|
46
|
+
const maxWaitForLock = (_a = _options.maxWaitForLock) !== null && _a !== void 0 ? _a : 3 * 1000;
|
|
47
|
+
const startingDelay = (_b = _options.startingDelay) !== null && _b !== void 0 ? _b : 50;
|
|
48
|
+
const expireIn = (_c = _options.expireIn) !== null && _c !== void 0 ? _c : 15 * 1000;
|
|
44
49
|
const lockId = new mongodb_1.ObjectId();
|
|
45
50
|
const stringKey = `${key}`;
|
|
46
51
|
const maxDate = new Date(Date.now() + maxWaitForLock);
|
|
@@ -94,7 +99,7 @@ async function withLock(key, callback, { maxWaitForLock = 3 * 1000, startingDela
|
|
|
94
99
|
}
|
|
95
100
|
}
|
|
96
101
|
}
|
|
97
|
-
const stopContinuousLock = (0, createContinuousLock_1.createContinuousLock)(collection, stringKey, expirationKey, expireIn
|
|
102
|
+
const stopContinuousLock = (0, createContinuousLock_1.createContinuousLock)(collection, stringKey, expirationKey, expireIn);
|
|
98
103
|
const cleanUp = () => Promise.all([stopContinuousLock(), releaseLock()]);
|
|
99
104
|
let value;
|
|
100
105
|
let err;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"withLock.js","sourceRoot":"","sources":["../../../src/withLock.ts"],"names":[],"mappings":"AAAA,YAAY,CAAC;;;
|
|
1
|
+
{"version":3,"file":"withLock.js","sourceRoot":"","sources":["../../../src/withLock.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,16 +1,10 @@
|
|
|
1
1
|
'use strict';
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.init = init;
|
|
4
3
|
exports.registerPostCommitHook = registerPostCommitHook;
|
|
5
4
|
exports.withTransaction = withTransaction;
|
|
6
5
|
const getMongoClient_1 = require("./getMongoClient");
|
|
6
|
+
const OnError_1 = require("./OnError");
|
|
7
7
|
const postCommitHooks = new WeakMap();
|
|
8
|
-
let _onError;
|
|
9
|
-
let _onInfo;
|
|
10
|
-
function init(options) {
|
|
11
|
-
_onError = options.onError;
|
|
12
|
-
_onInfo = options.onInfo;
|
|
13
|
-
}
|
|
14
8
|
function registerPostCommitHook(session, hook) {
|
|
15
9
|
if (!session.inTransaction()) {
|
|
16
10
|
throw new Error('It is not possible to register a post commit hook without active transaction.');
|
|
@@ -21,20 +15,20 @@ function registerPostCommitHook(session, hook) {
|
|
|
21
15
|
}
|
|
22
16
|
hooks.push(hook);
|
|
23
17
|
}
|
|
24
|
-
async function withTransaction(callback
|
|
18
|
+
async function withTransaction(callback) {
|
|
25
19
|
const clientSession = (0, getMongoClient_1.getMongoClient)().startSession();
|
|
26
20
|
postCommitHooks.set(clientSession, []);
|
|
27
21
|
try {
|
|
28
22
|
let returnValue;
|
|
29
23
|
await clientSession.withTransaction(async () => {
|
|
30
24
|
returnValue = await callback(clientSession);
|
|
31
|
-
}
|
|
25
|
+
});
|
|
32
26
|
const hooks = postCommitHooks.get(clientSession);
|
|
33
27
|
if (hooks.length > 0) {
|
|
34
28
|
const results = await Promise.allSettled(hooks.map((hook) => hook()));
|
|
35
29
|
results.forEach((result) => {
|
|
36
30
|
if (result.status === 'rejected') {
|
|
37
|
-
|
|
31
|
+
(0, OnError_1.onError)(result.reason);
|
|
38
32
|
}
|
|
39
33
|
});
|
|
40
34
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"withTransaction.js","sourceRoot":"","sources":["../../../src/withTransaction.ts"],"names":[],"mappings":"AAAA,YAAY,CAAC;;
|
|
1
|
+
{"version":3,"file":"withTransaction.js","sourceRoot":"","sources":["../../../src/withTransaction.ts"],"names":[],"mappings":"AAAA,YAAY,CAAC;;AAYb,wDAYC;AAED,0CA4BC;AAjDD,qDAAkD;AAClD,uCAAoC;AAIpC,MAAM,eAAe,GAAG,IAAI,OAAO,EAAmC,CAAC;AAEvE,SAAgB,sBAAsB,CAAC,OAAsB,EAAE,IAAoB;IAC/E,IAAI,CAAC,OAAO,CAAC,aAAa,EAAE,EAAE,CAAC;QAC3B,MAAM,IAAI,KAAK,CAAC,+EAA+E,CAAC,CAAC;IACrG,CAAC;IAED,MAAM,KAAK,GAAG,eAAe,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;IAE3C,IAAI,CAAC,KAAK,EAAE,CAAC;QACT,MAAM,IAAI,KAAK,CAAC,wGAAwG,CAAC,CAAC;IAC9H,CAAC;IAED,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AACrB,CAAC;AAEM,KAAK,UAAU,eAAe,CAAI,QAAgD;IACrF,MAAM,aAAa,GAAG,IAAA,+BAAc,GAAE,CAAC,YAAY,EAAE,CAAC;IAEtD,eAAe,CAAC,GAAG,CAAC,aAAa,EAAE,EAAE,CAAC,CAAC;IAEvC,IAAI,CAAC;QACD,IAAI,WAAc,CAAC;QAEnB,MAAM,aAAa,CAAC,eAAe,CAAC,KAAK,IAAI,EAAE;YAC3C,WAAW,GAAG,MAAM,QAAQ,CAAC,aAAa,CAAC,CAAC;QAChD,CAAC,CAAC,CAAC;QAEH,MAAM,KAAK,GAAG,eAAe,CAAC,GAAG,CAAC,aAAa,CAAE,CAAC;QAElD,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACnB,MAAM,OAAO,GAAG,MAAM,OAAO,CAAC,UAAU,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC;YACtE,OAAO,CAAC,OAAO,CAAC,CAAC,MAAM,EAAE,EAAE;gBACvB,IAAI,MAAM,CAAC,MAAM,KAAK,UAAU,EAAE,CAAC;oBAC/B,IAAA,iBAAO,EAAC,MAAM,CAAC,MAAM,CAAC,CAAC;gBAC3B,CAAC;YACL,CAAC,CAAC,CAAC;QACP,CAAC;QAED,OAAO,WAAY,CAAC;IACxB,CAAC;YAAS,CAAC;QACP,eAAe,CAAC,MAAM,CAAC,aAAa,CAAC,CAAC;QACtC,MAAM,aAAa,CAAC,UAAU,EAAE,CAAC;IACrC,CAAC;AACL,CAAC"}
|
|
@@ -1,3 +1,12 @@
|
|
|
1
1
|
export type OnError = (error: Error) => void;
|
|
2
2
|
export declare const defaultOnError: OnError;
|
|
3
|
-
|
|
3
|
+
/**
|
|
4
|
+
* Updates the global onError handler.
|
|
5
|
+
* Automatically wraps the provided handler with secureOnError for safety.
|
|
6
|
+
*/
|
|
7
|
+
export declare function setGlobalOnError(onError: OnError): void;
|
|
8
|
+
/**
|
|
9
|
+
* Global wrapper that delegates to the currently configured onError handler.
|
|
10
|
+
* Can be imported and used directly by any component.
|
|
11
|
+
*/
|
|
12
|
+
export declare const onError: OnError;
|
|
@@ -3,4 +3,13 @@ export type OnInfo = (info: {
|
|
|
3
3
|
code: string;
|
|
4
4
|
} & Record<string, unknown>) => void;
|
|
5
5
|
export declare const defaultOnInfo: OnInfo;
|
|
6
|
-
|
|
6
|
+
/**
|
|
7
|
+
* Updates the global onInfo handler.
|
|
8
|
+
* Automatically wraps the provided handler with secureOnInfo for safety.
|
|
9
|
+
*/
|
|
10
|
+
export declare function setGlobalOnInfo(onInfo: OnInfo): void;
|
|
11
|
+
/**
|
|
12
|
+
* Global wrapper that delegates to the currently configured onInfo handler.
|
|
13
|
+
* Can be imported and used directly by any component.
|
|
14
|
+
*/
|
|
15
|
+
export declare const onInfo: OnInfo;
|
|
@@ -1,7 +1,6 @@
|
|
|
1
|
-
import { Collection } from 'mongodb';
|
|
2
|
-
import { OnError } from './OnError';
|
|
1
|
+
import { Collection, ObjectId } from 'mongodb';
|
|
3
2
|
type StopContinuousLock = () => Promise<void>;
|
|
4
3
|
export declare function createContinuousLock<DocumentType extends {
|
|
5
|
-
_id: string;
|
|
6
|
-
}>(collection: Collection<DocumentType>, documentId:
|
|
4
|
+
_id: string | ObjectId;
|
|
5
|
+
}>(collection: Collection<DocumentType>, documentId: DocumentType['_id'], lockProperty: keyof DocumentType, lockTime: number): StopContinuousLock;
|
|
7
6
|
export {};
|
|
@@ -1,6 +1,11 @@
|
|
|
1
1
|
import { CronExpressionOptions } from 'cron-parser';
|
|
2
|
-
|
|
3
|
-
|
|
2
|
+
export interface InitOptions {
|
|
3
|
+
runCronTasks: boolean;
|
|
4
|
+
cronExpressionParserOptions: CronExpressionOptions;
|
|
5
|
+
cronTaskCaller: CronTaskCaller;
|
|
6
|
+
cronTaskFilter: CronTaskFilter;
|
|
7
|
+
}
|
|
8
|
+
export declare function init(options: InitOptions): void;
|
|
4
9
|
export declare const CODE_CRON_TASK_STARTED = "cronTaskStarted";
|
|
5
10
|
export declare const CODE_CRON_TASK_FINISHED = "cronTaskFinished";
|
|
6
11
|
export declare const CODE_CRON_TASK_SCHEDULED = "cronTaskScheduled";
|
|
@@ -50,15 +55,6 @@ export interface CronTaskFilter {
|
|
|
50
55
|
}): boolean;
|
|
51
56
|
}
|
|
52
57
|
export declare function runCronTask(taskId: TaskId): Promise<void>;
|
|
53
|
-
export type InitOptions = {
|
|
54
|
-
runCronTasks: boolean;
|
|
55
|
-
cronExpressionParserOptions: CronExpressionOptions;
|
|
56
|
-
onError: OnError;
|
|
57
|
-
onInfo: OnInfo;
|
|
58
|
-
cronTaskCaller: CronTaskCaller;
|
|
59
|
-
cronTaskFilter: CronTaskFilter;
|
|
60
|
-
};
|
|
61
|
-
export declare function init(initOptions: InitOptions): void;
|
|
62
58
|
export declare function stopCronTasks(): void;
|
|
63
59
|
export declare function startCronTasks(): void;
|
|
64
60
|
export declare function scheduleCronTaskImmediately(taskId: TaskId): Promise<void>;
|
|
@@ -11,4 +11,5 @@ export type InitOptions = {
|
|
|
11
11
|
collectionFactory: CollectionFactory | null;
|
|
12
12
|
};
|
|
13
13
|
export declare function init(options: InitOptions): void;
|
|
14
|
+
export declare function reset(): void;
|
|
14
15
|
export declare function getCollection<T extends Document>(name: string): Collection<T>;
|
|
@@ -1,19 +1,19 @@
|
|
|
1
|
+
import { Collection } from 'mongodb';
|
|
1
2
|
import { InitOptions as CronTasksInitOptions } from './cronTasks';
|
|
2
|
-
import { InitOptions as ReactiveTasksInitOptions } from './reactiveTasks';
|
|
3
3
|
import { InitOptions as GetCollectionInitOptions } from './getCollection';
|
|
4
4
|
import { InitOptions as GetMongoClientInitOptions } from './getMongoClient';
|
|
5
5
|
import { OnError } from './OnError';
|
|
6
6
|
import { OnInfo } from './OnInfo';
|
|
7
|
-
import {
|
|
8
|
-
export {
|
|
7
|
+
import { InitOptions as ReactiveTasksInitOptions } from './reactiveTasks';
|
|
8
|
+
export { CODE_CRON_TASK_FAILED, CODE_CRON_TASK_FINISHED, CODE_CRON_TASK_SCHEDULED, CODE_CRON_TASK_STARTED, CronPagedResult, cronTask, CronTaskQuery, CronTaskRecord, CronTaskStatus, getCronTasksList, Interval, runCronTask, scheduleCronTaskImmediately, startCronTasks, stopCronTasks, TaskFunction, TaskId, triggerCronTask, } from './cronTasks';
|
|
9
9
|
export { getCollection } from './getCollection';
|
|
10
10
|
export { getMongoClient } from './getMongoClient';
|
|
11
11
|
export { OnError } from './OnError';
|
|
12
|
-
export { withLock, isLockAlreadyAcquiredError, WithLockOptions, LockAlreadyAcquiredError } from './withLock';
|
|
13
|
-
export { withTransaction, registerPostCommitHook, PostCommitHook } from './withTransaction';
|
|
14
|
-
export { reactiveTask, ReactiveTask, ReactiveTaskHandler, TaskConditionFailedError, startReactiveTasks, stopReactiveTasks, getPrometheusMetrics, _scheduler, CODE_REACTIVE_TASK_STARTED, CODE_REACTIVE_TASK_FINISHED, CODE_REACTIVE_TASK_FAILED, CODE_REACTIVE_TASK_PLANNER_STARTED, CODE_REACTIVE_TASK_PLANNER_STOPPED, CODE_REACTIVE_TASK_PLANNER_RECONCILIATION_STARTED, CODE_REACTIVE_TASK_PLANNER_RECONCILIATION_FINISHED, CODE_REACTIVE_TASK_PLANNER_STREAM_ERROR, CODE_REACTIVE_TASK_LEADER_LOCK_LOST, getReactiveTasks, countReactiveTasks, retryReactiveTasks, } from './reactiveTasks';
|
|
15
12
|
export { processInBatches, ProcessInBatchesOptions, ProcessInBatchesResult } from './processInBatches';
|
|
16
|
-
export {
|
|
13
|
+
export { CODE_REACTIVE_TASK_FAILED, CODE_REACTIVE_TASK_FINISHED, CODE_REACTIVE_TASK_LEADER_LOCK_LOST, CODE_REACTIVE_TASK_PLANNER_RECONCILIATION_FINISHED, CODE_REACTIVE_TASK_PLANNER_RECONCILIATION_STARTED, CODE_REACTIVE_TASK_PLANNER_STARTED, CODE_REACTIVE_TASK_PLANNER_STOPPED, CODE_REACTIVE_TASK_PLANNER_STREAM_ERROR, CODE_REACTIVE_TASK_STARTED, countReactiveTasks, getPrometheusMetrics, getReactiveTasks, reactiveTask, ReactiveTask, ReactiveTaskHandler, retryReactiveTasks, startReactiveTasks, stopReactiveTasks, TaskConditionFailedError, _scheduler, } from './reactiveTasks';
|
|
14
|
+
export { OperationalTaskController, serveDashboard } from './task-management';
|
|
15
|
+
export { isLockAlreadyAcquiredError, LockAlreadyAcquiredError, withLock, WithLockOptions } from './withLock';
|
|
16
|
+
export { PostCommitHook, registerPostCommitHook, withTransaction } from './withTransaction';
|
|
17
17
|
type PackageOptions = {
|
|
18
18
|
onError?: OnError;
|
|
19
19
|
onInfo?: OnInfo;
|
|
@@ -26,7 +26,9 @@ export declare class ReactiveTaskRepository<T extends Document> {
|
|
|
26
26
|
}): Promise<ReactiveTaskRecord<T> | null>;
|
|
27
27
|
finalizeTask(taskRecord: ReactiveTaskRecord<T>, strategy: ReactiveTaskRetryStrategy, error?: Error, debounceMs?: number, executionStats?: {
|
|
28
28
|
durationMs: number;
|
|
29
|
-
}, executionHistoryLimit?: number
|
|
29
|
+
}, executionHistoryLimit?: number, options?: {
|
|
30
|
+
session?: import('mongodb').ClientSession;
|
|
31
|
+
}): Promise<void>;
|
|
30
32
|
deferTask(taskRecord: ReactiveTaskRecord<T>, delay: number | Date): Promise<void>;
|
|
31
33
|
executeBulkWrite(operations: Parameters<Collection<ReactiveTaskRecord<T>>['bulkWrite']>[0], options?: CompatibleBulkWriteOptions): Promise<void>;
|
|
32
34
|
findTasks(filter: Filter<ReactiveTaskRecord<T>>, options?: {
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { Collection, Document,
|
|
1
|
+
import { Collection, Document, Filter, FindOptions, ObjectId, ResumeToken, WithId } from 'mongodb';
|
|
2
2
|
import type { ReactiveTaskRetryStrategy } from './ReactiveTaskRetryStrategy';
|
|
3
3
|
/**
|
|
4
4
|
* Represents the status of a task in the database.
|
|
@@ -33,16 +33,25 @@ export interface ReactiveTaskRecord<T = Document> {
|
|
|
33
33
|
sourceDocId: WithId<T>['_id'];
|
|
34
34
|
status: ReactiveTaskStatus;
|
|
35
35
|
attempts: number;
|
|
36
|
-
|
|
36
|
+
/**
|
|
37
|
+
* The effective time used for polling.
|
|
38
|
+
* - Pending: Time when the task becomes eligible to run.
|
|
39
|
+
* - Processing: Time when the lock expires (zombie recovery).
|
|
40
|
+
* - Completed/Failed: NULL (not indexed, not polled).
|
|
41
|
+
*/
|
|
42
|
+
nextRunAt: Date | null;
|
|
43
|
+
/**
|
|
44
|
+
* The original time the task was first scheduled to run.
|
|
45
|
+
* This preserves the original baseline for global lag calculation.
|
|
46
|
+
*/
|
|
47
|
+
dueAt: Date;
|
|
37
48
|
createdAt: Date;
|
|
38
49
|
updatedAt: Date;
|
|
39
50
|
startedAt?: Date | null;
|
|
40
51
|
completedAt?: Date | null;
|
|
41
|
-
lockExpiresAt?: Date | null;
|
|
42
52
|
firstErrorAt?: Date | null;
|
|
43
53
|
lastError?: string | null;
|
|
44
54
|
lastFinalizedAt?: Date | null;
|
|
45
|
-
initialScheduledAt?: Date | null;
|
|
46
55
|
lastObservedValues?: Record<string, unknown> | null;
|
|
47
56
|
lastSuccess?: {
|
|
48
57
|
at: Date;
|
|
@@ -131,17 +140,27 @@ export interface ReactiveTaskContext<T = Document> {
|
|
|
131
140
|
* Defers the task execution to a later time.
|
|
132
141
|
* The task will remain 'pending' (or effectively so) until the specified time.
|
|
133
142
|
* Use this for temporary external failures (e.g. rate limits) or to postpone processing.
|
|
134
|
-
* This preserves the original `
|
|
143
|
+
* This preserves the original baseline `dueAt` for global lag calculation.
|
|
135
144
|
*/
|
|
136
145
|
deferCurrent(delay: number | Date): void;
|
|
137
146
|
/**
|
|
138
147
|
* Pauses ALL tasks of this type (on this instance only) until the specified time.
|
|
139
148
|
* Useful for instance-local backoff (e.g. rate limits), but note that other instances will continue processing.
|
|
140
149
|
*
|
|
141
|
-
* IMPORTANT: This does NOT automatically defer the *current* task.
|
|
142
150
|
* The current task will be marked as successful unless you also call `deferCurrent()` or throw an error.
|
|
143
151
|
*/
|
|
144
152
|
throttleAll(until: number | Date): void;
|
|
153
|
+
/**
|
|
154
|
+
* Atomically marks the task as completed within the provided MongoDB Transaction.
|
|
155
|
+
* Use this to ensure that the task status update is committed atomically with your business logic.
|
|
156
|
+
*
|
|
157
|
+
* If you call this method, the library will NOT perform the automatic finalization step.
|
|
158
|
+
*
|
|
159
|
+
* @param options.session The MongoDB ClientSession where the transaction is active.
|
|
160
|
+
*/
|
|
161
|
+
markCompleted(options?: {
|
|
162
|
+
session?: import('mongodb').ClientSession;
|
|
163
|
+
}): Promise<void>;
|
|
145
164
|
}
|
|
146
165
|
/**
|
|
147
166
|
* Worker function provided by the user.
|
|
@@ -214,7 +233,7 @@ export interface ReactiveTask<T extends Document> {
|
|
|
214
233
|
*/
|
|
215
234
|
filter?: Filter<T>;
|
|
216
235
|
handler: ReactiveTaskHandler<T>;
|
|
217
|
-
/** Time (ms) or interval description (e.g. "500ms", "1s") to postpone
|
|
236
|
+
/** Time (ms) or interval description (e.g. "500ms", "1s") to postpone execution on change (Debouncing). Default: 1000ms */
|
|
218
237
|
debounce?: number | string;
|
|
219
238
|
/** Retry Policy configuration */
|
|
220
239
|
retryPolicy?: RetryPolicy;
|
|
@@ -293,6 +312,12 @@ export interface ReactiveTaskSchedulerOptions {
|
|
|
293
312
|
* Default: '24h'
|
|
294
313
|
*/
|
|
295
314
|
reactiveTaskCleanupInterval?: number | string;
|
|
315
|
+
/**
|
|
316
|
+
* Timeout for the visibility lock on tasks (ms).
|
|
317
|
+
* Tasks that take longer than this will be picked up by other workers (if lock renewal fails).
|
|
318
|
+
* Default: 60000 (1m)
|
|
319
|
+
*/
|
|
320
|
+
visibilityTimeoutMs?: number;
|
|
296
321
|
}
|
|
297
322
|
/**
|
|
298
323
|
* Filter function to restrict which tasks are processed by the worker.
|
|
@@ -319,6 +344,7 @@ export declare const CODE_REACTIVE_TASK_PLANNER_STREAM_ERROR = "reactiveTaskPlan
|
|
|
319
344
|
export declare const CODE_REACTIVE_TASK_LEADER_LOCK_LOST = "reactiveTaskLeaderLockLost";
|
|
320
345
|
export declare const CODE_REACTIVE_TASK_INITIALIZED = "reactiveTaskInitialized";
|
|
321
346
|
export declare const CODE_REACTIVE_TASK_CLEANUP = "reactiveTaskCleanup";
|
|
347
|
+
export declare const CODE_MANUAL_TRIGGER = "manualTrigger";
|
|
322
348
|
export declare const REACTIVE_TASK_META_DOC_ID = "_mongodash_planner_meta";
|
|
323
349
|
/**
|
|
324
350
|
* Filter for querying tasks.
|
|
@@ -1,7 +1,7 @@
|
|
|
1
|
+
import { OnError } from '../OnError';
|
|
2
|
+
import { OnInfo } from '../OnInfo';
|
|
1
3
|
import { ReactiveTaskRegistry } from './ReactiveTaskRegistry';
|
|
2
4
|
import { ReactiveTaskCaller, ReactiveTaskFilter } from './ReactiveTaskTypes';
|
|
3
|
-
import { OnInfo } from '../OnInfo';
|
|
4
|
-
import { OnError } from '../OnError';
|
|
5
5
|
import { MetricsCollector } from './MetricsCollector';
|
|
6
6
|
export interface WorkerCallbacks {
|
|
7
7
|
onTaskFound: (collectionName: string) => void;
|
|
@@ -1,16 +1,12 @@
|
|
|
1
1
|
import { Document } from 'mongodb';
|
|
2
2
|
import type { Registry } from 'prom-client';
|
|
3
3
|
import { GlobalsCollection } from '../globalsCollection';
|
|
4
|
-
import { OnError } from '../OnError';
|
|
5
|
-
import { OnInfo } from '../OnInfo';
|
|
6
4
|
import { ReactiveTaskManager } from './ReactiveTaskManager';
|
|
7
5
|
import { ReactiveTaskRegistry } from './ReactiveTaskRegistry';
|
|
8
6
|
import { PagedResult, PaginationOptions, ReactiveTask, ReactiveTaskQuery, ReactiveTaskRecord, ReactiveTaskSchedulerOptions } from './ReactiveTaskTypes';
|
|
9
7
|
export { CODE_REACTIVE_TASK_CLEANUP, CODE_REACTIVE_TASK_FAILED, CODE_REACTIVE_TASK_FINISHED, CODE_REACTIVE_TASK_INITIALIZED, CODE_REACTIVE_TASK_LEADER_LOCK_LOST, CODE_REACTIVE_TASK_PLANNER_RECONCILIATION_FINISHED, CODE_REACTIVE_TASK_PLANNER_RECONCILIATION_STARTED, CODE_REACTIVE_TASK_PLANNER_STARTED, CODE_REACTIVE_TASK_PLANNER_STOPPED, CODE_REACTIVE_TASK_PLANNER_STREAM_ERROR, CODE_REACTIVE_TASK_STARTED, PagedResult, PaginationOptions, ReactiveTask, ReactiveTaskCaller, ReactiveTaskFilter, ReactiveTaskHandler, ReactiveTaskQuery, ReactiveTaskRecord, ReactiveTaskSchedulerOptions, ReactiveTaskStatus, REACTIVE_TASK_META_DOC_ID, TaskConditionFailedError, } from './ReactiveTaskTypes';
|
|
10
8
|
export { scheduler as _scheduler };
|
|
11
9
|
export type InitOptions = {
|
|
12
|
-
onError: OnError;
|
|
13
|
-
onInfo: OnInfo;
|
|
14
10
|
globalsCollection: GlobalsCollection;
|
|
15
11
|
} & Partial<ReactiveTaskSchedulerOptions>;
|
|
16
12
|
/**
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { ReactiveTaskScheduler } from '../reactiveTasks/index';
|
|
2
|
-
import { CronTaskQuery } from '../cronTasks';
|
|
3
2
|
import { Document } from 'mongodb';
|
|
3
|
+
import { CronTaskQuery } from '../cronTasks';
|
|
4
4
|
export declare class OperationalTaskController {
|
|
5
5
|
private scheduler;
|
|
6
6
|
constructor(scheduler: ReactiveTaskScheduler);
|
|
@@ -1,8 +1,4 @@
|
|
|
1
1
|
import { ObjectId } from 'mongodb';
|
|
2
|
-
import { OnError } from './OnError';
|
|
3
|
-
export declare function init(options: {
|
|
4
|
-
onError: OnError;
|
|
5
|
-
}): void;
|
|
6
2
|
export type LockKey = string | number | ObjectId;
|
|
7
3
|
export type LockCallback<T> = () => Promise<T>;
|
|
8
4
|
export type WithLockOptions = {
|
|
@@ -10,9 +6,10 @@ export type WithLockOptions = {
|
|
|
10
6
|
startingDelay?: number;
|
|
11
7
|
expireIn?: number;
|
|
12
8
|
};
|
|
9
|
+
export declare function reset(): void;
|
|
13
10
|
export declare class LockAlreadyAcquiredError extends Error {
|
|
14
11
|
readonly key: LockKey;
|
|
15
12
|
constructor(key: LockKey);
|
|
16
13
|
}
|
|
17
14
|
export declare function isLockAlreadyAcquiredError(err: unknown, key?: LockKey): boolean;
|
|
18
|
-
export declare function withLock<T>(key: LockKey, callback: LockCallback<T>,
|
|
15
|
+
export declare function withLock<T>(key: LockKey, callback: LockCallback<T>, options?: WithLockOptions): Promise<T>;
|