@spinajs/tasks 2.0.554 → 2.0.555

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.
@@ -11,14 +11,38 @@ export interface TaskOptions {
11
11
  lockTtl: number;
12
12
  }
13
13
  export declare const DEFAULT_TASK_OPTIONS: TaskOptions;
14
+ export interface TaskDeclaration {
15
+ name: string;
16
+ description: string;
17
+ options: TaskOptions;
18
+ /** The class that declares the method (the constructor itself for a static method). */
19
+ target: Function;
20
+ isStatic: boolean;
21
+ propertyKey: string | symbol;
22
+ /** The undecorated method. */
23
+ method: (...args: any[]) => unknown;
24
+ }
25
+ export interface RunTaskOptions {
26
+ /** false: skip the task mutex, its heartbeat and the in-process guard (the caller holds a lock of its own). */
27
+ lock: boolean;
28
+ /** true: rethrow the task's error after history is written, instead of resolving with `{ error: true }`. */
29
+ rethrow: boolean;
30
+ }
31
+ export declare function getTaskDeclarations(name?: string): TaskDeclaration[];
32
+ /**
33
+ * Runs a task method with the `@Task` bookkeeping: `__tasks` state, a `__task_history` row and
34
+ * TaskSuccess / TaskFailed. The decorator calls it with `{ lock: true, rethrow: false }`.
35
+ */
36
+ export declare function runTask(decl: TaskDeclaration, thisArg: unknown, args: unknown[], opts: RunTaskOptions): Promise<unknown>;
14
37
  /**
15
38
  * Marks a method as a task: records runs in `__tasks` / `__task_history`, emits
16
39
  * TaskSuccess / TaskFailed and, unless `taskStacking` is set, lets only one run
17
- * happen at a time across all processes sharing the database.
40
+ * happen at a time across all processes sharing the database. The declaration is
41
+ * also recorded, so `@spinajs/scheduler` can schedule the method by task name.
18
42
  *
19
43
  * @param taskName - unique task name
20
44
  * @param description - short description
21
45
  * @param opts - see {@link TaskOptions}, defaults to {@link DEFAULT_TASK_OPTIONS}
22
46
  */
23
- export declare function Task(taskName: string, description: string, opts?: Partial<TaskOptions>): (_target: any, _propertyKey: string | symbol, descriptor: PropertyDescriptor) => void;
47
+ export declare function Task(taskName: string, description: string, opts?: Partial<TaskOptions>): (target: any, propertyKey: string | symbol, descriptor: PropertyDescriptor) => void;
24
48
  //# sourceMappingURL=decorators.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"decorators.d.ts","sourceRoot":"","sources":["../../src/decorators.ts"],"names":[],"mappings":"AAUA,eAAO,MAAM,YAAY,iBAAiB,CAAC;AAE3C,MAAM,WAAW,WAAW;IAC1B;;OAEG;IACH,YAAY,EAAE,OAAO,CAAC;IAEtB;;;OAGG;IACH,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,eAAO,MAAM,oBAAoB,EAAE,WAGlC,CAAC;AAqDF;;;;;;;;GAQG;AACH,wBAAgB,IAAI,CAAC,QAAQ,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,OAAO,CAAC,WAAW,CAAC,aAK3D,GAAG,gBAAgB,MAAM,GAAG,MAAM,cAAc,kBAAkB,UAyE7F"}
