@loopstack/core 0.3.0 → 0.3.2
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/CHANGELOG.md +16 -0
- package/dist/config/core/tools/batch-create-entity.yaml +16 -0
- package/dist/config/core/tools/create-entity.yaml +14 -0
- package/dist/config/core/tools/set-context.yaml +14 -0
- package/dist/config/core/tools/sql-query.yaml +26 -0
- package/dist/config-provider.service.js +0 -2
- package/dist/config-provider.service.js.map +1 -1
- package/dist/modules/common/common.module.js +2 -1
- package/dist/modules/common/common.module.js.map +1 -1
- package/dist/modules/common/services/expression-handler/object-expression.handler.d.ts +23 -5
- package/dist/modules/common/services/expression-handler/object-expression.handler.js +509 -38
- package/dist/modules/common/services/expression-handler/object-expression.handler.js.map +1 -1
- package/dist/modules/common/services/handlebars-helpers/{date-formatter-handlebars-helper.service.d.ts → date-formatter-helper.service.d.ts} +1 -1
- package/dist/modules/common/services/handlebars-helpers/{date-formatter-handlebars-helper.service.js → date-formatter-helper.service.js} +6 -6
- package/dist/modules/common/services/handlebars-helpers/date-formatter-helper.service.js.map +1 -0
- package/dist/modules/common/services/handlebars-helpers/index.d.ts +2 -1
- package/dist/modules/common/services/handlebars-helpers/index.js +2 -1
- package/dist/modules/common/services/handlebars-helpers/index.js.map +1 -1
- package/dist/modules/common/services/handlebars-helpers/operators-helper.service.d.ts +41 -0
- package/dist/modules/common/services/handlebars-helpers/operators-helper.service.js +418 -0
- package/dist/modules/common/services/handlebars-helpers/operators-helper.service.js.map +1 -0
- package/dist/modules/common/services/handlebars-processor.service.d.ts +4 -3
- package/dist/modules/common/services/handlebars-processor.service.js +75 -7
- package/dist/modules/common/services/handlebars-processor.service.js.map +1 -1
- package/dist/modules/common/services/template.service.d.ts +2 -2
- package/dist/modules/common/services/template.service.js +5 -5
- package/dist/modules/common/services/template.service.js.map +1 -1
- package/dist/modules/configuration/configuration.module.js +2 -2
- package/dist/modules/configuration/services/configuration.service.d.ts +3 -3
- package/dist/modules/configuration/services/configuration.service.js +6 -6
- package/dist/modules/configuration/services/configuration.service.js.map +1 -1
- package/dist/modules/configuration/services/dynamic-schema-generator.service.d.ts +8 -8
- package/dist/modules/configuration/services/dynamic-schema-generator.service.js +13 -13
- package/dist/modules/configuration/services/dynamic-schema-generator.service.js.map +1 -1
- package/dist/modules/configuration/services/handler-registry.service.d.ts +20 -0
- package/dist/modules/configuration/services/{service-registry.service.js → handler-registry.service.js} +26 -26
- package/dist/modules/configuration/services/{service-registry.service.js.map → handler-registry.service.js.map} +1 -1
- package/dist/modules/configuration/services/index.d.ts +1 -1
- package/dist/modules/configuration/services/index.js +1 -1
- package/dist/modules/persistence/handlers/create-entity.handler.d.ts +24 -0
- package/dist/modules/persistence/handlers/create-entity.handler.js +65 -0
- package/dist/modules/persistence/handlers/create-entity.handler.js.map +1 -0
- package/dist/modules/persistence/handlers/sql-query.handler.d.ts +24 -0
- package/dist/modules/persistence/handlers/sql-query.handler.js +62 -0
- package/dist/modules/persistence/handlers/sql-query.handler.js.map +1 -0
- package/dist/modules/persistence/persistence.module.js +14 -0
- package/dist/modules/persistence/persistence.module.js.map +1 -1
- package/dist/modules/persistence/services/dynamic-repository.service.d.ts +26 -0
- package/dist/modules/persistence/services/dynamic-repository.service.js +97 -0
- package/dist/modules/persistence/services/dynamic-repository.service.js.map +1 -0
- package/dist/modules/persistence/services/index.d.ts +1 -0
- package/dist/modules/persistence/services/index.js +1 -0
- package/dist/modules/persistence/services/index.js.map +1 -1
- package/dist/modules/scheduler/entities/scheduled-task.entity.d.ts +30 -0
- package/dist/modules/scheduler/entities/scheduled-task.entity.js +128 -0
- package/dist/modules/scheduler/entities/scheduled-task.entity.js.map +1 -0
- package/dist/modules/scheduler/events/task-execution.event.d.ts +8 -0
- package/dist/modules/scheduler/events/task-execution.event.js +19 -0
- package/dist/modules/scheduler/events/task-execution.event.js.map +1 -0
- package/dist/modules/scheduler/handler/create-task-schedule.handler.d.ts +55 -0
- package/dist/modules/scheduler/handler/create-task-schedule.handler.js +121 -0
- package/dist/modules/scheduler/handler/create-task-schedule.handler.js.map +1 -0
- package/dist/modules/scheduler/handler/remove-task-schedule.handler.d.ts +17 -0
- package/dist/modules/scheduler/handler/remove-task-schedule.handler.js +48 -0
- package/dist/modules/scheduler/handler/remove-task-schedule.handler.js.map +1 -0
- package/dist/modules/scheduler/interfaces/create-task-schedule.interface.d.ts +11 -0
- package/dist/modules/scheduler/interfaces/create-task-schedule.interface.js +3 -0
- package/dist/modules/scheduler/interfaces/create-task-schedule.interface.js.map +1 -0
- package/dist/modules/scheduler/scheduler.module.d.ts +2 -0
- package/dist/modules/scheduler/scheduler.module.js +39 -0
- package/dist/modules/scheduler/scheduler.module.js.map +1 -0
- package/dist/modules/scheduler/schemas/task.schema.d.ts +3 -0
- package/dist/modules/scheduler/schemas/task.schema.js +30 -0
- package/dist/modules/scheduler/schemas/task.schema.js.map +1 -0
- package/dist/modules/scheduler/services/task-execution.listener.d.ts +5 -0
- package/dist/modules/scheduler/services/task-execution.listener.js +40 -0
- package/dist/modules/scheduler/services/task-execution.listener.js.map +1 -0
- package/dist/modules/scheduler/services/task-scheduler.service.d.ts +21 -0
- package/dist/modules/scheduler/services/task-scheduler.service.js +194 -0
- package/dist/modules/scheduler/services/task-scheduler.service.js.map +1 -0
- package/dist/modules/workflow-processor/{tool-services/add-namespace.service.d.ts → handlers/add-namespace.handler.d.ts} +3 -3
- package/dist/modules/workflow-processor/{tool-services/add-namespace.service.js → handlers/add-namespace.handler.js} +9 -10
- package/dist/modules/workflow-processor/handlers/add-namespace.handler.js.map +1 -0
- package/dist/modules/workflow-processor/{tool-services/batch-create-documents.service.d.ts → handlers/batch-create-documents.handler.d.ts} +5 -5
- package/dist/modules/workflow-processor/{tool-services/batch-create-documents.service.js → handlers/batch-create-documents.handler.js} +9 -10
- package/dist/modules/workflow-processor/handlers/batch-create-documents.handler.js.map +1 -0
- package/dist/modules/workflow-processor/{tool-services/create-document.service.d.ts → handlers/create-document.handler.d.ts} +16 -16
- package/dist/modules/workflow-processor/{tool-services/create-document.service.js → handlers/create-document.handler.js} +10 -11
- package/dist/modules/workflow-processor/handlers/create-document.handler.js.map +1 -0
- package/dist/modules/workflow-processor/handlers/index.d.ts +9 -0
- package/dist/modules/workflow-processor/{tool-services → handlers}/index.js +9 -9
- package/dist/modules/workflow-processor/handlers/index.js.map +1 -0
- package/dist/modules/workflow-processor/{tool-services/load-document.service.d.ts → handlers/load-document.handler.d.ts} +3 -3
- package/dist/modules/workflow-processor/{tool-services/load-document.service.js → handlers/load-document.handler.js} +9 -10
- package/dist/modules/workflow-processor/handlers/load-document.handler.js.map +1 -0
- package/dist/modules/workflow-processor/{tool-services/mock.service.d.ts → handlers/mock.handler.d.ts} +3 -3
- package/dist/modules/workflow-processor/{tool-services/mock.service.js → handlers/mock.handler.js} +9 -13
- package/dist/modules/workflow-processor/handlers/mock.handler.js.map +1 -0
- package/dist/modules/workflow-processor/{tool-services/set-context.service.d.ts → handlers/set-context.handler.d.ts} +3 -3
- package/dist/modules/workflow-processor/{tool-services/set-context.service.js → handlers/set-context.handler.js} +9 -10
- package/dist/modules/workflow-processor/handlers/set-context.handler.js.map +1 -0
- package/dist/modules/workflow-processor/{tool-services/set-target-place.service.d.ts → handlers/set-target-place.handler.d.ts} +3 -3
- package/dist/modules/workflow-processor/{tool-services/set-target-place.service.js → handlers/set-target-place.handler.js} +16 -15
- package/dist/modules/workflow-processor/handlers/set-target-place.handler.js.map +1 -0
- package/dist/modules/workflow-processor/{tool-services/transition-selector.service.d.ts → handlers/transition-selector.handler.d.ts} +3 -3
- package/dist/modules/workflow-processor/{tool-services/transition-selector.service.js → handlers/transition-selector.handler.js} +9 -10
- package/dist/modules/workflow-processor/handlers/transition-selector.handler.js.map +1 -0
- package/dist/modules/workflow-processor/{tool-services/update-document.service.d.ts → handlers/update-document.handler.d.ts} +16 -16
- package/dist/modules/workflow-processor/{tool-services/update-document.service.js → handlers/update-document.handler.js} +9 -10
- package/dist/modules/workflow-processor/handlers/update-document.handler.js.map +1 -0
- package/dist/modules/workflow-processor/services/handler-execution.service.d.ts +12 -0
- package/dist/modules/workflow-processor/services/{service-execution.service.js → handler-execution.service.js} +21 -21
- package/dist/modules/workflow-processor/services/{service-execution.service.js.map → handler-execution.service.js.map} +1 -1
- package/dist/modules/workflow-processor/services/index.d.ts +1 -1
- package/dist/modules/workflow-processor/services/index.js +1 -1
- package/dist/modules/workflow-processor/services/pipeline-processor.service.js +10 -3
- package/dist/modules/workflow-processor/services/pipeline-processor.service.js.map +1 -1
- package/dist/modules/workflow-processor/services/state-machine-config.service.js +3 -3
- package/dist/modules/workflow-processor/services/state-machine-config.service.js.map +1 -1
- package/dist/modules/workflow-processor/services/state-machine-processor.service.d.ts +3 -3
- package/dist/modules/workflow-processor/services/state-machine-processor.service.js +6 -6
- package/dist/modules/workflow-processor/services/state-machine-processor.service.js.map +1 -1
- package/dist/modules/workflow-processor/services/tool-execution.service.d.ts +4 -4
- package/dist/modules/workflow-processor/services/tool-execution.service.js +3 -3
- package/dist/modules/workflow-processor/validators/initial-run.validator.js +0 -1
- package/dist/modules/workflow-processor/validators/initial-run.validator.js.map +1 -1
- package/dist/modules/workflow-processor/validators/workflow-dependencies.validator.js +0 -1
- package/dist/modules/workflow-processor/validators/workflow-dependencies.validator.js.map +1 -1
- package/dist/modules/workflow-processor/validators/workflow-option.validator.js +0 -1
- package/dist/modules/workflow-processor/validators/workflow-option.validator.js.map +1 -1
- package/dist/modules/workflow-processor/workflow-processor.module.js +11 -11
- package/dist/modules/workflow-processor/workflow-processor.module.js.map +1 -1
- package/dist/services/migrations.service.js +4 -4
- package/dist/services/migrations.service.js.map +1 -1
- package/dist/utils/load-configuration.js +3 -1
- package/dist/utils/load-configuration.js.map +1 -1
- package/package.json +20 -9
- package/dist/config/core.yaml +0 -1
- package/dist/modules/common/services/handlebars-helpers/date-formatter-handlebars-helper.service.js.map +0 -1
- package/dist/modules/configuration/services/service-registry.service.d.ts +0 -20
- package/dist/modules/workflow-processor/services/service-execution.service.d.ts +0 -12
- package/dist/modules/workflow-processor/tool-services/add-namespace.service.js.map +0 -1
- package/dist/modules/workflow-processor/tool-services/batch-create-documents.service.js.map +0 -1
- package/dist/modules/workflow-processor/tool-services/create-document.service.js.map +0 -1
- package/dist/modules/workflow-processor/tool-services/index.d.ts +0 -9
- package/dist/modules/workflow-processor/tool-services/index.js.map +0 -1
- package/dist/modules/workflow-processor/tool-services/load-document.service.js.map +0 -1
- package/dist/modules/workflow-processor/tool-services/mock.service.js.map +0 -1
- package/dist/modules/workflow-processor/tool-services/set-context.service.js.map +0 -1
- package/dist/modules/workflow-processor/tool-services/set-target-place.service.js.map +0 -1
- package/dist/modules/workflow-processor/tool-services/transition-selector.service.js.map +0 -1
- package/dist/modules/workflow-processor/tool-services/update-document.service.js.map +0 -1
|
@@ -0,0 +1,121 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
|
|
3
|
+
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
|
4
|
+
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
|
|
5
|
+
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
|
|
6
|
+
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
7
|
+
};
|
|
8
|
+
var __metadata = (this && this.__metadata) || function (k, v) {
|
|
9
|
+
if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
|
|
10
|
+
};
|
|
11
|
+
var CreateTaskScheduleHandler_1;
|
|
12
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
13
|
+
exports.CreateTaskScheduleHandler = exports.config = void 0;
|
|
14
|
+
const common_1 = require("@nestjs/common");
|
|
15
|
+
const zod_1 = require("zod");
|
|
16
|
+
const shared_1 = require("@loopstack/shared");
|
|
17
|
+
const task_scheduler_service_1 = require("../services/task-scheduler.service");
|
|
18
|
+
const scheduled_task_entity_1 = require("../entities/scheduled-task.entity");
|
|
19
|
+
const task_schema_1 = require("../schemas/task.schema");
|
|
20
|
+
function parseDurationToSeconds(durationString) {
|
|
21
|
+
const durationRegex = /^(\d+)\s*(second|seconds|minute|minutes|hour|hours|day|days|week|weeks|month|months|year|years)$/i;
|
|
22
|
+
const match = durationString.trim().match(durationRegex);
|
|
23
|
+
if (!match) {
|
|
24
|
+
throw new Error(`Invalid duration format: ${durationString}. Expected format like "7 days", "2 hours", "30 minutes"`);
|
|
25
|
+
}
|
|
26
|
+
const value = parseInt(match[1], 10);
|
|
27
|
+
const unit = match[2].toLowerCase();
|
|
28
|
+
const secondsMap = {
|
|
29
|
+
'second': 1,
|
|
30
|
+
'seconds': 1,
|
|
31
|
+
'minute': 60,
|
|
32
|
+
'minutes': 60,
|
|
33
|
+
'hour': 3600,
|
|
34
|
+
'hours': 3600,
|
|
35
|
+
'day': 86400,
|
|
36
|
+
'days': 86400,
|
|
37
|
+
'week': 604800,
|
|
38
|
+
'weeks': 604800,
|
|
39
|
+
'month': 2592000,
|
|
40
|
+
'months': 2592000,
|
|
41
|
+
'year': 31536000,
|
|
42
|
+
'years': 31536000,
|
|
43
|
+
};
|
|
44
|
+
return value * secondsMap[unit];
|
|
45
|
+
}
|
|
46
|
+
exports.config = zod_1.z.object({
|
|
47
|
+
name: zod_1.z.union([
|
|
48
|
+
shared_1.ExpressionString,
|
|
49
|
+
zod_1.z.string().min(1, 'Task name is required').max(255, 'Task name too long'),
|
|
50
|
+
]),
|
|
51
|
+
type: zod_1.z.union([
|
|
52
|
+
shared_1.ExpressionString,
|
|
53
|
+
zod_1.z.nativeEnum(scheduled_task_entity_1.TaskType, { required_error: 'Task type is required' })
|
|
54
|
+
]),
|
|
55
|
+
executeAt: zod_1.z.optional(zod_1.z.union([
|
|
56
|
+
shared_1.ExpressionString,
|
|
57
|
+
task_schema_1.isoDateStringSchema
|
|
58
|
+
])).describe('Execute at specific date/time (e.g., "2024-12-25T10:00:00Z")'),
|
|
59
|
+
waitFor: zod_1.z.optional(zod_1.z.union([
|
|
60
|
+
shared_1.ExpressionString,
|
|
61
|
+
zod_1.z.string().min(1, 'Duration string is required')
|
|
62
|
+
])).describe('Wait for duration before executing (e.g., "7 days", "2 hours", "30 minutes")'),
|
|
63
|
+
cronExpression: zod_1.z.optional(zod_1.z.union([
|
|
64
|
+
shared_1.ExpressionString,
|
|
65
|
+
task_schema_1.cronExpressionSchema
|
|
66
|
+
])).describe('Cron expression for recurring tasks (e.g., "0 9 * * MON" for every Monday at 9 AM)'),
|
|
67
|
+
payload: zod_1.z.optional(zod_1.z.union([
|
|
68
|
+
shared_1.ExpressionString,
|
|
69
|
+
zod_1.z.record(zod_1.z.any())
|
|
70
|
+
]))
|
|
71
|
+
});
|
|
72
|
+
const schema = zod_1.z.object({
|
|
73
|
+
name: zod_1.z.string().min(1, 'Task name is required').max(255, 'Task name too long'),
|
|
74
|
+
type: zod_1.z.nativeEnum(scheduled_task_entity_1.TaskType, { required_error: 'Task type is required' }),
|
|
75
|
+
executeAt: zod_1.z.optional(task_schema_1.isoDateStringSchema).describe('Execute at specific date/time (e.g., "2024-12-25T10:00:00Z")'),
|
|
76
|
+
waitFor: zod_1.z.optional(zod_1.z.string().min(1, 'Duration string is required')).describe('Wait for duration before executing (e.g., "7 days", "2 hours", "30 minutes")'),
|
|
77
|
+
cronExpression: zod_1.z.optional(task_schema_1.cronExpressionSchema).describe('Cron expression for recurring tasks (e.g., "0 9 * * MON" for every Monday at 9 AM)'),
|
|
78
|
+
payload: zod_1.z.optional(zod_1.z.record(zod_1.z.any()))
|
|
79
|
+
});
|
|
80
|
+
let CreateTaskScheduleHandler = CreateTaskScheduleHandler_1 = class CreateTaskScheduleHandler {
|
|
81
|
+
taskSchedulerService;
|
|
82
|
+
logger = new common_1.Logger(CreateTaskScheduleHandler_1.name);
|
|
83
|
+
constructor(taskSchedulerService) {
|
|
84
|
+
this.taskSchedulerService = taskSchedulerService;
|
|
85
|
+
}
|
|
86
|
+
async apply(props, workflow, context) {
|
|
87
|
+
if (!workflow) {
|
|
88
|
+
throw new Error('Workflow is undefined');
|
|
89
|
+
}
|
|
90
|
+
let durationSeconds;
|
|
91
|
+
if (props.waitFor) {
|
|
92
|
+
try {
|
|
93
|
+
durationSeconds = parseDurationToSeconds(props.waitFor);
|
|
94
|
+
}
|
|
95
|
+
catch (error) {
|
|
96
|
+
this.logger.error(`Failed to parse duration: ${props.waitFor}`, error);
|
|
97
|
+
throw new Error(`Invalid duration format: ${props.waitFor}`);
|
|
98
|
+
}
|
|
99
|
+
}
|
|
100
|
+
const { waitFor, ...restProps } = props;
|
|
101
|
+
const task = await this.taskSchedulerService.createTask({
|
|
102
|
+
workspaceId: context.workspaceId,
|
|
103
|
+
rootPipelineId: context.pipelineId,
|
|
104
|
+
...restProps,
|
|
105
|
+
...(durationSeconds && { durationSeconds }),
|
|
106
|
+
});
|
|
107
|
+
return {
|
|
108
|
+
success: true,
|
|
109
|
+
data: task,
|
|
110
|
+
};
|
|
111
|
+
}
|
|
112
|
+
};
|
|
113
|
+
exports.CreateTaskScheduleHandler = CreateTaskScheduleHandler;
|
|
114
|
+
exports.CreateTaskScheduleHandler = CreateTaskScheduleHandler = CreateTaskScheduleHandler_1 = __decorate([
|
|
115
|
+
(0, shared_1.Handler)({
|
|
116
|
+
config: schema,
|
|
117
|
+
schema,
|
|
118
|
+
}),
|
|
119
|
+
__metadata("design:paramtypes", [task_scheduler_service_1.TaskSchedulerService])
|
|
120
|
+
], CreateTaskScheduleHandler);
|
|
121
|
+
//# sourceMappingURL=create-task-schedule.handler.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"create-task-schedule.handler.js","sourceRoot":"","sources":["../../../../src/modules/scheduler/handler/create-task-schedule.handler.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import { z } from 'zod';
|
|
2
|
+
import { ContextInterface, HandlerInterface, HandlerCallResult, WorkflowEntity } from '@loopstack/shared';
|
|
3
|
+
import { TaskSchedulerService } from '../services/task-scheduler.service';
|
|
4
|
+
declare const schema: z.ZodObject<{
|
|
5
|
+
name: z.ZodString;
|
|
6
|
+
}, "strict", z.ZodTypeAny, {
|
|
7
|
+
name: string;
|
|
8
|
+
}, {
|
|
9
|
+
name: string;
|
|
10
|
+
}>;
|
|
11
|
+
export declare class RemoveTaskScheduleHandler implements HandlerInterface {
|
|
12
|
+
private taskSchedulerService;
|
|
13
|
+
private readonly logger;
|
|
14
|
+
constructor(taskSchedulerService: TaskSchedulerService);
|
|
15
|
+
apply(props: z.infer<typeof schema>, workflow: WorkflowEntity | undefined, context: ContextInterface): Promise<HandlerCallResult>;
|
|
16
|
+
}
|
|
17
|
+
export {};
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
|
|
3
|
+
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
|
4
|
+
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
|
|
5
|
+
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
|
|
6
|
+
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
7
|
+
};
|
|
8
|
+
var __metadata = (this && this.__metadata) || function (k, v) {
|
|
9
|
+
if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
|
|
10
|
+
};
|
|
11
|
+
var RemoveTaskScheduleHandler_1;
|
|
12
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
13
|
+
exports.RemoveTaskScheduleHandler = void 0;
|
|
14
|
+
const common_1 = require("@nestjs/common");
|
|
15
|
+
const zod_1 = require("zod");
|
|
16
|
+
const shared_1 = require("@loopstack/shared");
|
|
17
|
+
const task_scheduler_service_1 = require("../services/task-scheduler.service");
|
|
18
|
+
const config = zod_1.z.object({
|
|
19
|
+
name: zod_1.z.string()
|
|
20
|
+
}).strict();
|
|
21
|
+
const schema = zod_1.z.object({
|
|
22
|
+
name: zod_1.z.string()
|
|
23
|
+
}).strict();
|
|
24
|
+
let RemoveTaskScheduleHandler = RemoveTaskScheduleHandler_1 = class RemoveTaskScheduleHandler {
|
|
25
|
+
taskSchedulerService;
|
|
26
|
+
logger = new common_1.Logger(RemoveTaskScheduleHandler_1.name);
|
|
27
|
+
constructor(taskSchedulerService) {
|
|
28
|
+
this.taskSchedulerService = taskSchedulerService;
|
|
29
|
+
}
|
|
30
|
+
async apply(props, workflow, context) {
|
|
31
|
+
if (!workflow) {
|
|
32
|
+
throw new Error('Workflow is undefined');
|
|
33
|
+
}
|
|
34
|
+
await this.taskSchedulerService.removeTask(context.workspaceId, context.pipelineId, props.name);
|
|
35
|
+
return {
|
|
36
|
+
success: true,
|
|
37
|
+
};
|
|
38
|
+
}
|
|
39
|
+
};
|
|
40
|
+
exports.RemoveTaskScheduleHandler = RemoveTaskScheduleHandler;
|
|
41
|
+
exports.RemoveTaskScheduleHandler = RemoveTaskScheduleHandler = RemoveTaskScheduleHandler_1 = __decorate([
|
|
42
|
+
(0, shared_1.Handler)({
|
|
43
|
+
config,
|
|
44
|
+
schema,
|
|
45
|
+
}),
|
|
46
|
+
__metadata("design:paramtypes", [task_scheduler_service_1.TaskSchedulerService])
|
|
47
|
+
], RemoveTaskScheduleHandler);
|
|
48
|
+
//# sourceMappingURL=remove-task-schedule.handler.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"remove-task-schedule.handler.js","sourceRoot":"","sources":["../../../../src/modules/scheduler/handler/remove-task-schedule.handler.ts"],"names":[],"mappings":";;;;;;;;;;;;;AAAA,2CAAwC;AACxC,6BAAwB;AACxB,8CAM2B;AAC3B,+EAA0E;AAE1E,MAAM,MAAM,GAAG,OAAC,CAAC,MAAM,CAAC;IACtB,IAAI,EAAE,OAAC,CAAC,MAAM,EAAE;CACjB,CAAC,CAAC,MAAM,EAAE,CAAC;AAEZ,MAAM,MAAM,GAAG,OAAC,CAAC,MAAM,CAAC;IACtB,IAAI,EAAE,OAAC,CAAC,MAAM,EAAE;CACjB,CAAC,CAAC,MAAM,EAAE,CAAC;AAML,IAAM,yBAAyB,iCAA/B,MAAM,yBAAyB;IAGhB;IAFH,MAAM,GAAG,IAAI,eAAM,CAAC,2BAAyB,CAAC,IAAI,CAAC,CAAC;IAErE,YAAoB,oBAA0C;QAA1C,yBAAoB,GAApB,oBAAoB,CAAsB;IAAG,CAAC;IAElE,KAAK,CAAC,KAAK,CACT,KAA6B,EAC7B,QAAoC,EACpC,OAAyB;QAEzB,IAAI,CAAC,QAAQ,EAAE,CAAC;YACd,MAAM,IAAI,KAAK,CAAC,uBAAuB,CAAC,CAAC;QAC3C,CAAC;QAED,MAAM,IAAI,CAAC,oBAAoB,CAAC,UAAU,CAAC,OAAO,CAAC,WAAW,EAAE,OAAO,CAAC,UAAU,EAAE,KAAK,CAAC,IAAI,CAAC,CAAC;QAEhG,OAAO;YACL,OAAO,EAAE,IAAI;SACd,CAAC;IACJ,CAAC;CACF,CAAA;AApBY,8DAAyB;oCAAzB,yBAAyB;IAJrC,IAAA,gBAAO,EAAC;QACP,MAAM;QACN,MAAM;KACP,CAAC;qCAI0C,6CAAoB;GAHnD,yBAAyB,CAoBrC"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import { TaskType } from '../entities/scheduled-task.entity';
|
|
2
|
+
export interface CreateTaskScheduleInterface {
|
|
3
|
+
workspaceId: string;
|
|
4
|
+
rootPipelineId: string;
|
|
5
|
+
name: string;
|
|
6
|
+
type: TaskType;
|
|
7
|
+
executeAt?: string;
|
|
8
|
+
durationSeconds?: number;
|
|
9
|
+
cronExpression?: string;
|
|
10
|
+
payload?: Record<string, any>;
|
|
11
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"create-task-schedule.interface.js","sourceRoot":"","sources":["../../../../src/modules/scheduler/interfaces/create-task-schedule.interface.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
|
|
3
|
+
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
|
4
|
+
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
|
|
5
|
+
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
|
|
6
|
+
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
7
|
+
};
|
|
8
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
9
|
+
exports.SchedulerModule = void 0;
|
|
10
|
+
const common_1 = require("@nestjs/common");
|
|
11
|
+
const configuration_1 = require("../configuration");
|
|
12
|
+
const persistence_1 = require("../persistence");
|
|
13
|
+
const core_1 = require("@nestjs/core");
|
|
14
|
+
const common_2 = require("../common");
|
|
15
|
+
const typeorm_1 = require("@nestjs/typeorm");
|
|
16
|
+
const event_emitter_1 = require("@nestjs/event-emitter");
|
|
17
|
+
const scheduled_task_entity_1 = require("./entities/scheduled-task.entity");
|
|
18
|
+
const schedule_1 = require("@nestjs/schedule");
|
|
19
|
+
const task_scheduler_service_1 = require("./services/task-scheduler.service");
|
|
20
|
+
const task_execution_listener_1 = require("./services/task-execution.listener");
|
|
21
|
+
let SchedulerModule = class SchedulerModule {
|
|
22
|
+
};
|
|
23
|
+
exports.SchedulerModule = SchedulerModule;
|
|
24
|
+
exports.SchedulerModule = SchedulerModule = __decorate([
|
|
25
|
+
(0, common_1.Module)({
|
|
26
|
+
imports: [
|
|
27
|
+
typeorm_1.TypeOrmModule.forFeature([scheduled_task_entity_1.ScheduledTask]),
|
|
28
|
+
schedule_1.ScheduleModule.forRoot(),
|
|
29
|
+
event_emitter_1.EventEmitterModule.forRoot(),
|
|
30
|
+
core_1.DiscoveryModule,
|
|
31
|
+
common_2.CommonModule,
|
|
32
|
+
configuration_1.ConfigurationModule,
|
|
33
|
+
persistence_1.PersistenceModule,
|
|
34
|
+
],
|
|
35
|
+
providers: [task_scheduler_service_1.TaskSchedulerService, task_execution_listener_1.TaskExecutionListener],
|
|
36
|
+
exports: [task_scheduler_service_1.TaskSchedulerService],
|
|
37
|
+
})
|
|
38
|
+
], SchedulerModule);
|
|
39
|
+
//# sourceMappingURL=scheduler.module.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"scheduler.module.js","sourceRoot":"","sources":["../../../src/modules/scheduler/scheduler.module.ts"],"names":[],"mappings":";;;;;;;;;AAAA,2CAAwC;AACxC,oDAAuD;AACvD,gDAAmD;AACnD,uCAA+C;AAC/C,sCAAyC;AACzC,6CAAgD;AAChD,yDAA2D;AAC3D,4EAAiE;AACjE,+CAAkD;AAClD,8EAAyE;AACzE,gFAA2E;AAgBpE,IAAM,eAAe,GAArB,MAAM,eAAe;CAAG,CAAA;AAAlB,0CAAe;0BAAf,eAAe;IAd3B,IAAA,eAAM,EAAC;QACN,OAAO,EAAE;YACP,uBAAa,CAAC,UAAU,CAAC,CAAC,qCAAa,CAAC,CAAC;YACzC,yBAAc,CAAC,OAAO,EAAE;YACxB,kCAAkB,CAAC,OAAO,EAAE;YAE5B,sBAAe;YACf,qBAAY;YACZ,mCAAmB;YACnB,+BAAiB;SAClB;QACD,SAAS,EAAE,CAAC,6CAAoB,EAAE,+CAAqB,CAAC;QACxD,OAAO,EAAE,CAAC,6CAAoB,CAAC;KAChC,CAAC;GACW,eAAe,CAAG"}
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.isoDateStringSchema = exports.cronExpressionSchema = void 0;
|
|
4
|
+
const zod_1 = require("zod");
|
|
5
|
+
exports.cronExpressionSchema = zod_1.z.string().refine((value) => {
|
|
6
|
+
try {
|
|
7
|
+
const parts = value.split(' ');
|
|
8
|
+
if (parts.length !== 5)
|
|
9
|
+
return false;
|
|
10
|
+
const cronRegex = /^(\*|[0-9,\-*/]+)\s+(\*|[0-9,\-*/]+)\s+(\*|[0-9,\-*/]+)\s+(\*|[0-9,\-*/]+)\s+(\*|[0-9,\-*/]+)$/;
|
|
11
|
+
return cronRegex.test(value);
|
|
12
|
+
}
|
|
13
|
+
catch {
|
|
14
|
+
return false;
|
|
15
|
+
}
|
|
16
|
+
}, {
|
|
17
|
+
message: 'Invalid cron expression format'
|
|
18
|
+
});
|
|
19
|
+
exports.isoDateStringSchema = zod_1.z.string().refine((value) => {
|
|
20
|
+
try {
|
|
21
|
+
const date = new Date(value);
|
|
22
|
+
return !isNaN(date.getTime()) && date.toISOString() === value;
|
|
23
|
+
}
|
|
24
|
+
catch {
|
|
25
|
+
return false;
|
|
26
|
+
}
|
|
27
|
+
}, {
|
|
28
|
+
message: 'Invalid ISO date string'
|
|
29
|
+
});
|
|
30
|
+
//# sourceMappingURL=task.schema.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"task.schema.js","sourceRoot":"","sources":["../../../../src/modules/scheduler/schemas/task.schema.ts"],"names":[],"mappings":";;;AAAA,6BAAwB;AAEX,QAAA,oBAAoB,GAAG,OAAC,CAAC,MAAM,EAAE,CAAC,MAAM,CAAC,CAAC,KAAK,EAAE,EAAE;IAC9D,IAAI,CAAC;QACH,MAAM,KAAK,GAAG,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;QAC/B,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC;YAAE,OAAO,KAAK,CAAC;QAGrC,MAAM,SAAS,GAAG,gGAAgG,CAAC;QACnH,OAAO,SAAS,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IAC/B,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,KAAK,CAAC;IACf,CAAC;AACH,CAAC,EAAE;IACD,OAAO,EAAE,gCAAgC;CAC1C,CAAC,CAAC;AAEU,QAAA,mBAAmB,GAAG,OAAC,CAAC,MAAM,EAAE,CAAC,MAAM,CAAC,CAAC,KAAK,EAAE,EAAE;IAC7D,IAAI,CAAC;QACH,MAAM,IAAI,GAAG,IAAI,IAAI,CAAC,KAAK,CAAC,CAAC;QAC7B,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC,IAAI,IAAI,CAAC,WAAW,EAAE,KAAK,KAAK,CAAC;IAChE,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,KAAK,CAAC;IACf,CAAC;AACH,CAAC,EAAE;IACD,OAAO,EAAE,yBAAyB;CACnC,CAAC,CAAC"}
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
|
|
3
|
+
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
|
4
|
+
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
|
|
5
|
+
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
|
|
6
|
+
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
7
|
+
};
|
|
8
|
+
var __metadata = (this && this.__metadata) || function (k, v) {
|
|
9
|
+
if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
|
|
10
|
+
};
|
|
11
|
+
var TaskExecutionListener_1;
|
|
12
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
13
|
+
exports.TaskExecutionListener = void 0;
|
|
14
|
+
const common_1 = require("@nestjs/common");
|
|
15
|
+
const event_emitter_1 = require("@nestjs/event-emitter");
|
|
16
|
+
const task_execution_event_1 = require("../events/task-execution.event");
|
|
17
|
+
let TaskExecutionListener = TaskExecutionListener_1 = class TaskExecutionListener {
|
|
18
|
+
logger = new common_1.Logger(TaskExecutionListener_1.name);
|
|
19
|
+
async handleTaskExecution(event) {
|
|
20
|
+
this.logger.log(`Handling task execution: ${event.workspaceId}/${event.rootPipelineId}/${event.name}`);
|
|
21
|
+
try {
|
|
22
|
+
this.logger.log(`Task execution completed: ${event.taskId}`);
|
|
23
|
+
}
|
|
24
|
+
catch (error) {
|
|
25
|
+
this.logger.error(`Task execution failed: ${event.taskId}`, error);
|
|
26
|
+
throw error;
|
|
27
|
+
}
|
|
28
|
+
}
|
|
29
|
+
};
|
|
30
|
+
exports.TaskExecutionListener = TaskExecutionListener;
|
|
31
|
+
__decorate([
|
|
32
|
+
(0, event_emitter_1.OnEvent)('task.execute'),
|
|
33
|
+
__metadata("design:type", Function),
|
|
34
|
+
__metadata("design:paramtypes", [task_execution_event_1.TaskExecutionEvent]),
|
|
35
|
+
__metadata("design:returntype", Promise)
|
|
36
|
+
], TaskExecutionListener.prototype, "handleTaskExecution", null);
|
|
37
|
+
exports.TaskExecutionListener = TaskExecutionListener = TaskExecutionListener_1 = __decorate([
|
|
38
|
+
(0, common_1.Injectable)()
|
|
39
|
+
], TaskExecutionListener);
|
|
40
|
+
//# sourceMappingURL=task-execution.listener.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"task-execution.listener.js","sourceRoot":"","sources":["../../../../src/modules/scheduler/services/task-execution.listener.ts"],"names":[],"mappings":";;;;;;;;;;;;;AAAA,2CAAoD;AACpD,yDAAgD;AAChD,yEAAoE;AAG7D,IAAM,qBAAqB,6BAA3B,MAAM,qBAAqB;IACf,MAAM,GAAG,IAAI,eAAM,CAAC,uBAAqB,CAAC,IAAI,CAAC,CAAC;IAG3D,AAAN,KAAK,CAAC,mBAAmB,CAAC,KAAyB;QACjD,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,4BAA4B,KAAK,CAAC,WAAW,IAAI,KAAK,CAAC,cAAc,IAAI,KAAK,CAAC,IAAI,EAAE,CAAC,CAAC;QAEvG,IAAI,CAAC;YAIH,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,6BAA6B,KAAK,CAAC,MAAM,EAAE,CAAC,CAAC;QAC/D,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,0BAA0B,KAAK,CAAC,MAAM,EAAE,EAAE,KAAK,CAAC,CAAC;YACnE,MAAM,KAAK,CAAC;QACd,CAAC;IACH,CAAC;CACF,CAAA;AAjBY,sDAAqB;AAI1B;IADL,IAAA,uBAAO,EAAC,cAAc,CAAC;;qCACS,yCAAkB;;gEAYlD;gCAhBU,qBAAqB;IADjC,IAAA,mBAAU,GAAE;GACA,qBAAqB,CAiBjC"}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import { OnModuleInit } from '@nestjs/common';
|
|
2
|
+
import { Repository } from 'typeorm';
|
|
3
|
+
import { EventEmitter2 } from '@nestjs/event-emitter';
|
|
4
|
+
import { ScheduledTask } from '../entities/scheduled-task.entity';
|
|
5
|
+
import { CreateTaskScheduleInterface } from '../interfaces/create-task-schedule.interface';
|
|
6
|
+
export declare class TaskSchedulerService implements OnModuleInit {
|
|
7
|
+
private readonly taskRepository;
|
|
8
|
+
private readonly eventEmitter;
|
|
9
|
+
private readonly logger;
|
|
10
|
+
private readonly processingTasks;
|
|
11
|
+
constructor(taskRepository: Repository<ScheduledTask>, eventEmitter: EventEmitter2);
|
|
12
|
+
onModuleInit(): Promise<void>;
|
|
13
|
+
processScheduledTasks(): Promise<void>;
|
|
14
|
+
createTask(createTaskRequest: CreateTaskScheduleInterface): Promise<ScheduledTask>;
|
|
15
|
+
removeTask(workspaceId: string, rootPipelineId: string, name: string): Promise<void>;
|
|
16
|
+
private executeTask;
|
|
17
|
+
private handleTaskFailure;
|
|
18
|
+
private calculateNextExecution;
|
|
19
|
+
private calculateNextCronExecution;
|
|
20
|
+
private cleanupStuckTasks;
|
|
21
|
+
}
|
|
@@ -0,0 +1,194 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
|
|
3
|
+
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
|
4
|
+
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
|
|
5
|
+
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
|
|
6
|
+
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
7
|
+
};
|
|
8
|
+
var __metadata = (this && this.__metadata) || function (k, v) {
|
|
9
|
+
if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
|
|
10
|
+
};
|
|
11
|
+
var __param = (this && this.__param) || function (paramIndex, decorator) {
|
|
12
|
+
return function (target, key) { decorator(target, key, paramIndex); }
|
|
13
|
+
};
|
|
14
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
15
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
16
|
+
};
|
|
17
|
+
var TaskSchedulerService_1;
|
|
18
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
19
|
+
exports.TaskSchedulerService = void 0;
|
|
20
|
+
const common_1 = require("@nestjs/common");
|
|
21
|
+
const typeorm_1 = require("@nestjs/typeorm");
|
|
22
|
+
const typeorm_2 = require("typeorm");
|
|
23
|
+
const event_emitter_1 = require("@nestjs/event-emitter");
|
|
24
|
+
const schedule_1 = require("@nestjs/schedule");
|
|
25
|
+
const cron_parser_1 = __importDefault(require("cron-parser"));
|
|
26
|
+
const scheduled_task_entity_1 = require("../entities/scheduled-task.entity");
|
|
27
|
+
const task_execution_event_1 = require("../events/task-execution.event");
|
|
28
|
+
let TaskSchedulerService = TaskSchedulerService_1 = class TaskSchedulerService {
|
|
29
|
+
taskRepository;
|
|
30
|
+
eventEmitter;
|
|
31
|
+
logger = new common_1.Logger(TaskSchedulerService_1.name);
|
|
32
|
+
processingTasks = new Set();
|
|
33
|
+
constructor(taskRepository, eventEmitter) {
|
|
34
|
+
this.taskRepository = taskRepository;
|
|
35
|
+
this.eventEmitter = eventEmitter;
|
|
36
|
+
}
|
|
37
|
+
async onModuleInit() {
|
|
38
|
+
this.logger.log('TaskSchedulerService initialized');
|
|
39
|
+
await this.cleanupStuckTasks();
|
|
40
|
+
}
|
|
41
|
+
async processScheduledTasks() {
|
|
42
|
+
try {
|
|
43
|
+
const now = new Date();
|
|
44
|
+
const dueTasks = await this.taskRepository.find({
|
|
45
|
+
where: {
|
|
46
|
+
status: scheduled_task_entity_1.TaskStatus.ACTIVE,
|
|
47
|
+
nextExecutionAt: (0, typeorm_2.LessThanOrEqual)(now),
|
|
48
|
+
},
|
|
49
|
+
order: { nextExecutionAt: 'ASC' },
|
|
50
|
+
take: 100,
|
|
51
|
+
});
|
|
52
|
+
if (dueTasks.length === 0) {
|
|
53
|
+
return;
|
|
54
|
+
}
|
|
55
|
+
this.logger.log(`Processing ${dueTasks.length} due tasks`);
|
|
56
|
+
const taskPromises = dueTasks.map(task => this.executeTask(task));
|
|
57
|
+
await Promise.allSettled(taskPromises);
|
|
58
|
+
}
|
|
59
|
+
catch (error) {
|
|
60
|
+
this.logger.error('Error processing scheduled tasks:', error);
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
async createTask(createTaskRequest) {
|
|
64
|
+
const task = new scheduled_task_entity_1.ScheduledTask();
|
|
65
|
+
task.workspaceId = createTaskRequest.workspaceId;
|
|
66
|
+
task.rootPipelineId = createTaskRequest.rootPipelineId;
|
|
67
|
+
task.name = createTaskRequest.name;
|
|
68
|
+
task.type = createTaskRequest.type;
|
|
69
|
+
task.payload = createTaskRequest.payload || {};
|
|
70
|
+
task.nextExecutionAt = this.calculateNextExecution(createTaskRequest);
|
|
71
|
+
if (createTaskRequest.type === scheduled_task_entity_1.TaskType.ONE_TIME_DURATION) {
|
|
72
|
+
if (!createTaskRequest.durationSeconds) {
|
|
73
|
+
throw new Error(`Scheduled task of type "ONE_TIME_DURATION" must have a duration specified.`);
|
|
74
|
+
}
|
|
75
|
+
task.durationSeconds = createTaskRequest.durationSeconds;
|
|
76
|
+
}
|
|
77
|
+
else if (createTaskRequest.type === scheduled_task_entity_1.TaskType.RECURRING_CRON) {
|
|
78
|
+
if (!createTaskRequest.cronExpression) {
|
|
79
|
+
throw new Error(`Scheduled task of type "RECURRING_CRON" must have a cronExpression specified.`);
|
|
80
|
+
}
|
|
81
|
+
task.cronExpression = createTaskRequest.cronExpression;
|
|
82
|
+
}
|
|
83
|
+
return this.taskRepository.save(task);
|
|
84
|
+
}
|
|
85
|
+
async removeTask(workspaceId, rootPipelineId, name) {
|
|
86
|
+
const result = await this.taskRepository.delete({
|
|
87
|
+
workspaceId,
|
|
88
|
+
rootPipelineId,
|
|
89
|
+
name,
|
|
90
|
+
});
|
|
91
|
+
if (result.affected === 0) {
|
|
92
|
+
throw new Error(`Task not found: ${workspaceId}/${rootPipelineId}/${name}`);
|
|
93
|
+
}
|
|
94
|
+
}
|
|
95
|
+
async executeTask(task) {
|
|
96
|
+
if (this.processingTasks.has(task.id)) {
|
|
97
|
+
return;
|
|
98
|
+
}
|
|
99
|
+
this.processingTasks.add(task.id);
|
|
100
|
+
try {
|
|
101
|
+
this.logger.log(`Executing task: ${task.workspaceId}/${task.rootPipelineId}/${task.name}`);
|
|
102
|
+
const event = new task_execution_event_1.TaskExecutionEvent(task.id, task.workspaceId, task.rootPipelineId, task.name, task.payload);
|
|
103
|
+
await this.eventEmitter.emitAsync('task.execute', event);
|
|
104
|
+
task.executionCount++;
|
|
105
|
+
task.lastExecutionAt = new Date();
|
|
106
|
+
task.lastError = null;
|
|
107
|
+
if (task.type === scheduled_task_entity_1.TaskType.RECURRING_CRON) {
|
|
108
|
+
task.nextExecutionAt = this.calculateNextCronExecution(task.cronExpression);
|
|
109
|
+
}
|
|
110
|
+
else {
|
|
111
|
+
task.status = scheduled_task_entity_1.TaskStatus.COMPLETED;
|
|
112
|
+
task.nextExecutionAt = null;
|
|
113
|
+
}
|
|
114
|
+
await this.taskRepository.save(task);
|
|
115
|
+
this.logger.log(`Task executed successfully: ${task.workspaceId}/${task.rootPipelineId}/${task.name}`);
|
|
116
|
+
}
|
|
117
|
+
catch (error) {
|
|
118
|
+
this.logger.error(`Task execution failed: ${task.workspaceId}/${task.rootPipelineId}/${task.name}`, error);
|
|
119
|
+
await this.handleTaskFailure(task, error);
|
|
120
|
+
}
|
|
121
|
+
finally {
|
|
122
|
+
this.processingTasks.delete(task.id);
|
|
123
|
+
}
|
|
124
|
+
}
|
|
125
|
+
async handleTaskFailure(task, error) {
|
|
126
|
+
task.failureCount++;
|
|
127
|
+
task.lastFailureAt = new Date();
|
|
128
|
+
task.lastError = error.message || 'Unknown error';
|
|
129
|
+
if (task.type === scheduled_task_entity_1.TaskType.RECURRING_CRON) {
|
|
130
|
+
if (task.failureCount >= 3) {
|
|
131
|
+
this.logger.warn(`Task paused due to repeated failures: ${task.workspaceId}/${task.rootPipelineId}/${task.name}`);
|
|
132
|
+
task.status = scheduled_task_entity_1.TaskStatus.FAILED;
|
|
133
|
+
task.nextExecutionAt = null;
|
|
134
|
+
}
|
|
135
|
+
else {
|
|
136
|
+
task.nextExecutionAt = new Date(Date.now() + 5 * 60 * 1000);
|
|
137
|
+
}
|
|
138
|
+
}
|
|
139
|
+
else {
|
|
140
|
+
task.status = scheduled_task_entity_1.TaskStatus.FAILED;
|
|
141
|
+
task.nextExecutionAt = null;
|
|
142
|
+
}
|
|
143
|
+
await this.taskRepository.save(task);
|
|
144
|
+
}
|
|
145
|
+
calculateNextExecution(dto) {
|
|
146
|
+
const now = new Date();
|
|
147
|
+
switch (dto.type) {
|
|
148
|
+
case scheduled_task_entity_1.TaskType.ONE_TIME_DATE:
|
|
149
|
+
if (!dto.executeAt) {
|
|
150
|
+
throw new Error('executeAt is required for ONE_TIME_DATE tasks');
|
|
151
|
+
}
|
|
152
|
+
return new Date(dto.executeAt);
|
|
153
|
+
case scheduled_task_entity_1.TaskType.ONE_TIME_DURATION:
|
|
154
|
+
if (!dto.durationSeconds) {
|
|
155
|
+
throw new Error('durationSeconds is required for ONE_TIME_DURATION tasks');
|
|
156
|
+
}
|
|
157
|
+
return new Date(now.getTime() + dto.durationSeconds * 1000);
|
|
158
|
+
case scheduled_task_entity_1.TaskType.RECURRING_CRON:
|
|
159
|
+
if (!dto.cronExpression) {
|
|
160
|
+
throw new Error('cronExpression is required for RECURRING_CRON tasks');
|
|
161
|
+
}
|
|
162
|
+
return this.calculateNextCronExecution(dto.cronExpression);
|
|
163
|
+
default:
|
|
164
|
+
throw new Error(`Unsupported task type: ${dto.type}`);
|
|
165
|
+
}
|
|
166
|
+
}
|
|
167
|
+
calculateNextCronExecution(cronExpression) {
|
|
168
|
+
try {
|
|
169
|
+
const interval = cron_parser_1.default.parse(cronExpression);
|
|
170
|
+
return interval.next().toDate();
|
|
171
|
+
}
|
|
172
|
+
catch (error) {
|
|
173
|
+
throw new Error(`Invalid cron expression: ${cronExpression}`);
|
|
174
|
+
}
|
|
175
|
+
}
|
|
176
|
+
async cleanupStuckTasks() {
|
|
177
|
+
this.logger.log('Cleaning up stuck tasks...');
|
|
178
|
+
this.processingTasks.clear();
|
|
179
|
+
}
|
|
180
|
+
};
|
|
181
|
+
exports.TaskSchedulerService = TaskSchedulerService;
|
|
182
|
+
__decorate([
|
|
183
|
+
(0, schedule_1.Cron)(schedule_1.CronExpression.EVERY_30_SECONDS),
|
|
184
|
+
__metadata("design:type", Function),
|
|
185
|
+
__metadata("design:paramtypes", []),
|
|
186
|
+
__metadata("design:returntype", Promise)
|
|
187
|
+
], TaskSchedulerService.prototype, "processScheduledTasks", null);
|
|
188
|
+
exports.TaskSchedulerService = TaskSchedulerService = TaskSchedulerService_1 = __decorate([
|
|
189
|
+
(0, common_1.Injectable)(),
|
|
190
|
+
__param(0, (0, typeorm_1.InjectRepository)(scheduled_task_entity_1.ScheduledTask)),
|
|
191
|
+
__metadata("design:paramtypes", [typeorm_2.Repository,
|
|
192
|
+
event_emitter_1.EventEmitter2])
|
|
193
|
+
], TaskSchedulerService);
|
|
194
|
+
//# sourceMappingURL=task-scheduler.service.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"task-scheduler.service.js","sourceRoot":"","sources":["../../../../src/modules/scheduler/services/task-scheduler.service.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { z } from 'zod';
|
|
2
|
-
import { ContextInterface,
|
|
2
|
+
import { ContextInterface, HandlerInterface, HandlerCallResult, WorkflowEntity } from '@loopstack/shared';
|
|
3
3
|
import { NamespacesService } from '../../persistence';
|
|
4
4
|
declare const schema: z.ZodObject<{
|
|
5
5
|
label: z.ZodString;
|
|
@@ -11,10 +11,10 @@ declare const schema: z.ZodObject<{
|
|
|
11
11
|
label: string;
|
|
12
12
|
meta?: any;
|
|
13
13
|
}>;
|
|
14
|
-
export declare class
|
|
14
|
+
export declare class AddNamespaceHandler implements HandlerInterface {
|
|
15
15
|
private namespacesService;
|
|
16
16
|
private readonly logger;
|
|
17
17
|
constructor(namespacesService: NamespacesService);
|
|
18
|
-
apply(props: z.infer<typeof schema>, workflow: WorkflowEntity | undefined, context: ContextInterface): Promise<
|
|
18
|
+
apply(props: z.infer<typeof schema>, workflow: WorkflowEntity | undefined, context: ContextInterface): Promise<HandlerCallResult>;
|
|
19
19
|
}
|
|
20
20
|
export {};
|