@dbos-inc/dbos-sdk 1.8.23-preview.g8060c74f33 → 1.9.5-preview
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/schemas/system_db_schema.d.ts +4 -0
- package/dist/schemas/system_db_schema.d.ts.map +1 -1
- package/dist/src/dbos-executor.d.ts.map +1 -1
- package/dist/src/dbos-executor.js +10 -2
- package/dist/src/dbos-executor.js.map +1 -1
- package/dist/src/dbos-runtime/cli.d.ts +1 -0
- package/dist/src/dbos-runtime/cli.d.ts.map +1 -1
- package/dist/src/dbos-runtime/cli.js +4 -2
- package/dist/src/dbos-runtime/cli.js.map +1 -1
- package/dist/src/dbos-runtime/config.d.ts.map +1 -1
- package/dist/src/dbos-runtime/config.js +6 -0
- package/dist/src/dbos-runtime/config.js.map +1 -1
- package/dist/src/dbos-runtime/runtime.d.ts +1 -0
- package/dist/src/dbos-runtime/runtime.d.ts.map +1 -1
- package/dist/src/dbos-runtime/runtime.js +7 -0
- package/dist/src/dbos-runtime/runtime.js.map +1 -1
- package/dist/src/index.d.ts +1 -0
- package/dist/src/index.d.ts.map +1 -1
- package/dist/src/index.js +5 -1
- package/dist/src/index.js.map +1 -1
- package/dist/src/kafka/kafka.d.ts +1 -0
- package/dist/src/kafka/kafka.d.ts.map +1 -1
- package/dist/src/kafka/kafka.js +35 -1
- package/dist/src/kafka/kafka.js.map +1 -1
- package/dist/src/scheduler/crontab.d.ts +19 -0
- package/dist/src/scheduler/crontab.d.ts.map +1 -0
- package/dist/src/scheduler/crontab.js +286 -0
- package/dist/src/scheduler/crontab.js.map +1 -0
- package/dist/src/scheduler/scheduler.d.ts +45 -0
- package/dist/src/scheduler/scheduler.d.ts.map +1 -0
- package/dist/src/scheduler/scheduler.js +165 -0
- package/dist/src/scheduler/scheduler.js.map +1 -0
- package/dist/src/system_database.d.ts +4 -0
- package/dist/src/system_database.d.ts.map +1 -1
- package/dist/src/system_database.js +22 -0
- package/dist/src/system_database.js.map +1 -1
- package/dist/src/testing/testing_runtime.d.ts.map +1 -1
- package/dist/src/testing/testing_runtime.js +5 -0
- package/dist/src/testing/testing_runtime.js.map +1 -1
- package/dist/src/workflow.d.ts.map +1 -1
- package/dist/src/workflow.js.map +1 -1
- package/dist/tsconfig.build.tsbuildinfo +1 -1
- package/migrations/20240430090000_tables.js +13 -0
- package/package.json +1 -1
@@ -0,0 +1,286 @@
|
|
1
|
+
"use strict";
|
2
|
+
// This code was based on code from node-cron:
|
3
|
+
// https://github.com/node-cron/node-cron
|
4
|
+
/*
|
5
|
+
ISC License
|
6
|
+
Copyright (c) 2016, Lucas Merencia <lucas.merencia@gmail.com>
|
7
|
+
|
8
|
+
Permission to use, copy, modify, and/or distribute this software for any
|
9
|
+
purpose with or without fee is hereby granted, provided that the above
|
10
|
+
copyright notice and this permission notice appear in all copies.
|
11
|
+
|
12
|
+
THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
|
13
|
+
WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
|
14
|
+
MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
|
15
|
+
ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
|
16
|
+
WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
|
17
|
+
ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
|
18
|
+
OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
|
19
|
+
*/
|
20
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
21
|
+
exports.TimeMatcher = exports.convertExpression = exports.validateCrontab = exports.convertAsterisksToRanges = void 0;
|
22
|
+
function removeExtraSpaces(str) {
|
23
|
+
return str.replace(/\s{2,}/g, ' ').trim();
|
24
|
+
}
|
25
|
+
function prependSecondExpression(expressions) {
|
26
|
+
if (expressions.length === 5) {
|
27
|
+
return ['0'].concat(expressions);
|
28
|
+
}
|
29
|
+
return expressions;
|
30
|
+
}
|
31
|
+
const months = ['january', 'february', 'march', 'april', 'may', 'june', 'july',
|
32
|
+
'august', 'september', 'october', 'november', 'december'];
|
33
|
+
const shortMonths = ['jan', 'feb', 'mar', 'apr', 'may', 'jun', 'jul', 'aug',
|
34
|
+
'sep', 'oct', 'nov', 'dec'];
|
35
|
+
function convertMonthNameI(expression, items) {
|
36
|
+
for (let i = 0; i < items.length; i++) {
|
37
|
+
expression = expression.replace(new RegExp(items[i], 'gi'), `${i + 1}`);
|
38
|
+
}
|
39
|
+
return expression;
|
40
|
+
}
|
41
|
+
function monthNamesConversion(monthExpression) {
|
42
|
+
monthExpression = convertMonthNameI(monthExpression, months);
|
43
|
+
monthExpression = convertMonthNameI(monthExpression, shortMonths);
|
44
|
+
return monthExpression;
|
45
|
+
}
|
46
|
+
const weekDays = ['sunday', 'monday', 'tuesday', 'wednesday', 'thursday',
|
47
|
+
'friday', 'saturday'];
|
48
|
+
const shortWeekDays = ['sun', 'mon', 'tue', 'wed', 'thu', 'fri', 'sat'];
|
49
|
+
function convertWeekDayName(weekExpression, items) {
|
50
|
+
for (let i = 0; i < items.length; i++) {
|
51
|
+
weekExpression = weekExpression.replace(new RegExp(items[i], 'gi'), `${i}`);
|
52
|
+
}
|
53
|
+
return weekExpression;
|
54
|
+
}
|
55
|
+
function weekDayNamesConversion(expression) {
|
56
|
+
expression = expression.replace('7', '0');
|
57
|
+
expression = convertWeekDayName(expression, weekDays);
|
58
|
+
return convertWeekDayName(expression, shortWeekDays);
|
59
|
+
}
|
60
|
+
function convertAsterisk(expression, replacement) {
|
61
|
+
if (expression.indexOf('*') !== -1) {
|
62
|
+
return expression.replace('*', replacement);
|
63
|
+
}
|
64
|
+
return expression;
|
65
|
+
}
|
66
|
+
// Based on position in full crontab, convert asterisk to appropriate range
|
67
|
+
function convertAsterisksToRanges(expressions) {
|
68
|
+
expressions[0] = convertAsterisk(expressions[0], '0-59');
|
69
|
+
expressions[1] = convertAsterisk(expressions[1], '0-59');
|
70
|
+
expressions[2] = convertAsterisk(expressions[2], '0-23');
|
71
|
+
expressions[3] = convertAsterisk(expressions[3], '1-31');
|
72
|
+
expressions[4] = convertAsterisk(expressions[4], '1-12');
|
73
|
+
expressions[5] = convertAsterisk(expressions[5], '0-6');
|
74
|
+
return expressions;
|
75
|
+
}
|
76
|
+
exports.convertAsterisksToRanges = convertAsterisksToRanges;
|
77
|
+
function replaceWithRange(expression, text, init, end) {
|
78
|
+
const numbers = [];
|
79
|
+
let last = parseInt(end);
|
80
|
+
let first = parseInt(init);
|
81
|
+
if (first > last) {
|
82
|
+
last = parseInt(init);
|
83
|
+
first = parseInt(end);
|
84
|
+
}
|
85
|
+
for (let i = first; i <= last; i++) {
|
86
|
+
numbers.push(i.toString());
|
87
|
+
}
|
88
|
+
return expression.replace(new RegExp(text, 'i'), numbers.join());
|
89
|
+
}
|
90
|
+
function convertRange(expression) {
|
91
|
+
const rangeRegEx = /(\d+)-(\d+)/;
|
92
|
+
let match = rangeRegEx.exec(expression);
|
93
|
+
while (match !== null && match.length > 0) {
|
94
|
+
expression = replaceWithRange(expression, match[0], match[1], match[2]);
|
95
|
+
match = rangeRegEx.exec(expression);
|
96
|
+
}
|
97
|
+
return expression;
|
98
|
+
}
|
99
|
+
function convertAllRanges(expressions) {
|
100
|
+
for (let i = 0; i < expressions.length; i++) {
|
101
|
+
expressions[i] = convertRange(expressions[i]);
|
102
|
+
}
|
103
|
+
return expressions;
|
104
|
+
}
|
105
|
+
function convertSteps(expressions) {
|
106
|
+
const stepValuePattern = /^(.+)\/(\w+)$/;
|
107
|
+
for (let i = 0; i < expressions.length; i++) {
|
108
|
+
const match = stepValuePattern.exec(expressions[i]);
|
109
|
+
const isStepValue = match !== null && match.length > 0;
|
110
|
+
if (isStepValue) {
|
111
|
+
const baseDivider = match[2];
|
112
|
+
if (isNaN(parseInt(baseDivider))) {
|
113
|
+
throw new Error(baseDivider + ' is not a valid step value');
|
114
|
+
}
|
115
|
+
const values = match[1].split(',');
|
116
|
+
const stepValues = [];
|
117
|
+
const divider = parseInt(baseDivider, 10);
|
118
|
+
for (let j = 0; j <= values.length; j++) {
|
119
|
+
const value = parseInt(values[j], 10);
|
120
|
+
if (value % divider === 0) {
|
121
|
+
stepValues.push(`${value}`);
|
122
|
+
}
|
123
|
+
}
|
124
|
+
expressions[i] = stepValues.join(',');
|
125
|
+
}
|
126
|
+
}
|
127
|
+
return expressions;
|
128
|
+
}
|
129
|
+
// Function that takes care of normalization.
|
130
|
+
function normalizeIntegers(expressions) {
|
131
|
+
for (let i = 0; i < expressions.length; i++) {
|
132
|
+
const numbers = expressions[i].split(',');
|
133
|
+
for (let j = 0; j < numbers.length; j++) {
|
134
|
+
numbers[j] = parseInt(numbers[j]).toString();
|
135
|
+
}
|
136
|
+
expressions[i] = numbers.join(',');
|
137
|
+
}
|
138
|
+
return expressions;
|
139
|
+
}
|
140
|
+
const validationRegex = /^(?:\d+|\*|\*\/\d+)$/;
|
141
|
+
// Check comma-delimited list to see if elements are in range
|
142
|
+
function isValidExpression(expression, min, max) {
|
143
|
+
const options = expression.split(',');
|
144
|
+
for (const option of options) {
|
145
|
+
const optionAsInt = parseInt(option, 10);
|
146
|
+
if ((!Number.isNaN(optionAsInt) &&
|
147
|
+
(optionAsInt < min || optionAsInt > max)) ||
|
148
|
+
!validationRegex.test(option)) {
|
149
|
+
return false;
|
150
|
+
}
|
151
|
+
}
|
152
|
+
return true;
|
153
|
+
}
|
154
|
+
function isInvalidSecond(expression) { return !isValidExpression(expression, 0, 59); }
|
155
|
+
function isInvalidMinute(expression) { return !isValidExpression(expression, 0, 59); }
|
156
|
+
function isInvalidHour(expression) { return !isValidExpression(expression, 0, 23); }
|
157
|
+
function isInvalidDayOfMonth(expression) { return !isValidExpression(expression, 1, 31); }
|
158
|
+
function isInvalidMonth(expression) { return !isValidExpression(expression, 1, 12); }
|
159
|
+
function isInvalidWeekDay(expression) { return !isValidExpression(expression, 0, 7); }
|
160
|
+
function validateFields(patterns, executablePatterns) {
|
161
|
+
if (isInvalidSecond(executablePatterns[0]))
|
162
|
+
throw new Error(`${patterns[0]} is a invalid expression for second`);
|
163
|
+
if (isInvalidMinute(executablePatterns[1]))
|
164
|
+
throw new Error(`${patterns[1]} is a invalid expression for minute`);
|
165
|
+
if (isInvalidHour(executablePatterns[2]))
|
166
|
+
throw new Error(`${patterns[2]} is a invalid expression for hour`);
|
167
|
+
if (isInvalidDayOfMonth(executablePatterns[3]))
|
168
|
+
throw new Error(`${patterns[3]} is a invalid expression for day of month`);
|
169
|
+
if (isInvalidMonth(executablePatterns[4]))
|
170
|
+
throw new Error(`${patterns[4]} is a invalid expression for month`);
|
171
|
+
if (isInvalidWeekDay(executablePatterns[5]))
|
172
|
+
throw new Error(`${patterns[5]} is a invalid expression for week day`);
|
173
|
+
}
|
174
|
+
/**
|
175
|
+
* Validates a Cron-Job expression pattern.
|
176
|
+
* Throws on error.
|
177
|
+
*/
|
178
|
+
function validateCrontab(pattern) {
|
179
|
+
if (typeof pattern !== 'string')
|
180
|
+
throw new TypeError('pattern must be a string!');
|
181
|
+
const patterns = pattern.split(' ');
|
182
|
+
const executablePatterns = convertExpression(pattern).split(' ');
|
183
|
+
if (patterns.length === 5)
|
184
|
+
patterns.unshift('0');
|
185
|
+
validateFields(patterns, executablePatterns);
|
186
|
+
return executablePatterns.join(' ');
|
187
|
+
}
|
188
|
+
exports.validateCrontab = validateCrontab;
|
189
|
+
/*
|
190
|
+
* The node-cron core allows only numbers (including multiple numbers e.g 1,2).
|
191
|
+
* This module is going to translate the month names, week day names and ranges
|
192
|
+
* to integers relatives.
|
193
|
+
*
|
194
|
+
* Month names example:
|
195
|
+
* - expression 0 1 1 January,Sep *
|
196
|
+
* - Will be translated to 0 1 1 1,9 *
|
197
|
+
*
|
198
|
+
* Week day names example:
|
199
|
+
* - expression 0 1 1 2 Monday,Sat
|
200
|
+
* - Will be translated to 0 1 1 1,5 *
|
201
|
+
*
|
202
|
+
* Ranges example:
|
203
|
+
* - expression 1-5 * * * *
|
204
|
+
* - Will be translated to 1,2,3,4,5 * * * *
|
205
|
+
*/
|
206
|
+
function convertExpression(crontab) {
|
207
|
+
let expressions = removeExtraSpaces(crontab).split(' ');
|
208
|
+
expressions = prependSecondExpression(expressions);
|
209
|
+
expressions[4] = monthNamesConversion(expressions[4]);
|
210
|
+
expressions[5] = weekDayNamesConversion(expressions[5]);
|
211
|
+
expressions = convertAsterisksToRanges(expressions);
|
212
|
+
expressions = convertAllRanges(expressions);
|
213
|
+
expressions = convertSteps(expressions);
|
214
|
+
expressions = normalizeIntegers(expressions);
|
215
|
+
return expressions.join(' ');
|
216
|
+
}
|
217
|
+
exports.convertExpression = convertExpression;
|
218
|
+
//////////
|
219
|
+
/// Time matcher
|
220
|
+
//////////
|
221
|
+
function matchPattern(pattern, nvalue) {
|
222
|
+
const value = `${nvalue}`;
|
223
|
+
if (pattern.indexOf(',') !== -1) {
|
224
|
+
const patterns = pattern.split(',');
|
225
|
+
return patterns.includes(value);
|
226
|
+
}
|
227
|
+
return pattern === value;
|
228
|
+
}
|
229
|
+
class TimeMatcher {
|
230
|
+
pattern;
|
231
|
+
expressions;
|
232
|
+
dtf;
|
233
|
+
timezone;
|
234
|
+
constructor(pattern, timezone) {
|
235
|
+
validateCrontab(pattern);
|
236
|
+
this.pattern = convertExpression(pattern);
|
237
|
+
this.timezone = timezone;
|
238
|
+
this.expressions = this.pattern.split(' ');
|
239
|
+
this.dtf = this.timezone
|
240
|
+
? new Intl.DateTimeFormat('en-US', {
|
241
|
+
year: 'numeric',
|
242
|
+
month: '2-digit',
|
243
|
+
day: '2-digit',
|
244
|
+
hour: '2-digit',
|
245
|
+
minute: '2-digit',
|
246
|
+
second: '2-digit',
|
247
|
+
hourCycle: 'h23',
|
248
|
+
fractionalSecondDigits: 3,
|
249
|
+
timeZone: this.timezone
|
250
|
+
}) : null;
|
251
|
+
}
|
252
|
+
match(date) {
|
253
|
+
date = this.apply(date);
|
254
|
+
const runOnSecond = matchPattern(this.expressions[0], date.getSeconds());
|
255
|
+
const runOnMinute = matchPattern(this.expressions[1], date.getMinutes());
|
256
|
+
const runOnHour = matchPattern(this.expressions[2], date.getHours());
|
257
|
+
const runOnDay = this.runsThisDay(date);
|
258
|
+
return runOnSecond && runOnMinute && runOnHour && runOnDay;
|
259
|
+
}
|
260
|
+
runsThisDay(date) {
|
261
|
+
const runOnDay = matchPattern(this.expressions[3], date.getDate());
|
262
|
+
const runOnMonth = matchPattern(this.expressions[4], date.getMonth() + 1);
|
263
|
+
const runOnWeekDay = matchPattern(this.expressions[5], date.getDay());
|
264
|
+
return runOnDay && runOnMonth && runOnWeekDay;
|
265
|
+
}
|
266
|
+
nextWakeupTime(date) {
|
267
|
+
// This is conservative. Some schedules never occur, such as the 30th of February, but you can ask for them
|
268
|
+
let msec = Math.round(date.getTime());
|
269
|
+
// This can be optimized by skipping ahead, but unit test first
|
270
|
+
for (let maxIters = 3600; --maxIters; maxIters > 0) {
|
271
|
+
msec += 1000;
|
272
|
+
const nd = new Date(msec);
|
273
|
+
if (this.match(nd))
|
274
|
+
return nd;
|
275
|
+
}
|
276
|
+
return new Date(msec);
|
277
|
+
}
|
278
|
+
apply(date) {
|
279
|
+
if (this.dtf) {
|
280
|
+
return new Date(this.dtf.format(date));
|
281
|
+
}
|
282
|
+
return date;
|
283
|
+
}
|
284
|
+
}
|
285
|
+
exports.TimeMatcher = TimeMatcher;
|
286
|
+
//# sourceMappingURL=crontab.js.map
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"file":"crontab.js","sourceRoot":"","sources":["../../../src/scheduler/crontab.ts"],"names":[],"mappings":"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"}
|
@@ -0,0 +1,45 @@
|
|
1
|
+
import { WorkflowContext } from "..";
|
2
|
+
import { DBOSExecutor } from "../dbos-executor";
|
3
|
+
import { MethodRegistration } from "../decorators";
|
4
|
+
export declare enum SchedulerMode {
|
5
|
+
ExactlyOncePerInterval = "ExactlyOncePerInterval",
|
6
|
+
ExactlyOncePerIntervalWhenActive = "ExactlyOncePerIntervalWhenActive"
|
7
|
+
}
|
8
|
+
export declare class SchedulerConfig {
|
9
|
+
crontab: string;
|
10
|
+
mode?: SchedulerMode;
|
11
|
+
}
|
12
|
+
export type ScheduledArgs = [Date, Date];
|
13
|
+
export interface SchedulerRegistrationConfig {
|
14
|
+
schedulerConfig?: SchedulerConfig;
|
15
|
+
}
|
16
|
+
export declare class SchedulerRegistration<This, Args extends unknown[], Return> extends MethodRegistration<This, Args, Return> implements SchedulerRegistrationConfig {
|
17
|
+
schedulerConfig?: SchedulerConfig;
|
18
|
+
constructor(origFunc: (this: This, ...args: Args) => Promise<Return>);
|
19
|
+
}
|
20
|
+
export declare function Scheduled(schedulerConfig: SchedulerConfig): <This, Ctx extends WorkflowContext, Return>(target: object, propertyKey: string, inDescriptor: TypedPropertyDescriptor<(this: This, ctx: Ctx, args_0: Date, args_1: Date) => Promise<Return>>) => TypedPropertyDescriptor<(this: This, ctx: Ctx, args_1: Date, args_2: Date) => Promise<Return>>;
|
21
|
+
export declare class DBOSScheduler {
|
22
|
+
readonly dbosExec: DBOSExecutor;
|
23
|
+
constructor(dbosExec: DBOSExecutor);
|
24
|
+
schedLoops: DetachableLoop[];
|
25
|
+
schedTasks: Promise<void>[];
|
26
|
+
initScheduler(): void;
|
27
|
+
destroyScheduler(): Promise<void>;
|
28
|
+
logRegisteredSchedulerEndpoints(): void;
|
29
|
+
}
|
30
|
+
declare class DetachableLoop {
|
31
|
+
readonly dbosExec: DBOSExecutor;
|
32
|
+
readonly crontab: string;
|
33
|
+
readonly schedMode: SchedulerMode;
|
34
|
+
readonly scheduledMethod: SchedulerRegistration<unknown, unknown[], unknown>;
|
35
|
+
private isRunning;
|
36
|
+
private interruptResolve?;
|
37
|
+
private lastExec;
|
38
|
+
private timeMatcher;
|
39
|
+
constructor(dbosExec: DBOSExecutor, crontab: string, schedMode: SchedulerMode, scheduledMethod: SchedulerRegistration<unknown, unknown[], unknown>);
|
40
|
+
startLoop(): Promise<void>;
|
41
|
+
setStopLoopFlag(): void;
|
42
|
+
private sleepms;
|
43
|
+
}
|
44
|
+
export {};
|
45
|
+
//# sourceMappingURL=scheduler.d.ts.map
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"file":"scheduler.d.ts","sourceRoot":"","sources":["../../../src/scheduler/scheduler.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,IAAI,CAAC;AACrC,OAAO,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAC;AAChD,OAAO,EAAE,kBAAkB,EAA2B,MAAM,eAAe,CAAC;AAQ5E,oBAAY,aAAa;IACrB,sBAAsB,2BAA2B;IACjD,gCAAgC,qCAAqC;CACxE;AAED,qBAAa,eAAe;IACxB,OAAO,EAAE,MAAM,CAAe;IAC9B,IAAK,CAAC,EAAE,aAAa,CAAwC;CAChE;AAOD,MAAM,MAAM,aAAa,GAAG,CAAC,IAAI,EAAE,IAAI,CAAC,CAAA;AAExC,MAAM,WAAW,2BAA2B;IACxC,eAAe,CAAC,EAAE,eAAe,CAAC;CACrC;AAED,qBAAa,qBAAqB,CAAC,IAAI,EAAE,IAAI,SAAS,OAAO,EAAE,EAAE,MAAM,CAAE,SAAQ,kBAAkB,CAAC,IAAI,EAAE,IAAI,EAAE,MAAM,CAClH,YAAW,2BAA2B;IAEtC,eAAe,CAAC,EAAE,eAAe,CAAC;gBACtB,QAAQ,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,GAAG,IAAI,EAAE,IAAI,KAAK,OAAO,CAAC,MAAM,CAAC;CAGvE;AAED,wBAAgB,SAAS,CAAC,eAAe,EAAE,eAAe,uDAE1C,MAAM,eACD,MAAM,kNAU1B;AAMD,qBAAa,aAAa;IACV,QAAQ,CAAC,QAAQ,EAAE,YAAY;gBAAtB,QAAQ,EAAE,YAAY;IAE3C,UAAU,EAAE,cAAc,EAAE,CAAM;IAClC,UAAU,EAAE,OAAO,CAAC,IAAI,CAAC,EAAG,CAAM;IAElC,aAAa;IAgBP,gBAAgB;IActB,+BAA+B;CAUlC;AAED,cAAM,cAAc;IAMJ,QAAQ,CAAC,QAAQ,EAAE,YAAY;IAAE,QAAQ,CAAC,OAAO,EAAE,MAAM;IAAE,QAAQ,CAAC,SAAS,EAAC,aAAa;IAC3F,QAAQ,CAAC,eAAe,EAAE,qBAAqB,CAAC,OAAO,EAAE,OAAO,EAAE,EAAE,OAAO,CAAC;IANxF,OAAO,CAAC,SAAS,CAAkB;IACnC,OAAO,CAAC,gBAAgB,CAAC,CAAa;IACtC,OAAO,CAAC,QAAQ,CAAO;IACvB,OAAO,CAAC,WAAW,CAAc;gBAEZ,QAAQ,EAAE,YAAY,EAAW,OAAO,EAAE,MAAM,EAAW,SAAS,EAAC,aAAa,EAClF,eAAe,EAAE,qBAAqB,CAAC,OAAO,EAAE,OAAO,EAAE,EAAE,OAAO,CAAC;IAOlF,SAAS,IAAI,OAAO,CAAC,IAAI,CAAC;IA8DhC,eAAe;IAQf,OAAO,CAAC,OAAO;CAGlB"}
|
@@ -0,0 +1,165 @@
|
|
1
|
+
"use strict";
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
3
|
+
exports.DBOSScheduler = exports.Scheduled = exports.SchedulerRegistration = exports.SchedulerConfig = exports.SchedulerMode = void 0;
|
4
|
+
const decorators_1 = require("../decorators");
|
5
|
+
const crontab_1 = require("./crontab");
|
6
|
+
////
|
7
|
+
// Configuration
|
8
|
+
////
|
9
|
+
var SchedulerMode;
|
10
|
+
(function (SchedulerMode) {
|
11
|
+
SchedulerMode["ExactlyOncePerInterval"] = "ExactlyOncePerInterval";
|
12
|
+
SchedulerMode["ExactlyOncePerIntervalWhenActive"] = "ExactlyOncePerIntervalWhenActive";
|
13
|
+
})(SchedulerMode || (exports.SchedulerMode = SchedulerMode = {}));
|
14
|
+
class SchedulerConfig {
|
15
|
+
crontab = '* * * * *'; // Every minute
|
16
|
+
mode = SchedulerMode.ExactlyOncePerInterval;
|
17
|
+
}
|
18
|
+
exports.SchedulerConfig = SchedulerConfig;
|
19
|
+
class SchedulerRegistration extends decorators_1.MethodRegistration {
|
20
|
+
schedulerConfig;
|
21
|
+
constructor(origFunc) {
|
22
|
+
super(origFunc);
|
23
|
+
}
|
24
|
+
}
|
25
|
+
exports.SchedulerRegistration = SchedulerRegistration;
|
26
|
+
function Scheduled(schedulerConfig) {
|
27
|
+
function scheddec(target, propertyKey, inDescriptor) {
|
28
|
+
const { descriptor, registration } = (0, decorators_1.registerAndWrapFunction)(target, propertyKey, inDescriptor);
|
29
|
+
const schedRegistration = registration;
|
30
|
+
schedRegistration.schedulerConfig = schedulerConfig;
|
31
|
+
return descriptor;
|
32
|
+
}
|
33
|
+
return scheddec;
|
34
|
+
}
|
35
|
+
exports.Scheduled = Scheduled;
|
36
|
+
///////////////////////////
|
37
|
+
// Scheduler Management
|
38
|
+
///////////////////////////
|
39
|
+
class DBOSScheduler {
|
40
|
+
dbosExec;
|
41
|
+
constructor(dbosExec) {
|
42
|
+
this.dbosExec = dbosExec;
|
43
|
+
}
|
44
|
+
schedLoops = [];
|
45
|
+
schedTasks = [];
|
46
|
+
initScheduler() {
|
47
|
+
for (const registeredOperation of this.dbosExec.registeredOperations) {
|
48
|
+
const ro = registeredOperation;
|
49
|
+
if (ro.schedulerConfig) {
|
50
|
+
const loop = new DetachableLoop(this.dbosExec, ro.schedulerConfig.crontab ?? '* * * * *', ro.schedulerConfig.mode ?? SchedulerMode.ExactlyOncePerInterval, ro);
|
51
|
+
this.schedLoops.push(loop);
|
52
|
+
this.schedTasks.push(loop.startLoop());
|
53
|
+
}
|
54
|
+
}
|
55
|
+
}
|
56
|
+
async destroyScheduler() {
|
57
|
+
for (const l of this.schedLoops) {
|
58
|
+
l.setStopLoopFlag();
|
59
|
+
}
|
60
|
+
this.schedLoops = [];
|
61
|
+
try {
|
62
|
+
await Promise.allSettled(this.schedTasks);
|
63
|
+
}
|
64
|
+
catch (e) {
|
65
|
+
// What gets caught here is the loop stopping, which is what we wanted.
|
66
|
+
}
|
67
|
+
this.schedTasks = [];
|
68
|
+
}
|
69
|
+
logRegisteredSchedulerEndpoints() {
|
70
|
+
const logger = this.dbosExec.logger;
|
71
|
+
logger.info("Scheduled endpoints:");
|
72
|
+
this.dbosExec.registeredOperations.forEach((registeredOperation) => {
|
73
|
+
const ro = registeredOperation;
|
74
|
+
if (ro.schedulerConfig) {
|
75
|
+
logger.info(` ${ro.name} @ ${ro.schedulerConfig.crontab}; ${ro.schedulerConfig.mode ?? SchedulerMode.ExactlyOncePerInterval}`);
|
76
|
+
}
|
77
|
+
});
|
78
|
+
}
|
79
|
+
}
|
80
|
+
exports.DBOSScheduler = DBOSScheduler;
|
81
|
+
class DetachableLoop {
|
82
|
+
dbosExec;
|
83
|
+
crontab;
|
84
|
+
schedMode;
|
85
|
+
scheduledMethod;
|
86
|
+
isRunning = false;
|
87
|
+
interruptResolve;
|
88
|
+
lastExec;
|
89
|
+
timeMatcher;
|
90
|
+
constructor(dbosExec, crontab, schedMode, scheduledMethod) {
|
91
|
+
this.dbosExec = dbosExec;
|
92
|
+
this.crontab = crontab;
|
93
|
+
this.schedMode = schedMode;
|
94
|
+
this.scheduledMethod = scheduledMethod;
|
95
|
+
this.lastExec = new Date();
|
96
|
+
this.lastExec.setMilliseconds(0);
|
97
|
+
this.timeMatcher = new crontab_1.TimeMatcher(crontab);
|
98
|
+
}
|
99
|
+
async startLoop() {
|
100
|
+
// See if the exec time is available in durable storage...
|
101
|
+
if (this.schedMode !== SchedulerMode.ExactlyOncePerInterval) {
|
102
|
+
const lasttm = await this.dbosExec.systemDatabase.getLastScheduledTime(this.scheduledMethod.name);
|
103
|
+
if (lasttm) {
|
104
|
+
this.lastExec = new Date(lasttm);
|
105
|
+
}
|
106
|
+
}
|
107
|
+
this.isRunning = true;
|
108
|
+
while (this.isRunning) {
|
109
|
+
const nextExecTime = this.timeMatcher.nextWakeupTime(this.lastExec);
|
110
|
+
const sleepTime = nextExecTime.getTime() - new Date().getTime();
|
111
|
+
if (sleepTime > 0) {
|
112
|
+
// Wait for either the timeout or an interruption
|
113
|
+
await Promise.race([
|
114
|
+
this.sleepms(sleepTime),
|
115
|
+
new Promise((_, reject) => this.interruptResolve = reject)
|
116
|
+
])
|
117
|
+
.catch(); // Interrupt sleep throws
|
118
|
+
}
|
119
|
+
if (!this.isRunning) {
|
120
|
+
break;
|
121
|
+
}
|
122
|
+
// Check crontab
|
123
|
+
// If this "wake up" time is not on the schedule, we shouldn't execute.
|
124
|
+
// (While ATOW this wake-up time is a scheduled run time, it is not
|
125
|
+
// contractually obligated to be so. If this is obligated to be a
|
126
|
+
// scheduled execution time, then we could make this an assertion
|
127
|
+
// instead of a check.)
|
128
|
+
if (!this.timeMatcher.match(nextExecTime)) {
|
129
|
+
this.lastExec = nextExecTime;
|
130
|
+
continue;
|
131
|
+
}
|
132
|
+
// Init workflow
|
133
|
+
const workflowUUID = `sched-${this.scheduledMethod.name}-${nextExecTime.toISOString()}`;
|
134
|
+
this.dbosExec.logger.debug(`Executing scheduled workflow ${workflowUUID}`);
|
135
|
+
const wfParams = { workflowUUID: workflowUUID };
|
136
|
+
// All operations annotated with Scheduled decorators must take in these four
|
137
|
+
const args = [nextExecTime, new Date()];
|
138
|
+
// We currently only support scheduled workflows
|
139
|
+
if (this.scheduledMethod.workflowConfig) {
|
140
|
+
// Execute the workflow
|
141
|
+
await this.dbosExec.workflow(this.scheduledMethod.registeredFunction, wfParams, ...args);
|
142
|
+
}
|
143
|
+
else {
|
144
|
+
this.dbosExec.logger.error(`Function ${this.scheduledMethod.name} is @scheduled but not a workflow`);
|
145
|
+
}
|
146
|
+
// Record the time of the wf kicked off
|
147
|
+
const dbTime = await this.dbosExec.systemDatabase.setLastScheduledTime(this.scheduledMethod.name, nextExecTime.getTime());
|
148
|
+
if (dbTime && dbTime > nextExecTime.getTime())
|
149
|
+
nextExecTime.setTime(dbTime);
|
150
|
+
this.lastExec = nextExecTime;
|
151
|
+
}
|
152
|
+
}
|
153
|
+
setStopLoopFlag() {
|
154
|
+
if (!this.isRunning)
|
155
|
+
return;
|
156
|
+
this.isRunning = false;
|
157
|
+
if (this.interruptResolve) {
|
158
|
+
this.interruptResolve(); // Trigger the interruption
|
159
|
+
}
|
160
|
+
}
|
161
|
+
sleepms(ms) {
|
162
|
+
return new Promise(resolve => setTimeout(resolve, ms));
|
163
|
+
}
|
164
|
+
}
|
165
|
+
//# sourceMappingURL=scheduler.js.map
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"file":"scheduler.js","sourceRoot":"","sources":["../../../src/scheduler/scheduler.ts"],"names":[],"mappings":"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"}
|
@@ -24,6 +24,8 @@ export interface SystemDatabase {
|
|
24
24
|
recv<T extends NonNullable<any>>(workflowUUID: string, functionID: number, topic?: string, timeoutSeconds?: number): Promise<T | null>;
|
25
25
|
setEvent<T extends NonNullable<any>>(workflowUUID: string, functionID: number, key: string, value: T): Promise<void>;
|
26
26
|
getEvent<T extends NonNullable<any>>(workflowUUID: string, key: string, timeoutSeconds: number, callerUUID?: string, functionID?: number): Promise<T | null>;
|
27
|
+
getLastScheduledTime(wfn: string): Promise<number | null>;
|
28
|
+
setLastScheduledTime(wfn: string, invtime: number): Promise<number | null>;
|
27
29
|
}
|
28
30
|
export interface WorkflowStatusInternal {
|
29
31
|
workflowUUID: string;
|
@@ -91,5 +93,7 @@ export declare class PostgresSystemDatabase implements SystemDatabase {
|
|
91
93
|
* workflow listener by resolving its promise.
|
92
94
|
*/
|
93
95
|
listenForNotifications(): Promise<void>;
|
96
|
+
getLastScheduledTime(wfn: string): Promise<number | null>;
|
97
|
+
setLastScheduledTime(wfn: string, invtime: number): Promise<number | null>;
|
94
98
|
}
|
95
99
|
//# sourceMappingURL=system_database.d.ts.map
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"system_database.d.ts","sourceRoot":"","sources":["../../src/system_database.ts"],"names":[],"mappings":"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
|
1
|
+
{"version":3,"file":"system_database.d.ts","sourceRoot":"","sources":["../../src/system_database.ts"],"names":[],"mappings":"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"}
|
@@ -502,6 +502,28 @@ class PostgresSystemDatabase {
|
|
502
502
|
};
|
503
503
|
this.notificationsClient.on("notification", handler);
|
504
504
|
}
|
505
|
+
/* SCHEDULER */
|
506
|
+
async getLastScheduledTime(wfn) {
|
507
|
+
const res = await this.pool.query(`
|
508
|
+
SELECT last_run_time
|
509
|
+
FROM ${dbos_executor_1.DBOSExecutor.systemDBSchemaName}.scheduler_state
|
510
|
+
WHERE workflow_fn_name = $1;
|
511
|
+
`, [wfn]);
|
512
|
+
let v = res.rows[0]?.last_run_time ?? null;
|
513
|
+
if (v !== null)
|
514
|
+
v = parseInt(`${v}`);
|
515
|
+
return v;
|
516
|
+
}
|
517
|
+
async setLastScheduledTime(wfn, invtime) {
|
518
|
+
const res = await this.pool.query(`
|
519
|
+
INSERT INTO ${dbos_executor_1.DBOSExecutor.systemDBSchemaName}.scheduler_state (workflow_fn_name, last_run_time)
|
520
|
+
VALUES ($1, $2)
|
521
|
+
ON CONFLICT (workflow_fn_name)
|
522
|
+
DO UPDATE SET last_run_time = GREATEST(EXCLUDED.last_run_time, scheduler_state.last_run_time)
|
523
|
+
RETURNING last_run_time;
|
524
|
+
`, [wfn, invtime]);
|
525
|
+
return parseInt(`${res.rows[0].last_run_time}`);
|
526
|
+
}
|
505
527
|
}
|
506
528
|
exports.PostgresSystemDatabase = PostgresSystemDatabase;
|
507
529
|
//# sourceMappingURL=system_database.js.map
|