1
+ {"version":3,"file":"decorators.d.ts","sourceRoot":"","sources":["../../src/decorators.ts"],"names":[],"mappings":"AAUA,eAAO,MAAM,YAAY,iBAAiB,CAAC;AAE3C,MAAM,WAAW,WAAW;IAC1B;;OAEG;IACH,YAAY,EAAE,OAAO,CAAC;IAEtB;;;OAGG;IACH,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,eAAO,MAAM,oBAAoB,EAAE,WAGlC,CAAC;AAqDF,MAAM,WAAW,eAAe;IAC9B,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,OAAO,EAAE,WAAW,CAAC;IACrB,uFAAuF;IACvF,MAAM,EAAE,QAAQ,CAAC;IACjB,QAAQ,EAAE,OAAO,CAAC;IAClB,WAAW,EAAE,MAAM,GAAG,MAAM,CAAC;IAC7B,8BAA8B;IAC9B,MAAM,EAAE,CAAC,GAAG,IAAI,EAAE,GAAG,EAAE,KAAK,OAAO,CAAC;CACrC;AAED,MAAM,WAAW,cAAc;IAC7B,+GAA+G;IAC/G,IAAI,EAAE,OAAO,CAAC;IACd,4GAA4G;IAC5G,OAAO,EAAE,OAAO,CAAC;CAClB;AAID,wBAAgB,mBAAmB,CAAC,IAAI,CAAC,EAAE,MAAM,GAAG,eAAe,EAAE,CAKpE;AAQD;;;GAGG;AACH,wBAAsB,OAAO,CAC3B,IAAI,EAAE,eAAe,EACrB,OAAO,EAAE,OAAO,EAChB,IAAI,EAAE,OAAO,EAAE,EACf,IAAI,EAAE,cAAc,GACnB,OAAO,CAAC,OAAO,CAAC,CAsFlB;AAED;;;;;;;;;GASG;AACH,wBAAgB,IAAI,CAAC,QAAQ,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,OAAO,CAAC,WAAW,CAAC,YAK5D,GAAG,eAAe,MAAM,GAAG,MAAM,cAAc,kBAAkB,UAiB3F"}
@@ -1,6 +1,8 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.DEFAULT_TASK_OPTIONS = exports.TASK_COMMAND = void 0;
4
+ exports.getTaskDeclarations = getTaskDeclarations;
5
+ exports.runTask = runTask;
4
6
  exports.Task = Task;
5
7
  const threading_1 = require("@spinajs/threading");
6
8
  const util_1 = require("@spinajs/util");
@@ -57,10 +59,112 @@ async function lockTask(name, opts, log) {
57
59
  await (0, threading_1.mutex_release)({ Name: mutexName });
58
60
  };
59
61
  }
