@dbos-inc/dbos-sdk 1.8.23-preview.g8060c74f33 → 1.9.5-preview
Sign up to get free protection for your applications and to get access to all the features.
- 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":";;;AAEA,8CAA4E;AAC5E,uCAAwC;AAGxC,IAAI;AACJ,gBAAgB;AAChB,IAAI;AAEJ,IAAY,aAGX;AAHD,WAAY,aAAa;IACrB,kEAAiD,CAAA;IACjD,sFAAqE,CAAA;AACzE,CAAC,EAHW,aAAa,6BAAb,aAAa,QAGxB;AAED,MAAa,eAAe;IACxB,OAAO,GAAW,WAAW,CAAC,CAAC,eAAe;IAC9C,IAAI,GAAoB,aAAa,CAAC,sBAAsB,CAAC;CAChE;AAHD,0CAGC;AAaD,MAAa,qBAA4D,SAAQ,+BAAsC;IAGnH,eAAe,CAAmB;IAClC,YAAY,QAAwD;QAChE,KAAK,CAAC,QAAQ,CAAC,CAAC;IACpB,CAAC;CACJ;AAPD,sDAOC;AAED,SAAgB,SAAS,CAAC,eAAgC;IACtD,SAAS,QAAQ,CACb,MAAc,EACd,WAAmB,EACnB,YAAwG;QAExG,MAAM,EAAE,UAAU,EAAE,YAAY,EAAE,GAAG,IAAA,oCAAuB,EAAC,MAAM,EAAE,WAAW,EAAE,YAAY,CAAC,CAAC;QAChG,MAAM,iBAAiB,GAAG,YAA6E,CAAC;QACxG,iBAAiB,CAAC,eAAe,GAAG,eAAe,CAAC;QAEpD,OAAO,UAAU,CAAC;IACtB,CAAC;IACD,OAAO,QAAQ,CAAC;AACpB,CAAC;AAbD,8BAaC;AAED,2BAA2B;AAC3B,uBAAuB;AACvB,2BAA2B;AAE3B,MAAa,aAAa;IACD;IAArB,YAAqB,QAAsB;QAAtB,aAAQ,GAAR,QAAQ,CAAc;IAAG,CAAC;IAE/C,UAAU,GAAqB,EAAE,CAAC;IAClC,UAAU,GAAqB,EAAE,CAAC;IAElC,aAAa;QACT,KAAK,MAAM,mBAAmB,IAAI,IAAI,CAAC,QAAQ,CAAC,oBAAoB,EAAE,CAAC;YACnE,MAAM,EAAE,GAAG,mBAAyE,CAAC;YACrF,IAAI,EAAE,CAAC,eAAe,EAAE,CAAC;gBACrB,MAAM,IAAI,GAAG,IAAI,cAAc,CAC3B,IAAI,CAAC,QAAQ,EACb,EAAE,CAAC,eAAe,CAAC,OAAO,IAAI,WAAW,EACzC,EAAE,CAAC,eAAe,CAAC,IAAI,IAAI,aAAa,CAAC,sBAAsB,EAC/D,EAAE,CACL,CAAC;gBACF,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;gBAC3B,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,CAAC,CAAC;YAC3C,CAAC;QACL,CAAC;IACL,CAAC;IAED,KAAK,CAAC,gBAAgB;QAClB,KAAK,MAAM,CAAC,IAAI,IAAI,CAAC,UAAU,EAAE,CAAC;YAC9B,CAAC,CAAC,eAAe,EAAE,CAAC;QACxB,CAAC;QACD,IAAI,CAAC,UAAU,GAAG,EAAE,CAAC;QACrB,IAAI,CAAC;YACF,MAAM,OAAO,CAAC,UAAU,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;QAC7C,CAAC;QACD,OAAO,CAAC,EAAE,CAAC;YACR,wEAAwE;QAC3E,CAAC;QACD,IAAI,CAAC,UAAU,GAAG,EAAE,CAAC;IACzB,CAAC;IAED,+BAA+B;QAC3B,MAAM,MAAM,GAAG,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC;QACpC,MAAM,CAAC,IAAI,CAAC,sBAAsB,CAAC,CAAC;QACpC,IAAI,CAAC,QAAQ,CAAC,oBAAoB,CAAC,OAAO,CAAC,CAAC,mBAAmB,EAAE,EAAE;YAC/D,MAAM,EAAE,GAAG,mBAAyE,CAAC;YACrF,IAAI,EAAE,CAAC,eAAe,EAAE,CAAC;gBACrB,MAAM,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC,IAAI,MAAM,EAAE,CAAC,eAAe,CAAC,OAAO,KAAK,EAAE,CAAC,eAAe,CAAC,IAAI,IAAI,aAAa,CAAC,sBAAsB,EAAE,CAAC,CAAC;YACtI,CAAC;QACL,CAAC,CAAC,CAAC;IACP,CAAC;CACJ;AA9CD,sCA8CC;AAED,MAAM,cAAc;IAMK;IAAiC;IAA0B;IAC3D;IANb,SAAS,GAAY,KAAK,CAAC;IAC3B,gBAAgB,CAAc;IAC9B,QAAQ,CAAO;IACf,WAAW,CAAc;IAEjC,YAAqB,QAAsB,EAAW,OAAe,EAAW,SAAuB,EAClF,eAAmE;QADnE,aAAQ,GAAR,QAAQ,CAAc;QAAW,YAAO,GAAP,OAAO,CAAQ;QAAW,cAAS,GAAT,SAAS,CAAc;QAClF,oBAAe,GAAf,eAAe,CAAoD;QAEpF,IAAI,CAAC,QAAQ,GAAG,IAAI,IAAI,EAAE,CAAC;QAC3B,IAAI,CAAC,QAAQ,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC;QACjC,IAAI,CAAC,WAAW,GAAG,IAAI,qBAAW,CAAC,OAAO,CAAC,CAAC;IAChD,CAAC;IAED,KAAK,CAAC,SAAS;QACX,0DAA0D;QAC1D,IAAI,IAAI,CAAC,SAAS,KAAK,aAAa,CAAC,sBAAsB,EAC3D,CAAC;YACG,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,QAAQ,CAAC,cAAc,CAAC,oBAAoB,CAAC,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,CAAC;YAClG,IAAI,MAAM,EAAE,CAAC;gBACT,IAAI,CAAC,QAAQ,GAAG,IAAI,IAAI,CAAC,MAAM,CAAC,CAAC;YACrC,CAAC;QACL,CAAC;QAED,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC;QACtB,OAAO,IAAI,CAAC,SAAS,EAAE,CAAC;YACpB,MAAM,YAAY,GAAG,IAAI,CAAC,WAAW,CAAC,cAAc,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;YACpE,MAAM,SAAS,GAAG,YAAY,CAAC,OAAO,EAAE,GAAG,IAAI,IAAI,EAAE,CAAC,OAAO,EAAE,CAAC;YAEhE,IAAI,SAAS,GAAG,CAAC,EAAE,CAAC;gBAChB,iDAAiD;gBACjD,MAAM,OAAO,CAAC,IAAI,CAAC;oBACf,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC;oBACvB,IAAI,OAAO,CAAO,CAAC,CAAC,EAAE,MAAM,EAAE,EAAE,CAAC,IAAI,CAAC,gBAAgB,GAAG,MAAM,CAAC;iBACnE,CAAC;qBACD,KAAK,EAAE,CAAC,CAAC,yBAAyB;YACvC,CAAC;YAED,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,CAAC;gBAClB,MAAM;YACV,CAAC;YAED,gBAAgB;YAChB,uEAAuE;YACvE,oEAAoE;YACpE,oEAAoE;YACpE,mEAAmE;YACnE,yBAAyB;YACzB,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,YAAY,CAAC,EAAE,CAAC;gBACxC,IAAI,CAAC,QAAQ,GAAG,YAAY,CAAC;gBAC7B,SAAS;YACb,CAAC;YAED,gBAAgB;YAChB,MAAM,YAAY,GAAG,SAAS,IAAI,CAAC,eAAe,CAAC,IAAI,IAAI,YAAY,CAAC,WAAW,EAAE,EAAE,CAAC;YACxF,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,KAAK,CAAC,gCAAgC,YAAY,EAAE,CAAC,CAAC;YAC3E,MAAM,QAAQ,GAAG,EAAE,YAAY,EAAE,YAAY,EAAE,CAAC;YAChD,6EAA6E;YAC7E,MAAM,IAAI,GAAkB,CAAC,YAAY,EAAE,IAAI,IAAI,EAAE,CAAC,CAAC;YAEvD,gDAAgD;YAChD,IAAI,IAAI,CAAC,eAAe,CAAC,cAAc,EAAE,CAAC;gBACtC,uBAAuB;gBACvB,MAAM,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI,CAAC,eAAe,CAAC,kBAAsD,EAAE,QAAQ,EAAE,GAAG,IAAI,CAAC,CAAC;YACjI,CAAC;iBACI,CAAC;gBACF,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,KAAK,CAAC,YAAY,IAAI,CAAC,eAAe,CAAC,IAAI,mCAAmC,CAAC,CAAC;YACzG,CAAC;YAED,uCAAuC;YACvC,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,QAAQ,CAAC,cAAc,CAAC,oBAAoB,CAAC,IAAI,CAAC,eAAe,CAAC,IAAI,EAAE,YAAY,CAAC,OAAO,EAAE,CAAC,CAAC;YAC1H,IAAI,MAAM,IAAI,MAAM,GAAG,YAAY,CAAC,OAAO,EAAE;gBAAE,YAAY,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;YAC5E,IAAI,CAAC,QAAQ,GAAG,YAAY,CAAC;QACjC,CAAC;IACL,CAAC;IAED,eAAe;QACX,IAAI,CAAC,IAAI,CAAC,SAAS;YAAE,OAAO;QAC5B,IAAI,CAAC,SAAS,GAAG,KAAK,CAAC;QACvB,IAAI,IAAI,CAAC,gBAAgB,EAAE,CAAC;YACxB,IAAI,CAAC,gBAAgB,EAAE,CAAC,CAAC,2BAA2B;QACxD,CAAC;IACL,CAAC;IAEO,OAAO,CAAC,EAAU;QACtB,OAAO,IAAI,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC,UAAU,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC,CAAC;IAC3D,CAAC;CACJ"}
|
@@ -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
|