@powerhousedao/reactor 5.0.0-staging.1 → 5.0.0-staging.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/dist/bench/end-to-end-flow.bench.js +45 -27
- package/dist/bench/end-to-end-flow.bench.js.map +1 -1
- package/dist/bench/queue-only.bench.js +1 -0
- package/dist/bench/queue-only.bench.js.map +1 -1
- package/dist/bench/reactor-throughput.bench.js +27 -10
- package/dist/bench/reactor-throughput.bench.js.map +1 -1
- package/dist/src/executor/interfaces.d.ts +30 -53
- package/dist/src/executor/interfaces.d.ts.map +1 -1
- package/dist/src/executor/simple-job-executor-manager.d.ts +27 -0
- package/dist/src/executor/simple-job-executor-manager.d.ts.map +1 -0
- package/dist/src/executor/simple-job-executor-manager.js +128 -0
- package/dist/src/executor/simple-job-executor-manager.js.map +1 -0
- package/dist/src/executor/simple-job-executor.d.ts +19 -0
- package/dist/src/executor/simple-job-executor.d.ts.map +1 -0
- package/dist/src/executor/simple-job-executor.js +69 -0
- package/dist/src/executor/simple-job-executor.js.map +1 -0
- package/dist/src/executor/types.d.ts +22 -7
- package/dist/src/executor/types.d.ts.map +1 -1
- package/dist/src/executor/types.js.map +1 -1
- package/dist/src/index.d.ts +5 -1
- package/dist/src/index.d.ts.map +1 -1
- package/dist/src/index.js +5 -2
- package/dist/src/index.js.map +1 -1
- package/dist/src/queue/interfaces.d.ts +25 -0
- package/dist/src/queue/interfaces.d.ts.map +1 -1
- package/dist/src/queue/queue.d.ts +30 -0
- package/dist/src/queue/queue.d.ts.map +1 -1
- package/dist/src/queue/queue.js +164 -17
- package/dist/src/queue/queue.js.map +1 -1
- package/dist/src/queue/types.d.ts +4 -0
- package/dist/src/queue/types.d.ts.map +1 -1
- package/dist/src/queue/types.js.map +1 -1
- package/dist/src/reactor.d.ts.map +1 -1
- package/dist/src/reactor.js +4 -4
- package/dist/src/reactor.js.map +1 -1
- package/dist/src/registry/implementation.d.ts +62 -0
- package/dist/src/registry/implementation.d.ts.map +1 -0
- package/dist/src/registry/implementation.js +96 -0
- package/dist/src/registry/implementation.js.map +1 -0
- package/dist/src/registry/index.d.ts +3 -0
- package/dist/src/registry/index.d.ts.map +1 -0
- package/dist/src/registry/index.js +2 -0
- package/dist/src/registry/index.js.map +1 -0
- package/dist/src/registry/interfaces.d.ts +39 -0
- package/dist/src/registry/interfaces.d.ts.map +1 -0
- package/dist/src/registry/interfaces.js +2 -0
- package/dist/src/registry/interfaces.js.map +1 -0
- package/dist/test/executor-integration.test.d.ts +2 -0
- package/dist/test/executor-integration.test.d.ts.map +1 -0
- package/dist/test/executor-integration.test.js +290 -0
- package/dist/test/executor-integration.test.js.map +1 -0
- package/dist/test/factories.d.ts +131 -0
- package/dist/test/factories.d.ts.map +1 -0
- package/dist/test/factories.js +347 -0
- package/dist/test/factories.js.map +1 -0
- package/dist/test/queue.test.js +212 -32
- package/dist/test/queue.test.js.map +1 -1
- package/dist/test/reactor-queue.test.d.ts +2 -0
- package/dist/test/reactor-queue.test.d.ts.map +1 -0
- package/dist/test/reactor-queue.test.js +328 -0
- package/dist/test/reactor-queue.test.js.map +1 -0
- package/dist/test/reactor-read.test.js +28 -3
- package/dist/test/reactor-read.test.js.map +1 -1
- package/dist/test/registry.test.d.ts +2 -0
- package/dist/test/registry.test.d.ts.map +1 -0
- package/dist/test/registry.test.js +182 -0
- package/dist/test/registry.test.js.map +1 -0
- package/dist/test/simple-job-executor-manager.test.d.ts +2 -0
- package/dist/test/simple-job-executor-manager.test.d.ts.map +1 -0
- package/dist/test/simple-job-executor-manager.test.js +132 -0
- package/dist/test/simple-job-executor-manager.test.js.map +1 -0
- package/dist/test/simple-job-executor.test.d.ts +2 -0
- package/dist/test/simple-job-executor.test.d.ts.map +1 -0
- package/dist/test/simple-job-executor.test.js +139 -0
- package/dist/test/simple-job-executor.test.js.map +1 -0
- package/dist/tsconfig.tsbuildinfo +1 -1
- package/dist/vitest.config.d.ts +3 -0
- package/dist/vitest.config.d.ts.map +1 -0
- package/dist/vitest.config.js +11 -0
- package/dist/vitest.config.js.map +1 -0
- package/package.json +3 -3
- package/dist/src/executor/job-executor.d.ts +0 -62
- package/dist/src/executor/job-executor.d.ts.map +0 -1
- package/dist/src/executor/job-executor.js +0 -325
- package/dist/src/executor/job-executor.js.map +0 -1
- package/dist/test/job-executor.test.d.ts +0 -2
- package/dist/test/job-executor.test.d.ts.map +0 -1
- package/dist/test/job-executor.test.js +0 -587
- package/dist/test/job-executor.test.js.map +0 -1
- package/dist/test/reactor-write.test.d.ts +0 -2
- package/dist/test/reactor-write.test.d.ts.map +0 -1
- package/dist/test/reactor-write.test.js +0 -232
- package/dist/test/reactor-write.test.js.map +0 -1
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"vitest.config.d.ts","sourceRoot":"","sources":["../vitest.config.ts"],"names":[],"mappings":";AAEA,wBAQG"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import { defineConfig } from "vitest/config";
|
|
2
|
+
export default defineConfig({
|
|
3
|
+
test: {
|
|
4
|
+
include: ["test/**/*.test.ts"],
|
|
5
|
+
globals: true,
|
|
6
|
+
alias: {
|
|
7
|
+
"#": new URL("./src/", import.meta.url).pathname,
|
|
8
|
+
},
|
|
9
|
+
},
|
|
10
|
+
});
|
|
11
|
+
//# sourceMappingURL=vitest.config.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"vitest.config.js","sourceRoot":"","sources":["../vitest.config.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;AAE7C,eAAe,YAAY,CAAC;IAC1B,IAAI,EAAE;QACJ,OAAO,EAAE,CAAC,mBAAmB,CAAC;QAC9B,OAAO,EAAE,IAAI;QACb,KAAK,EAAE;YACL,GAAG,EAAE,IAAI,GAAG,CAAC,QAAQ,EAAE,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,QAAQ;SACjD;KACF;CACF,CAAC,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@powerhousedao/reactor",
|
|
3
|
-
"version": "5.0.0-staging.
|
|
3
|
+
"version": "5.0.0-staging.2",
|
|
4
4
|
"description": "",
|
|
5
5
|
"repository": {
|
|
6
6
|
"url": "https://github.com/powerhouse-inc/powerhouse",
|
|
@@ -25,8 +25,8 @@
|
|
|
25
25
|
"license": "AGPL-3.0-only",
|
|
26
26
|
"dependencies": {
|
|
27
27
|
"uuid": "^11.0.5",
|
|
28
|
-
"document-drive": "5.0.0-staging.
|
|
29
|
-
"document-model": "5.0.0-staging.
|
|
28
|
+
"document-drive": "5.0.0-staging.2",
|
|
29
|
+
"document-model": "5.0.0-staging.2"
|
|
30
30
|
},
|
|
31
31
|
"devDependencies": {
|
|
32
32
|
"typescript": "^5.7.3",
|
|
@@ -1,62 +0,0 @@
|
|
|
1
|
-
import { type IEventBus } from "../events/interfaces.js";
|
|
2
|
-
import { type IQueue } from "../queue/interfaces.js";
|
|
3
|
-
import { type Job } from "../queue/types.js";
|
|
4
|
-
import { type IJobExecutor } from "./interfaces.js";
|
|
5
|
-
import { type JobExecutorConfig, type JobResult } from "./types.js";
|
|
6
|
-
/**
|
|
7
|
-
* In-memory implementation of the IJobExecutor interface.
|
|
8
|
-
* Listens for job available events and executes jobs with concurrency control and retry logic.
|
|
9
|
-
*/
|
|
10
|
-
export declare class InMemoryJobExecutor implements IJobExecutor {
|
|
11
|
-
private eventBus;
|
|
12
|
-
private queue;
|
|
13
|
-
private isRunning;
|
|
14
|
-
private isPaused;
|
|
15
|
-
private config;
|
|
16
|
-
private activeJobs;
|
|
17
|
-
private jobAvailableUnsubscribe?;
|
|
18
|
-
private startedAt?;
|
|
19
|
-
private totalJobsProcessed;
|
|
20
|
-
private totalJobsSucceeded;
|
|
21
|
-
private totalJobsFailed;
|
|
22
|
-
private lastJobCompletedAt?;
|
|
23
|
-
private executionTimes;
|
|
24
|
-
private jobPromises;
|
|
25
|
-
private abortControllers;
|
|
26
|
-
constructor(eventBus: IEventBus, queue: IQueue);
|
|
27
|
-
start(config?: JobExecutorConfig): Promise<void>;
|
|
28
|
-
stop(graceful?: boolean): Promise<void>;
|
|
29
|
-
executeJob(job: Job): Promise<JobResult>;
|
|
30
|
-
getStatus(): Promise<{
|
|
31
|
-
isRunning: boolean;
|
|
32
|
-
activeJobs: number;
|
|
33
|
-
totalJobsProcessed: number;
|
|
34
|
-
totalJobsSucceeded: number;
|
|
35
|
-
totalJobsFailed: number;
|
|
36
|
-
lastJobCompletedAt: string | undefined;
|
|
37
|
-
uptime: number | undefined;
|
|
38
|
-
}>;
|
|
39
|
-
getStats(): Promise<{
|
|
40
|
-
averageExecutionTime: number;
|
|
41
|
-
successRate: number;
|
|
42
|
-
jobsPerSecond: number;
|
|
43
|
-
queueBacklog: number;
|
|
44
|
-
}>;
|
|
45
|
-
pause(): Promise<void>;
|
|
46
|
-
resume(): Promise<void>;
|
|
47
|
-
on(event: "jobStarted" | "jobCompleted" | "jobFailed" | "executorStarted" | "executorStopped", handler: (data: any) => void): () => void;
|
|
48
|
-
private getEventType;
|
|
49
|
-
private handleJobAvailable;
|
|
50
|
-
private processAvailableJobs;
|
|
51
|
-
private executeJobWithRetry;
|
|
52
|
-
private executeJobInternal;
|
|
53
|
-
private executeJobWithTimeout;
|
|
54
|
-
private performJobExecution;
|
|
55
|
-
private shouldRetryJob;
|
|
56
|
-
private calculateRetryDelay;
|
|
57
|
-
private sleep;
|
|
58
|
-
}
|
|
59
|
-
export type { IJobExecutor } from "./interfaces.js";
|
|
60
|
-
export { JobExecutorEventTypes } from "./types.js";
|
|
61
|
-
export type { ExecutorStartedEvent, ExecutorStoppedEvent, JobCompletedEvent, JobExecutorConfig, JobFailedEvent, JobResult, JobStartedEvent, } from "./types.js";
|
|
62
|
-
//# sourceMappingURL=job-executor.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"job-executor.d.ts","sourceRoot":"","sources":["../../../src/executor/job-executor.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,SAAS,EAAE,MAAM,yBAAyB,CAAC;AACzD,OAAO,EAAE,KAAK,MAAM,EAAE,MAAM,wBAAwB,CAAC;AACrD,OAAO,EAEL,KAAK,GAAG,EAET,MAAM,mBAAmB,CAAC;AAC3B,OAAO,EAAE,KAAK,YAAY,EAAE,MAAM,iBAAiB,CAAC;AACpD,OAAO,EAKL,KAAK,iBAAiB,EAEtB,KAAK,SAAS,EAEf,MAAM,YAAY,CAAC;AAYpB;;;GAGG;AACH,qBAAa,mBAAoB,YAAW,YAAY;IAoBpD,OAAO,CAAC,QAAQ;IAChB,OAAO,CAAC,KAAK;IApBf,OAAO,CAAC,SAAS,CAAS;IAC1B,OAAO,CAAC,QAAQ,CAAS;IACzB,OAAO,CAAC,MAAM,CAA+C;IAC7D,OAAO,CAAC,UAAU,CAAqB;IACvC,OAAO,CAAC,uBAAuB,CAAC,CAAa;IAC7C,OAAO,CAAC,SAAS,CAAC,CAAO;IAGzB,OAAO,CAAC,kBAAkB,CAAK;IAC/B,OAAO,CAAC,kBAAkB,CAAK;IAC/B,OAAO,CAAC,eAAe,CAAK;IAC5B,OAAO,CAAC,kBAAkB,CAAC,CAAS;IACpC,OAAO,CAAC,cAAc,CAAgB;IAGtC,OAAO,CAAC,WAAW,CAAyC;IAC5D,OAAO,CAAC,gBAAgB,CAAsC;gBAGpD,QAAQ,EAAE,SAAS,EACnB,KAAK,EAAE,MAAM;IAGjB,KAAK,CAAC,MAAM,CAAC,EAAE,iBAAiB,GAAG,OAAO,CAAC,IAAI,CAAC;IA+BhD,IAAI,CAAC,QAAQ,UAAO,GAAG,OAAO,CAAC,IAAI,CAAC;IAwCpC,UAAU,CAAC,GAAG,EAAE,GAAG,GAAG,OAAO,CAAC,SAAS,CAAC;IAIxC,SAAS;;;;;;;;;IAgBT,QAAQ;;;;;;IA2BR,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAItB,MAAM,IAAI,OAAO,CAAC,IAAI,CAAC;IAM7B,EAAE,CACA,KAAK,EACD,YAAY,GACZ,cAAc,GACd,WAAW,GACX,iBAAiB,GACjB,iBAAiB,EACrB,OAAO,EAAE,CAAC,IAAI,EAAE,GAAG,KAAK,IAAI,GAC3B,MAAM,IAAI;IAKb,OAAO,CAAC,YAAY;YAiBN,kBAAkB;YAWlB,oBAAoB;YAyBpB,mBAAmB;YAwBnB,kBAAkB;YA0FlB,qBAAqB;YA4BrB,mBAAmB;IA8BjC,OAAO,CAAC,cAAc;IAMtB,OAAO,CAAC,mBAAmB;IAY3B,OAAO,CAAC,KAAK;CAGd;AAGD,YAAY,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AACpD,OAAO,EAAE,qBAAqB,EAAE,MAAM,YAAY,CAAC;AACnD,YAAY,EACV,oBAAoB,EACpB,oBAAoB,EACpB,iBAAiB,EACjB,iBAAiB,EACjB,cAAc,EACd,SAAS,EACT,eAAe,GAChB,MAAM,YAAY,CAAC"}
|
|
@@ -1,325 +0,0 @@
|
|
|
1
|
-
import { QueueEventTypes, } from "../queue/types.js";
|
|
2
|
-
import { JobExecutorEventTypes, } from "./types.js";
|
|
3
|
-
/**
|
|
4
|
-
* Default configuration for the job executor
|
|
5
|
-
*/
|
|
6
|
-
const DEFAULT_CONFIG = {
|
|
7
|
-
maxConcurrency: 5,
|
|
8
|
-
jobTimeout: 30000, // 30 seconds
|
|
9
|
-
retryBaseDelay: 1000, // 1 second
|
|
10
|
-
retryMaxDelay: 30000, // 30 seconds
|
|
11
|
-
};
|
|
12
|
-
/**
|
|
13
|
-
* In-memory implementation of the IJobExecutor interface.
|
|
14
|
-
* Listens for job available events and executes jobs with concurrency control and retry logic.
|
|
15
|
-
*/
|
|
16
|
-
export class InMemoryJobExecutor {
|
|
17
|
-
eventBus;
|
|
18
|
-
queue;
|
|
19
|
-
isRunning = false;
|
|
20
|
-
isPaused = false;
|
|
21
|
-
config = DEFAULT_CONFIG;
|
|
22
|
-
activeJobs = new Set();
|
|
23
|
-
jobAvailableUnsubscribe;
|
|
24
|
-
startedAt;
|
|
25
|
-
// Statistics
|
|
26
|
-
totalJobsProcessed = 0;
|
|
27
|
-
totalJobsSucceeded = 0;
|
|
28
|
-
totalJobsFailed = 0;
|
|
29
|
-
lastJobCompletedAt;
|
|
30
|
-
executionTimes = [];
|
|
31
|
-
// Job execution tracking
|
|
32
|
-
jobPromises = new Map();
|
|
33
|
-
abortControllers = new Map();
|
|
34
|
-
constructor(eventBus, queue) {
|
|
35
|
-
this.eventBus = eventBus;
|
|
36
|
-
this.queue = queue;
|
|
37
|
-
}
|
|
38
|
-
async start(config) {
|
|
39
|
-
if (this.isRunning) {
|
|
40
|
-
throw new Error("Job executor is already running");
|
|
41
|
-
}
|
|
42
|
-
this.config = { ...DEFAULT_CONFIG, ...config };
|
|
43
|
-
this.isRunning = true;
|
|
44
|
-
this.isPaused = false;
|
|
45
|
-
this.startedAt = new Date();
|
|
46
|
-
// Subscribe to job available events
|
|
47
|
-
this.jobAvailableUnsubscribe = this.eventBus.subscribe(QueueEventTypes.JOB_AVAILABLE, this.handleJobAvailable.bind(this));
|
|
48
|
-
// Emit executor started event
|
|
49
|
-
const startedEvent = {
|
|
50
|
-
config: this.config,
|
|
51
|
-
startedAt: this.startedAt.toISOString(),
|
|
52
|
-
};
|
|
53
|
-
await this.eventBus.emit(JobExecutorEventTypes.EXECUTOR_STARTED, startedEvent);
|
|
54
|
-
// Check for existing jobs in the queue
|
|
55
|
-
await this.processAvailableJobs();
|
|
56
|
-
}
|
|
57
|
-
async stop(graceful = true) {
|
|
58
|
-
if (!this.isRunning) {
|
|
59
|
-
return;
|
|
60
|
-
}
|
|
61
|
-
this.isRunning = false;
|
|
62
|
-
// Unsubscribe from job available events
|
|
63
|
-
if (this.jobAvailableUnsubscribe) {
|
|
64
|
-
this.jobAvailableUnsubscribe();
|
|
65
|
-
this.jobAvailableUnsubscribe = undefined;
|
|
66
|
-
}
|
|
67
|
-
if (graceful) {
|
|
68
|
-
// Wait for all active jobs to complete
|
|
69
|
-
await Promise.allSettled(Array.from(this.jobPromises.values()));
|
|
70
|
-
}
|
|
71
|
-
else {
|
|
72
|
-
// Abort all active jobs
|
|
73
|
-
for (const controller of this.abortControllers.values()) {
|
|
74
|
-
controller.abort();
|
|
75
|
-
}
|
|
76
|
-
}
|
|
77
|
-
// Clean up
|
|
78
|
-
this.activeJobs.clear();
|
|
79
|
-
this.jobPromises.clear();
|
|
80
|
-
this.abortControllers.clear();
|
|
81
|
-
// Emit executor stopped event
|
|
82
|
-
const stoppedEvent = {
|
|
83
|
-
stoppedAt: new Date().toISOString(),
|
|
84
|
-
graceful,
|
|
85
|
-
};
|
|
86
|
-
await this.eventBus.emit(JobExecutorEventTypes.EXECUTOR_STOPPED, stoppedEvent);
|
|
87
|
-
}
|
|
88
|
-
async executeJob(job) {
|
|
89
|
-
return this.executeJobInternal(job);
|
|
90
|
-
}
|
|
91
|
-
async getStatus() {
|
|
92
|
-
const uptime = this.startedAt
|
|
93
|
-
? Date.now() - this.startedAt.getTime()
|
|
94
|
-
: undefined;
|
|
95
|
-
return {
|
|
96
|
-
isRunning: this.isRunning,
|
|
97
|
-
activeJobs: this.activeJobs.size,
|
|
98
|
-
totalJobsProcessed: this.totalJobsProcessed,
|
|
99
|
-
totalJobsSucceeded: this.totalJobsSucceeded,
|
|
100
|
-
totalJobsFailed: this.totalJobsFailed,
|
|
101
|
-
lastJobCompletedAt: this.lastJobCompletedAt,
|
|
102
|
-
uptime,
|
|
103
|
-
};
|
|
104
|
-
}
|
|
105
|
-
async getStats() {
|
|
106
|
-
const averageExecutionTime = this.executionTimes.length > 0
|
|
107
|
-
? this.executionTimes.reduce((sum, time) => sum + time, 0) /
|
|
108
|
-
this.executionTimes.length
|
|
109
|
-
: 0;
|
|
110
|
-
const successRate = this.totalJobsProcessed > 0
|
|
111
|
-
? this.totalJobsSucceeded / this.totalJobsProcessed
|
|
112
|
-
: 0;
|
|
113
|
-
const uptime = this.startedAt
|
|
114
|
-
? (Date.now() - this.startedAt.getTime()) / 1000
|
|
115
|
-
: 0;
|
|
116
|
-
const jobsPerSecond = uptime > 0 ? this.totalJobsProcessed / uptime : 0;
|
|
117
|
-
const queueBacklog = await this.queue.totalSize();
|
|
118
|
-
return {
|
|
119
|
-
averageExecutionTime,
|
|
120
|
-
successRate,
|
|
121
|
-
jobsPerSecond,
|
|
122
|
-
queueBacklog,
|
|
123
|
-
};
|
|
124
|
-
}
|
|
125
|
-
async pause() {
|
|
126
|
-
this.isPaused = true;
|
|
127
|
-
}
|
|
128
|
-
async resume() {
|
|
129
|
-
this.isPaused = false;
|
|
130
|
-
// Process any available jobs
|
|
131
|
-
await this.processAvailableJobs();
|
|
132
|
-
}
|
|
133
|
-
on(event, handler) {
|
|
134
|
-
const eventType = this.getEventType(event);
|
|
135
|
-
return this.eventBus.subscribe(eventType, (_, data) => handler(data));
|
|
136
|
-
}
|
|
137
|
-
getEventType(event) {
|
|
138
|
-
switch (event) {
|
|
139
|
-
case "jobStarted":
|
|
140
|
-
return JobExecutorEventTypes.JOB_STARTED;
|
|
141
|
-
case "jobCompleted":
|
|
142
|
-
return JobExecutorEventTypes.JOB_COMPLETED;
|
|
143
|
-
case "jobFailed":
|
|
144
|
-
return JobExecutorEventTypes.JOB_FAILED;
|
|
145
|
-
case "executorStarted":
|
|
146
|
-
return JobExecutorEventTypes.EXECUTOR_STARTED;
|
|
147
|
-
case "executorStopped":
|
|
148
|
-
return JobExecutorEventTypes.EXECUTOR_STOPPED;
|
|
149
|
-
default:
|
|
150
|
-
throw new Error(`Unknown event type: ${event}`);
|
|
151
|
-
}
|
|
152
|
-
}
|
|
153
|
-
async handleJobAvailable(_, event) {
|
|
154
|
-
if (!this.isRunning || this.isPaused) {
|
|
155
|
-
return;
|
|
156
|
-
}
|
|
157
|
-
await this.processAvailableJobs();
|
|
158
|
-
}
|
|
159
|
-
async processAvailableJobs() {
|
|
160
|
-
if (!this.isRunning || this.isPaused) {
|
|
161
|
-
return;
|
|
162
|
-
}
|
|
163
|
-
// Check if we have capacity for more jobs
|
|
164
|
-
while (this.activeJobs.size < this.config.maxConcurrency) {
|
|
165
|
-
const job = await this.queue.dequeueNext();
|
|
166
|
-
if (!job) {
|
|
167
|
-
break; // No more jobs available
|
|
168
|
-
}
|
|
169
|
-
// Start executing the job (don't await - run concurrently)
|
|
170
|
-
const jobPromise = this.executeJobWithRetry(job);
|
|
171
|
-
this.jobPromises.set(job.id, jobPromise);
|
|
172
|
-
// Handle job completion asynchronously
|
|
173
|
-
jobPromise.finally(() => {
|
|
174
|
-
this.jobPromises.delete(job.id);
|
|
175
|
-
// Try to process more jobs when this one completes
|
|
176
|
-
void this.processAvailableJobs().catch(console.error);
|
|
177
|
-
});
|
|
178
|
-
}
|
|
179
|
-
}
|
|
180
|
-
async executeJobWithRetry(job) {
|
|
181
|
-
let lastResult;
|
|
182
|
-
do {
|
|
183
|
-
lastResult = await this.executeJobInternal(job);
|
|
184
|
-
if (lastResult.success) {
|
|
185
|
-
return lastResult;
|
|
186
|
-
}
|
|
187
|
-
// Check if we should retry before incrementing
|
|
188
|
-
if (!this.shouldRetryJob(job)) {
|
|
189
|
-
return lastResult;
|
|
190
|
-
}
|
|
191
|
-
// Increment retry count after deciding to retry
|
|
192
|
-
job.retryCount = (job.retryCount || 0) + 1;
|
|
193
|
-
// Wait before retrying
|
|
194
|
-
const delay = this.calculateRetryDelay(job.retryCount);
|
|
195
|
-
await this.sleep(delay);
|
|
196
|
-
} while (true); // We'll break out when shouldRetryJob returns false
|
|
197
|
-
}
|
|
198
|
-
async executeJobInternal(job) {
|
|
199
|
-
const startTime = Date.now();
|
|
200
|
-
const abortController = new AbortController();
|
|
201
|
-
try {
|
|
202
|
-
// Track the job
|
|
203
|
-
this.activeJobs.add(job.id);
|
|
204
|
-
this.abortControllers.set(job.id, abortController);
|
|
205
|
-
// Emit job started event
|
|
206
|
-
const startedEvent = {
|
|
207
|
-
job,
|
|
208
|
-
startedAt: new Date().toISOString(),
|
|
209
|
-
};
|
|
210
|
-
await this.eventBus.emit(JobExecutorEventTypes.JOB_STARTED, startedEvent);
|
|
211
|
-
// Execute the job with timeout
|
|
212
|
-
const result = await this.executeJobWithTimeout(job, abortController.signal);
|
|
213
|
-
const endTime = Date.now();
|
|
214
|
-
const duration = endTime - startTime;
|
|
215
|
-
// Update statistics
|
|
216
|
-
this.totalJobsProcessed++;
|
|
217
|
-
this.totalJobsSucceeded++;
|
|
218
|
-
this.lastJobCompletedAt = new Date().toISOString();
|
|
219
|
-
this.executionTimes.push(duration);
|
|
220
|
-
// Keep only last 1000 execution times for average calculation
|
|
221
|
-
if (this.executionTimes.length > 1000) {
|
|
222
|
-
this.executionTimes = this.executionTimes.slice(-1000);
|
|
223
|
-
}
|
|
224
|
-
const jobResult = {
|
|
225
|
-
job,
|
|
226
|
-
success: true,
|
|
227
|
-
completedAt: this.lastJobCompletedAt,
|
|
228
|
-
duration,
|
|
229
|
-
metadata: result.metadata,
|
|
230
|
-
};
|
|
231
|
-
// Emit job completed event
|
|
232
|
-
const completedEvent = {
|
|
233
|
-
job,
|
|
234
|
-
result: jobResult,
|
|
235
|
-
};
|
|
236
|
-
await this.eventBus.emit(JobExecutorEventTypes.JOB_COMPLETED, completedEvent);
|
|
237
|
-
return jobResult;
|
|
238
|
-
}
|
|
239
|
-
catch (error) {
|
|
240
|
-
const endTime = Date.now();
|
|
241
|
-
const duration = endTime - startTime;
|
|
242
|
-
const errorMessage = error instanceof Error ? error.message : String(error);
|
|
243
|
-
// Update statistics
|
|
244
|
-
this.totalJobsProcessed++;
|
|
245
|
-
this.totalJobsFailed++;
|
|
246
|
-
const jobResult = {
|
|
247
|
-
job,
|
|
248
|
-
success: false,
|
|
249
|
-
error: errorMessage,
|
|
250
|
-
completedAt: new Date().toISOString(),
|
|
251
|
-
duration,
|
|
252
|
-
};
|
|
253
|
-
// Emit job failed event
|
|
254
|
-
const failedEvent = {
|
|
255
|
-
job,
|
|
256
|
-
error: errorMessage,
|
|
257
|
-
willRetry: this.shouldRetryJob(job),
|
|
258
|
-
retryCount: job.retryCount || 0,
|
|
259
|
-
};
|
|
260
|
-
await this.eventBus.emit(JobExecutorEventTypes.JOB_FAILED, failedEvent);
|
|
261
|
-
return jobResult;
|
|
262
|
-
}
|
|
263
|
-
finally {
|
|
264
|
-
// Clean up
|
|
265
|
-
this.activeJobs.delete(job.id);
|
|
266
|
-
this.abortControllers.delete(job.id);
|
|
267
|
-
}
|
|
268
|
-
}
|
|
269
|
-
async executeJobWithTimeout(job, signal) {
|
|
270
|
-
// Create a timeout promise
|
|
271
|
-
const timeoutPromise = new Promise((_, reject) => {
|
|
272
|
-
const timeout = setTimeout(() => {
|
|
273
|
-
reject(new Error(`Job ${job.id} timed out after ${this.config.jobTimeout}ms`));
|
|
274
|
-
}, this.config.jobTimeout);
|
|
275
|
-
// Clear timeout if aborted
|
|
276
|
-
signal.addEventListener("abort", () => {
|
|
277
|
-
clearTimeout(timeout);
|
|
278
|
-
reject(new Error(`Job ${job.id} was aborted`));
|
|
279
|
-
});
|
|
280
|
-
});
|
|
281
|
-
// Create the actual job execution promise
|
|
282
|
-
const jobPromise = this.performJobExecution(job, signal);
|
|
283
|
-
// Race between job execution and timeout
|
|
284
|
-
return Promise.race([jobPromise, timeoutPromise]);
|
|
285
|
-
}
|
|
286
|
-
async performJobExecution(job, signal) {
|
|
287
|
-
// This is where the actual job execution logic would go
|
|
288
|
-
// For now, we'll simulate job execution
|
|
289
|
-
// Check if aborted
|
|
290
|
-
if (signal.aborted) {
|
|
291
|
-
throw new Error("Job was aborted");
|
|
292
|
-
}
|
|
293
|
-
// Simulate some work
|
|
294
|
-
await this.sleep(Math.random() * 100 + 50); // 50-150ms (reduced for faster tests)
|
|
295
|
-
// Check if aborted again
|
|
296
|
-
if (signal.aborted) {
|
|
297
|
-
throw new Error("Job was aborted");
|
|
298
|
-
}
|
|
299
|
-
// Always succeed unless explicitly mocked in tests
|
|
300
|
-
return {
|
|
301
|
-
metadata: {
|
|
302
|
-
operationType: job.operation.action.type,
|
|
303
|
-
documentId: job.documentId,
|
|
304
|
-
executedAt: new Date().toISOString(),
|
|
305
|
-
},
|
|
306
|
-
};
|
|
307
|
-
}
|
|
308
|
-
shouldRetryJob(job) {
|
|
309
|
-
const retryCount = job.retryCount || 0;
|
|
310
|
-
const maxRetries = job.maxRetries || 3;
|
|
311
|
-
return retryCount < maxRetries;
|
|
312
|
-
}
|
|
313
|
-
calculateRetryDelay(retryCount) {
|
|
314
|
-
// Exponential backoff with jitter
|
|
315
|
-
const exponentialDelay = this.config.retryBaseDelay * Math.pow(2, retryCount - 1);
|
|
316
|
-
const jitter = Math.random() * 0.1 * exponentialDelay; // 10% jitter
|
|
317
|
-
const delay = Math.min(exponentialDelay + jitter, this.config.retryMaxDelay);
|
|
318
|
-
return Math.floor(delay);
|
|
319
|
-
}
|
|
320
|
-
sleep(ms) {
|
|
321
|
-
return new Promise((resolve) => setTimeout(resolve, ms));
|
|
322
|
-
}
|
|
323
|
-
}
|
|
324
|
-
export { JobExecutorEventTypes } from "./types.js";
|
|
325
|
-
//# sourceMappingURL=job-executor.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"job-executor.js","sourceRoot":"","sources":["../../../src/executor/job-executor.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"job-executor.test.d.ts","sourceRoot":"","sources":["../../test/job-executor.test.ts"],"names":[],"mappings":""}
|