62
+ const declarations = new Map();
63
+ function getTaskDeclarations(name) {
64
+ if (name !== undefined) {
65
+ return [...(declarations.get(name) ?? [])];
66
+ }
67
+ return [...declarations.values()].flat();
68
+ }
69
+ function errorMessage(err) {
70
+ return err?.message ?? String(err);
71
+ }
72
+ const NO_LOCK = () => Promise.resolve();
73
+ /**
74
+ * Runs a task method with the `@Task` bookkeeping: `__tasks` state, a `__task_history` row and
75
+ * TaskSuccess / TaskFailed. The decorator calls it with `{ lock: true, rethrow: false }`.
76
+ */
77
+ async function runTask(decl, thisArg, args, opts) {
78
+ const log = di_1.DI.resolve('__log__', ['TASKS']);
79
+ log.info(`Executing task ${decl.name} ...`);
80
+ let task;
81
+ let unlock;
82
+ try {
83
+ task = await __task_js_1.__task.getOrCreate(null, {
84
+ Name: decl.name,
85
+ Description: decl.description,
86
+ State: 'stopped',
87
+ });
88
+ const lock = opts.lock ? await lockTask(decl.name, decl.options, log) : NO_LOCK;
89
+ if (!lock) {
90
+ return undefined;
91
+ }
92
+ unlock = lock;
93
+ try {
94
+ task.State = 'running';
95
+ task.LastRunAt = luxon_1.DateTime.now();
96
+ await task.update();
97
+ }
98
+ catch (err) {
99
+ await unlock();
100
+ throw err;
101
+ }
102
+ }
103
+ catch (err) {
104
+ log.error(err, `Cannot start task ${decl.name}`);
105
+ throw err;
106
+ }
107
+ let taskResult = null;
108
+ let failure = null;
109
+ const start = luxon_1.DateTime.now();
110
+ try {
111
+ try {
112
+ taskResult = await decl.method.apply(thisArg, args);
113
+ }
114
+ catch (err) {
115
+ failure = { error: err };
116
+ log.error(err, `Cannot execute task ${decl.name}`);
117
+ taskResult = {
118
+ error: true,
119
+ message: errorMessage(err),
120
+ };
121
+ }
122
+ // An emit failure (queue outage) is logged only: it must not turn a run whose side effects
123
+ // already happened into a failure that a caller would retry.
124
+ try {
125
+ if (failure) {
126
+ await TaskFailed_js_1.TaskFailed.emit({
127
+ TaskName: decl.name,
128
+ Reason: errorMessage(failure.error),
129
+ });
130
+ }
131
+ else {
132
+ await TaskSuccess_js_1.TaskSuccess.emit({
133
+ TaskName: decl.name,
134
+ });
135
+ log.success(`Task ${decl.name} executed !`);
136
+ }
137
+ }
138
+ catch (emitErr) {
139
+ log.error(emitErr, `Cannot emit ${failure ? 'TaskFailed' : 'TaskSuccess'} for ${decl.name}`);
140
+ }
141
+ }
142
+ finally {
143
+ try {
144
+ await unlock();
145
+ await task.update({
146
+ State: 'stopped',
147
+ });
148
+ await __task_history_js_1.__task_history.insert({
149
+ TaskId: task.Id,
150
+ Result: taskResult,
151
+ Duration: luxon_1.DateTime.now().diff(start).milliseconds,
152
+ });
153
+ }
154
+ catch (err) {
155
+ log.error(err, `Cannot finalize task`);
156
+ }
157
+ }
158
+ if (failure && opts.rethrow) {
159
+ throw failure.error;
160
+ }
161
+ return taskResult;
162
+ }
60
163
  /**
61
164
  * Marks a method as a task: records runs in `__tasks` / `__task_history`, emits
62
165
  * TaskSuccess / TaskFailed and, unless `taskStacking` is set, lets only one run
63
- * happen at a time across all processes sharing the database.
166
+ * happen at a time across all processes sharing the database. The declaration is
167
+ * also recorded, so `@spinajs/scheduler` can schedule the method by task name.
64
168
  *
65
169
  * @param taskName - unique task name
66
170
  * @param description - short description
@@ -70,72 +174,20 @@ function Task(taskName, description, opts) {
70
174
  const _name = (0, util_1._check_arg)((0, util_1._trim)(), (0, util_1._non_empty)())(taskName, 'Task name is empty');
71
175
  const _description = (0, util_1._check_arg)((0, util_1._trim)(), (0, util_1._non_empty)())(description, 'Task description is empty');
72
176
  const _opts = { ...exports.DEFAULT_TASK_OPTIONS, ...opts };
73
- return function (_target, _propertyKey, descriptor) {
74
- const oldFunction = descriptor.value;
75
- descriptor.value = async function (...args) {
76
- const log = di_1.DI.resolve('__log__', ['TASKS']);
77
- log.info(`Executing task ${_name} ...`);
78
- try {
79
- const task = await __task_js_1.__task.getOrCreate(null, {
80
- Name: _name,
81
- Description: _description,
82
- State: 'stopped',
83
- });
84
- const unlock = await lockTask(_name, _opts, log);
85
- if (!unlock) {
86
- return;
87
- }
88
- try {
89
- task.State = 'running';
90
- task.LastRunAt = luxon_1.DateTime.now();
91
- await task.update();
92
- }
93
- catch (err) {
94
- await unlock();
95
- throw err;
96
- }
97
- let taskResult = null;
98
- const start = luxon_1.DateTime.now();
99
- try {
100
- taskResult = await oldFunction.apply(this, args);
101
- await TaskSuccess_js_1.TaskSuccess.emit({
102
- TaskName: taskName,
103
- });
104
- log.success(`Task ${taskName} executed !`);
105
- }
106
- catch (err) {
107
- log.error(err, `Cannot execute task ${taskName}`);
108
- taskResult = {
109
- error: true,
110
- message: err.Message,
111
- };
112
- await TaskFailed_js_1.TaskFailed.emit({
113
- TaskName: taskName,
114
- Reason: err.Message,
115
- });
116
- }
117
- finally {
118
- try {
119
- await unlock();
120
- await task.update({
121
- State: 'stopped',
122
- });
123
- await __task_history_js_1.__task_history.insert({
124
- TaskId: task.Id,
125
- Result: taskResult,
126
- Duration: luxon_1.DateTime.now().diff(start).milliseconds,
127
- });
128
- }
129
- catch (err) {
130
- log.error(err, `Cannot finalize task`);
131
- }
132
- return taskResult;
133
- }
134
- }
135
- catch (err) {
136
- log.error(err, `Cannot start task ${taskName}`);
137
- throw err;
138
- }
177
+ return function (target, propertyKey, descriptor) {
178
+ const isStatic = typeof target === 'function';
179
+ const decl = {
180
+ name: _name,
181
+ description: _description,
182
+ options: _opts,
183
+ target: isStatic ? target : target.constructor,
184
+ isStatic,
185
+ propertyKey,
186
+ method: descriptor.value,
187
+ };
188
+ declarations.set(_name, [...(declarations.get(_name) ?? []), decl]);
189
+ descriptor.value = function (...args) {
190
+ return runTask(decl, this, args, { lock: true, rethrow: false });
139
191
  };
140
192
  };
141
193
  }
@@ -1 +1 @@
1
- {"version":3,"file":"decorators.js","sourceRoot":"","sources":["../../src/decorators.ts"],"names":[],"mappings":";;;;AAAA,kDAA+E;AAC/E,wCAA8D;AAC9D,oCAAiC;AACjC,kDAA4C;AAC5C,iCAAiC;AACjC,kEAA4D;AAE5D,4DAAsD;AACtD,0DAAoD;AAEvC,QAAA,YAAY,GAAG,cAAc,CAAC;AAe9B,QAAA,oBAAoB,GAAgB;IAC/C,YAAY,EAAE,KAAK;IACnB,OAAO,EAAE,KAAK;CACf,CAAC;AAIF,4EAA4E;AAC5E,8EAA8E;AAC9E,MAAM,gBAAgB,GAAG,IAAI,GAAG,EAAU,CAAC;AAE3C,KAAK,UAAU,QAAQ,CAAC,IAAY,EAAE,IAAiB,EAAE,GAAQ;IAC/D,IAAI,IAAI,CAAC,YAAY,EAAE,CAAC;QACtB,OAAO,KAAK,IAAI,EAAE,GAAE,CAAC,CAAC;IACxB,CAAC;IAED,IAAI,gBAAgB,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC;QAC/B,GAAG,CAAC,IAAI,CAAC,QAAQ,IAAI,qCAAqC,CAAC,CAAC;QAC5D,OAAO,IAAI,CAAC;IACd,CAAC;IAED,gBAAgB,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;IAC3B,MAAM,SAAS,GAAG,QAAQ,IAAI,EAAE,CAAC;IAEjC,IAAI,CAAC;QACH,MAAM,IAAI,GAAG,MAAM,IAAA,yBAAa,EAAC,EAAE,IAAI,EAAE,SAAS,EAAE,GAAG,EAAE,IAAI,CAAC,OAAO,EAAE,CAAC,CAAC;QACzE,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC;YACjB,gBAAgB,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;YAC9B,GAAG,CAAC,IAAI,CAAC,iCAAiC,IAAI,oBAAoB,CAAC,CAAC;YACpE,OAAO,IAAI,CAAC;QACd,CAAC;IACH,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,gBAAgB,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;QAC9B,MAAM,GAAG,CAAC;IACZ,CAAC;IAED,MAAM,SAAS,GACb,IAAI,CAAC,OAAO,GAAG,CAAC;QACd,CAAC,CAAC,WAAW,CAAC,GAAG,EAAE;YACf,IAAA,uBAAW,EAAC,EAAE,IAAI,EAAE,SAAS,EAAE,GAAG,EAAE,IAAI,CAAC,OAAO,EAAE,CAAC;iBAChD,IAAI,CAAC,CAAC,OAAO,EAAE,EAAE;gBAChB,IAAI,CAAC,OAAO,EAAE,CAAC;oBACb,GAAG,CAAC,IAAI,CAAC,QAAQ,IAAI,iDAAiD,CAAC,CAAC;gBAC1E,CAAC;YACH,CAAC,CAAC;iBACD,KAAK,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,EAAE,+BAA+B,IAAI,EAAE,CAAC,CAAC,CAAC;QAC3E,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,OAAO,GAAG,CAAC,CAAC,CAAC,CAAC;QAC/C,CAAC,CAAC,SAAS,CAAC;IAEhB,OAAO,KAAK,IAAI,EAAE;QAChB,aAAa,CAAC,SAAS,CAAC,CAAC;QACzB,gBAAgB,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;QAC9B,MAAM,IAAA,yBAAa,EAAC,EAAE,IAAI,EAAE,SAAS,EAAE,CAAC,CAAC;IAC3C,CAAC,CAAC;AACJ,CAAC;AAED;;;;;;;;GAQG;AACH,cAAqB,QAAgB,EAAE,WAAmB,EAAE,IAA2B;IACrF,MAAM,KAAK,GAAG,IAAA,iBAAU,EAAC,IAAA,YAAK,GAAE,EAAE,IAAA,iBAAU,GAAE,CAAC,CAAC,QAAQ,EAAE,oBAAoB,CAAC,CAAC;IAChF,MAAM,YAAY,GAAG,IAAA,iBAAU,EAAC,IAAA,YAAK,GAAE,EAAE,IAAA,iBAAU,GAAE,CAAC,CAAC,WAAW,EAAE,2BAA2B,CAAC,CAAC;IACjG,MAAM,KAAK,GAAgB,EAAE,GAAG,QAAA,oBAAoB,EAAE,GAAG,IAAI,EAAE,CAAC;IAEhE,OAAO,UAAU,OAAY,EAAE,YAA6B,EAAE,UAA8B;QAC1F,MAAM,WAAW,GAAa,UAAU,CAAC,KAAK,CAAC;QAC/C,UAAU,CAAC,KAAK,GAAG,KAAK,WAAW,GAAG,IAAW;YAC/C,MAAM,GAAG,GAAG,OAAE,CAAC,OAAO,CAAC,SAAS,EAAE,CAAC,OAAO,CAAC,CAAQ,CAAC;YAEpD,GAAG,CAAC,IAAI,CAAC,kBAAkB,KAAK,MAAM,CAAC,CAAC;YAExC,IAAI,CAAC;gBACH,MAAM,IAAI,GAAG,MAAM,kBAAM,CAAC,WAAW,CAAC,IAAI,EAAE;oBAC1C,IAAI,EAAE,KAAK;oBACX,WAAW,EAAE,YAAY;oBACzB,KAAK,EAAE,SAAS;iBACjB,CAAC,CAAC;gBAEH,MAAM,MAAM,GAAG,MAAM,QAAQ,CAAC,KAAK,EAAE,KAAK,EAAE,GAAG,CAAC,CAAC;gBACjD,IAAI,CAAC,MAAM,EAAE,CAAC;oBACZ,OAAO;gBACT,CAAC;gBAED,IAAI,CAAC;oBACH,IAAI,CAAC,KAAK,GAAG,SAAS,CAAC;oBACvB,IAAI,CAAC,SAAS,GAAG,gBAAQ,CAAC,GAAG,EAAE,CAAC;oBAChC,MAAM,IAAI,CAAC,MAAM,EAAE,CAAC;gBACtB,CAAC;gBAAC,OAAO,GAAG,EAAE,CAAC;oBACb,MAAM,MAAM,EAAE,CAAC;oBACf,MAAM,GAAG,CAAC;gBACZ,CAAC;gBAED,IAAI,UAAU,GAAG,IAAI,CAAC;gBACtB,MAAM,KAAK,GAAG,gBAAQ,CAAC,GAAG,EAAE,CAAC;gBAC7B,IAAI,CAAC;oBACH,UAAU,GAAG,MAAM,WAAW,CAAC,KAAK,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;oBACjD,MAAM,4BAAW,CAAC,IAAI,CAAC;wBACrB,QAAQ,EAAE,QAAQ;qBACnB,CAAC,CAAC;oBAEH,GAAG,CAAC,OAAO,CAAC,QAAQ,QAAQ,aAAa,CAAC,CAAC;gBAC7C,CAAC;gBAAC,OAAO,GAAG,EAAE,CAAC;oBACb,GAAG,CAAC,KAAK,CAAC,GAAG,EAAE,uBAAuB,QAAQ,EAAE,CAAC,CAAC;oBAClD,UAAU,GAAG;wBACX,KAAK,EAAE,IAAI;wBACX,OAAO,EAAE,GAAG,CAAC,OAAO;qBACrB,CAAC;oBAEF,MAAM,0BAAU,CAAC,IAAI,CAAC;wBACpB,QAAQ,EAAE,QAAQ;wBAClB,MAAM,EAAE,GAAG,CAAC,OAAO;qBACpB,CAAC,CAAC;gBACL,CAAC;wBAAS,CAAC;oBACT,IAAI,CAAC;wBACH,MAAM,MAAM,EAAE,CAAC;wBAEf,MAAM,IAAI,CAAC,MAAM,CAAC;4BAChB,KAAK,EAAE,SAAS;yBACjB,CAAC,CAAC;wBAEH,MAAM,kCAAc,CAAC,MAAM,CAAC;4BAC1B,MAAM,EAAE,IAAI,CAAC,EAAE;4BACf,MAAM,EAAE,UAAU;4BAClB,QAAQ,EAAE,gBAAQ,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,YAAY;yBAClD,CAAC,CAAC;oBACL,CAAC;oBAAC,OAAO,GAAG,EAAE,CAAC;wBACb,GAAG,CAAC,KAAK,CAAC,GAAG,EAAE,sBAAsB,CAAC,CAAC;oBACzC,CAAC;oBAED,OAAO,UAAU,CAAC;gBACpB,CAAC;YACH,CAAC;YAAC,OAAO,GAAG,EAAE,CAAC;gBACb,GAAG,CAAC,KAAK,CAAC,GAAG,EAAE,qBAAqB,QAAQ,EAAE,CAAC,CAAC;gBAChD,MAAM,GAAG,CAAC;YACZ,CAAC;QACH,CAAC,CAAC;IACJ,CAAC,CAAC;AACJ,CAAC"}
1
+ {"version":3,"file":"decorators.js","sourceRoot":"","sources":["../../src/decorators.ts"],"names":[],"mappings":"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"}
@@ -11,14 +11,38 @@ export interface TaskOptions {
11
11
  lockTtl: number;
12
12
  }
13
13
  export declare const DEFAULT_TASK_OPTIONS: TaskOptions;
14
+ export interface TaskDeclaration {
15
+ name: string;
16
+ description: string;
17
+ options: TaskOptions;
18
+ /** The class that declares the method (the constructor itself for a static method). */
19
+ target: Function;
20
+ isStatic: boolean;
21
+ propertyKey: string | symbol;
22
+ /** The undecorated method. */
23
+ method: (...args: any[]) => unknown;
24
+ }
25
+ export interface RunTaskOptions {
26
+ /** false: skip the task mutex, its heartbeat and the in-process guard (the caller holds a lock of its own). */
27
+ lock: boolean;
28
+ /** true: rethrow the task's error after history is written, instead of resolving with `{ error: true }`. */
29
+ rethrow: boolean;
30
+ }
31
+ export declare function getTaskDeclarations(name?: string): TaskDeclaration[];
32
+ /**
33
+ * Runs a task method with the `@Task` bookkeeping: `__tasks` state, a `__task_history` row and
34
+ * TaskSuccess / TaskFailed. The decorator calls it with `{ lock: true, rethrow: false }`.
35
+ */
36
+ export declare function runTask(decl: TaskDeclaration, thisArg: unknown, args: unknown[], opts: RunTaskOptions): Promise<unknown>;
14
37
  /**
15
38
  * Marks a method as a task: records runs in `__tasks` / `__task_history`, emits
16
39
  * TaskSuccess / TaskFailed and, unless `taskStacking` is set, lets only one run
17
- * happen at a time across all processes sharing the database.
40
+ * happen at a time across all processes sharing the database. The declaration is
41
+ * also recorded, so `@spinajs/scheduler` can schedule the method by task name.
18
42
  *
19
43
  * @param taskName - unique task name
20
44
  * @param description - short description
21
45
  * @param opts - see {@link TaskOptions}, defaults to {@link DEFAULT_TASK_OPTIONS}
22
46
  */
23
- export declare function Task(taskName: string, description: string, opts?: Partial<TaskOptions>): (_target: any, _propertyKey: string | symbol, descriptor: PropertyDescriptor) => void;
47
+ export declare function Task(taskName: string, description: string, opts?: Partial<TaskOptions>): (target: any, propertyKey: string | symbol, descriptor: PropertyDescriptor) => void;
24
48
  //# sourceMappingURL=decorators.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"decorators.d.ts","sourceRoot":"","sources":["../../src/decorators.ts"],"names":[],"mappings":"AAUA,eAAO,MAAM,YAAY,iBAAiB,CAAC;AAE3C,MAAM,WAAW,WAAW;IAC1B;;OAEG;IACH,YAAY,EAAE,OAAO,CAAC;IAEtB;;;OAGG;IACH,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,eAAO,MAAM,oBAAoB,EAAE,WAGlC,CAAC;AAqDF;;;;;;;;GAQG;AACH,wBAAgB,IAAI,CAAC,QAAQ,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,OAAO,CAAC,WAAW,CAAC,aAK3D,GAAG,gBAAgB,MAAM,GAAG,MAAM,cAAc,kBAAkB,UAyE7F"}
1
+ {"version":3,"file":"decorators.d.ts","sourceRoot":"","sources":["../../src/decorators.ts"],"names":[],"mappings":"AAUA,eAAO,MAAM,YAAY,iBAAiB,CAAC;AAE3C,MAAM,WAAW,WAAW;IAC1B;;OAEG;IACH,YAAY,EAAE,OAAO,CAAC;IAEtB;;;OAGG;IACH,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,eAAO,MAAM,oBAAoB,EAAE,WAGlC,CAAC;AAqDF,MAAM,WAAW,eAAe;IAC9B,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,OAAO,EAAE,WAAW,CAAC;IACrB,uFAAuF;IACvF,MAAM,EAAE,QAAQ,CAAC;IACjB,QAAQ,EAAE,OAAO,CAAC;IAClB,WAAW,EAAE,MAAM,GAAG,MAAM,CAAC;IAC7B,8BAA8B;IAC9B,MAAM,EAAE,CAAC,GAAG,IAAI,EAAE,GAAG,EAAE,KAAK,OAAO,CAAC;CACrC;AAED,MAAM,WAAW,cAAc;IAC7B,+GAA+G;IAC/G,IAAI,EAAE,OAAO,CAAC;IACd,4GAA4G;IAC5G,OAAO,EAAE,OAAO,CAAC;CAClB;AAID,wBAAgB,mBAAmB,CAAC,IAAI,CAAC,EAAE,MAAM,GAAG,eAAe,EAAE,CAKpE;AAQD;;;GAGG;AACH,wBAAsB,OAAO,CAC3B,IAAI,EAAE,eAAe,EACrB,OAAO,EAAE,OAAO,EAChB,IAAI,EAAE,OAAO,EAAE,EACf,IAAI,EAAE,cAAc,GACnB,OAAO,CAAC,OAAO,CAAC,CAsFlB;AAED;;;;;;;;;GASG;AACH,wBAAgB,IAAI,CAAC,QAAQ,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,OAAO,CAAC,WAAW,CAAC,YAK5D,GAAG,eAAe,MAAM,GAAG,MAAM,cAAc,kBAAkB,UAiB3F"}
@@ -53,10 +53,112 @@ async function lockTask(name, opts, log) {
53
53
  await mutex_release({ Name: mutexName });
54
54
  };
55
55
  }
56
+ const declarations = new Map();
57
+ export function getTaskDeclarations(name) {
58
+ if (name !== undefined) {
59
+ return [...(declarations.get(name) ?? [])];
60
+ }
61
+ return [...declarations.values()].flat();
62
+ }
63
+ function errorMessage(err) {
64
+ return err?.message ?? String(err);
65
+ }
66
+ const NO_LOCK = () => Promise.resolve();
67
+ /**
68
+ * Runs a task method with the `@Task` bookkeeping: `__tasks` state, a `__task_history` row and
69
+ * TaskSuccess / TaskFailed. The decorator calls it with `{ lock: true, rethrow: false }`.
70
+ */
71
+ export async function runTask(decl, thisArg, args, opts) {
72
+ const log = DI.resolve('__log__', ['TASKS']);
73
+ log.info(`Executing task ${decl.name} ...`);
74
+ let task;
75
+ let unlock;
76
+ try {
77
+ task = await __task.getOrCreate(null, {
78
+ Name: decl.name,
79
+ Description: decl.description,
80
+ State: 'stopped',
81
+ });
82
+ const lock = opts.lock ? await lockTask(decl.name, decl.options, log) : NO_LOCK;
83
+ if (!lock) {
84
+ return undefined;
85
+ }
86
+ unlock = lock;
87
+ try {
88
+ task.State = 'running';
89
+ task.LastRunAt = DateTime.now();
90
+ await task.update();
91
+ }
92
+ catch (err) {
93
+ await unlock();
94
+ throw err;
95
+ }
96
+ }
97
+ catch (err) {
98
+ log.error(err, `Cannot start task ${decl.name}`);
99
+ throw err;
100
+ }
101
+ let taskResult = null;
102
+ let failure = null;
103
+ const start = DateTime.now();
104
+ try {
105
+ try {
106
+ taskResult = await decl.method.apply(thisArg, args);
107
+ }
108
+ catch (err) {
109
+ failure = { error: err };
110
+ log.error(err, `Cannot execute task ${decl.name}`);
111
+ taskResult = {
112
+ error: true,
113
+ message: errorMessage(err),
114
+ };
115
+ }
116
+ // An emit failure (queue outage) is logged only: it must not turn a run whose side effects
117
+ // already happened into a failure that a caller would retry.
118
+ try {
119
+ if (failure) {
120
+ await TaskFailed.emit({
121
+ TaskName: decl.name,
122
+ Reason: errorMessage(failure.error),
123
+ });
124
+ }
125
+ else {
126
+ await TaskSuccess.emit({
127
+ TaskName: decl.name,
128
+ });
129
+ log.success(`Task ${decl.name} executed !`);
130
+ }
131
+ }
132
+ catch (emitErr) {
133
+ log.error(emitErr, `Cannot emit ${failure ? 'TaskFailed' : 'TaskSuccess'} for ${decl.name}`);
134
+ }
135
+ }
136
+ finally {
137
+ try {
138
+ await unlock();
139
+ await task.update({
140
+ State: 'stopped',
141
+ });
142
+ await __task_history.insert({
143
+ TaskId: task.Id,
144
+ Result: taskResult,
145
+ Duration: DateTime.now().diff(start).milliseconds,
146
+ });
147
+ }
148
+ catch (err) {
149
+ log.error(err, `Cannot finalize task`);
150
+ }
151
+ }
152
+ if (failure && opts.rethrow) {
153
+ throw failure.error;
154
+ }
155
+ return taskResult;
156
+ }
56
157
  /**
57
158
  * Marks a method as a task: records runs in `__tasks` / `__task_history`, emits
58
159
  * TaskSuccess / TaskFailed and, unless `taskStacking` is set, lets only one run
59
- * happen at a time across all processes sharing the database.
160
+ * happen at a time across all processes sharing the database. The declaration is
161
+ * also recorded, so `@spinajs/scheduler` can schedule the method by task name.
60
162
  *
61
163
  * @param taskName - unique task name
62
164
  * @param description - short description
@@ -66,72 +168,20 @@ export function Task(taskName, description, opts) {
66
168
  const _name = _check_arg(_trim(), _non_empty())(taskName, 'Task name is empty');
67
169
  const _description = _check_arg(_trim(), _non_empty())(description, 'Task description is empty');
68
170
  const _opts = { ...DEFAULT_TASK_OPTIONS, ...opts };
69
- return function (_target, _propertyKey, descriptor) {
70
- const oldFunction = descriptor.value;
71
- descriptor.value = async function (...args) {
72
- const log = DI.resolve('__log__', ['TASKS']);
73
- log.info(`Executing task ${_name} ...`);
74
- try {
75
- const task = await __task.getOrCreate(null, {
76
- Name: _name,
77
- Description: _description,
78
- State: 'stopped',
79
- });
80
- const unlock = await lockTask(_name, _opts, log);
81
- if (!unlock) {
82
- return;
83
- }
84
- try {
85
- task.State = 'running';
86
- task.LastRunAt = DateTime.now();
87
- await task.update();
88
- }
89
- catch (err) {
90
- await unlock();
91
- throw err;
92
- }
93
- let taskResult = null;
94
- const start = DateTime.now();
95
- try {
96
- taskResult = await oldFunction.apply(this, args);
97
- await TaskSuccess.emit({
98
- TaskName: taskName,
99
- });
100
- log.success(`Task ${taskName} executed !`);
101
- }
102
- catch (err) {
103
- log.error(err, `Cannot execute task ${taskName}`);
104
- taskResult = {
105
- error: true,
106
- message: err.Message,
107
- };
108
- await TaskFailed.emit({
109
- TaskName: taskName,
110
- Reason: err.Message,
111
- });
112
- }
113
- finally {
114
- try {
115
- await unlock();
116
- await task.update({
117
- State: 'stopped',
118
- });
119
- await __task_history.insert({
120
- TaskId: task.Id,
121
- Result: taskResult,
122
- Duration: DateTime.now().diff(start).milliseconds,
123
- });
124
- }
125
- catch (err) {
126
- log.error(err, `Cannot finalize task`);
127
- }
128
- return taskResult;
129
- }
130
- }
131
- catch (err) {
132
- log.error(err, `Cannot start task ${taskName}`);
133
- throw err;
134
- }
171
+ return function (target, propertyKey, descriptor) {
172
+ const isStatic = typeof target === 'function';
173
+ const decl = {
174
+ name: _name,
175
+ description: _description,
176
+ options: _opts,
177
+ target: isStatic ? target : target.constructor,
178
+ isStatic,
179
+ propertyKey,
180
+ method: descriptor.value,
181
+ };
182
+ declarations.set(_name, [...(declarations.get(_name) ?? []), decl]);
183
+ descriptor.value = function (...args) {
184
+ return runTask(decl, this, args, { lock: true, rethrow: false });
135
185
  };
136
186
  };
137
187
  }
@@ -1 +1 @@
1
- {"version":3,"file":"decorators.js","sourceRoot":"","sources":["../../src/decorators.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"decorators.js","sourceRoot":"","sources":["../../src/decorators.ts"],"names":[],"mappings":"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"}