pp-command-bus 1.1.0 → 1.2.0
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/command-bus/command-bus.spec.js +17 -3
- package/dist/command-bus/command-bus.spec.js.map +1 -1
- package/dist/command-bus/index.d.ts +1 -2
- package/dist/command-bus/index.js +13 -12
- package/dist/command-bus/index.js.map +1 -1
- package/dist/command-bus/job/job-processor.d.ts +8 -10
- package/dist/command-bus/job/job-processor.js +23 -113
- package/dist/command-bus/job/job-processor.js.map +1 -1
- package/dist/command-bus/job/job-processor.spec.js +17 -107
- package/dist/command-bus/job/job-processor.spec.js.map +1 -1
- package/dist/command-bus/rpc/rpc-coordinator.d.ts +39 -16
- package/dist/command-bus/rpc/rpc-coordinator.js +174 -94
- package/dist/command-bus/rpc/rpc-coordinator.js.map +1 -1
- package/dist/command-bus/rpc/rpc-coordinator.spec.js +64 -434
- package/dist/command-bus/rpc/rpc-coordinator.spec.js.map +1 -1
- package/dist/command-bus/types/index.d.ts +5 -4
- package/dist/command-bus/worker/worker-benchmark.d.ts +2 -1
- package/dist/command-bus/worker/worker-benchmark.js +34 -41
- package/dist/command-bus/worker/worker-benchmark.js.map +1 -1
- package/dist/command-bus/worker/worker-benchmark.spec.js +25 -15
- package/dist/command-bus/worker/worker-benchmark.spec.js.map +1 -1
- package/dist/command-bus/worker/worker-metrics-collector.d.ts +60 -49
- package/dist/command-bus/worker/worker-metrics-collector.js +176 -193
- package/dist/command-bus/worker/worker-metrics-collector.js.map +1 -1
- package/dist/command-bus/worker/worker-orchestrator.d.ts +1 -1
- package/dist/command-bus/worker/worker-orchestrator.js +20 -25
- package/dist/command-bus/worker/worker-orchestrator.js.map +1 -1
- package/dist/command-bus/worker/worker-orchestrator.spec.js +32 -28
- package/dist/command-bus/worker/worker-orchestrator.spec.js.map +1 -1
- package/dist/pp-command-bus-1.2.0.tgz +0 -0
- package/package.json +1 -1
- package/dist/command-bus/worker/worker-metrics-collector.spec.d.ts +0 -1
- package/dist/command-bus/worker/worker-metrics-collector.spec.js +0 -315
- package/dist/command-bus/worker/worker-metrics-collector.spec.js.map +0 -1
- package/dist/pp-command-bus-1.1.0.tgz +0 -0
|
@@ -1,315 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
|
3
|
-
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
4
|
-
return new (P || (P = Promise))(function (resolve, reject) {
|
|
5
|
-
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
|
6
|
-
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
|
7
|
-
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
|
8
|
-
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
9
|
-
});
|
|
10
|
-
};
|
|
11
|
-
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
12
|
-
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
13
|
-
};
|
|
14
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
15
|
-
const worker_metrics_collector_1 = __importDefault(require("./worker-metrics-collector"));
|
|
16
|
-
describe('WorkerMetricsCollector', () => {
|
|
17
|
-
let mockQueue;
|
|
18
|
-
let mockLogger;
|
|
19
|
-
let collector;
|
|
20
|
-
beforeEach(() => {
|
|
21
|
-
// Mock Queue z getJobCounts
|
|
22
|
-
mockQueue = {
|
|
23
|
-
getJobCounts: jest.fn(),
|
|
24
|
-
};
|
|
25
|
-
// Mock Logger
|
|
26
|
-
mockLogger = {
|
|
27
|
-
log: jest.fn(),
|
|
28
|
-
debug: jest.fn(),
|
|
29
|
-
error: jest.fn(),
|
|
30
|
-
warn: jest.fn(),
|
|
31
|
-
};
|
|
32
|
-
});
|
|
33
|
-
afterEach(() => {
|
|
34
|
-
if (collector) {
|
|
35
|
-
collector.stop();
|
|
36
|
-
}
|
|
37
|
-
});
|
|
38
|
-
describe('start/stop', () => {
|
|
39
|
-
it('powinien uruchomić zbieranie metryk', () => __awaiter(void 0, void 0, void 0, function* () {
|
|
40
|
-
mockQueue.getJobCounts.mockResolvedValue({
|
|
41
|
-
waiting: 10,
|
|
42
|
-
active: 5,
|
|
43
|
-
completed: 100,
|
|
44
|
-
failed: 2,
|
|
45
|
-
});
|
|
46
|
-
collector = new worker_metrics_collector_1.default('TestCommand', mockQueue, mockLogger);
|
|
47
|
-
collector.start();
|
|
48
|
-
// Czekaj na pierwsze zbieranie
|
|
49
|
-
yield new Promise((resolve) => setTimeout(resolve, 100));
|
|
50
|
-
expect(mockQueue.getJobCounts).toHaveBeenCalled();
|
|
51
|
-
collector.stop();
|
|
52
|
-
}));
|
|
53
|
-
it('nie powinien uruchamiać drugiego interwału jeśli już działa', () => __awaiter(void 0, void 0, void 0, function* () {
|
|
54
|
-
mockQueue.getJobCounts.mockResolvedValue({
|
|
55
|
-
waiting: 0,
|
|
56
|
-
active: 0,
|
|
57
|
-
completed: 0,
|
|
58
|
-
failed: 0,
|
|
59
|
-
});
|
|
60
|
-
collector = new worker_metrics_collector_1.default('TestCommand', mockQueue, mockLogger);
|
|
61
|
-
collector.start();
|
|
62
|
-
const callsAfterFirst = mockQueue.getJobCounts.mock.calls.length;
|
|
63
|
-
collector.start(); // Druga próba start
|
|
64
|
-
yield new Promise((resolve) => setTimeout(resolve, 100));
|
|
65
|
-
// Liczba wywołań nie powinna się podwoić
|
|
66
|
-
const callsAfterSecond = mockQueue.getJobCounts.mock.calls.length;
|
|
67
|
-
expect(callsAfterSecond).toBeLessThanOrEqual(callsAfterFirst + 1);
|
|
68
|
-
collector.stop();
|
|
69
|
-
}));
|
|
70
|
-
it('powinien zatrzymać zbieranie metryk', () => __awaiter(void 0, void 0, void 0, function* () {
|
|
71
|
-
mockQueue.getJobCounts.mockResolvedValue({
|
|
72
|
-
waiting: 0,
|
|
73
|
-
active: 0,
|
|
74
|
-
completed: 0,
|
|
75
|
-
failed: 0,
|
|
76
|
-
});
|
|
77
|
-
collector = new worker_metrics_collector_1.default('TestCommand', mockQueue, mockLogger);
|
|
78
|
-
collector.start();
|
|
79
|
-
yield new Promise((resolve) => setTimeout(resolve, 100));
|
|
80
|
-
const callsBeforeStop = mockQueue.getJobCounts.mock.calls.length;
|
|
81
|
-
collector.stop();
|
|
82
|
-
// Czekaj i sprawdź czy nie ma nowych wywołań
|
|
83
|
-
yield new Promise((resolve) => setTimeout(resolve, 200));
|
|
84
|
-
const callsAfterStop = mockQueue.getJobCounts.mock.calls.length;
|
|
85
|
-
// Po stop nie powinno być nowych wywołań (może być max +1 jeśli timer był już scheduled)
|
|
86
|
-
expect(callsAfterStop).toBeLessThanOrEqual(callsBeforeStop + 1);
|
|
87
|
-
}));
|
|
88
|
-
});
|
|
89
|
-
describe('recordJobProcessingTime', () => {
|
|
90
|
-
it('powinien zapisać czas przetwarzania joba', () => {
|
|
91
|
-
collector = new worker_metrics_collector_1.default('TestCommand', mockQueue, mockLogger);
|
|
92
|
-
collector.recordJobProcessingTime(150);
|
|
93
|
-
collector.recordJobProcessingTime(200);
|
|
94
|
-
expect(mockLogger.debug).toHaveBeenCalledWith('Zapisano czas przetwarzania joba', expect.objectContaining({
|
|
95
|
-
commandName: 'TestCommand',
|
|
96
|
-
durationMs: 150,
|
|
97
|
-
totalRecorded: 1,
|
|
98
|
-
}));
|
|
99
|
-
expect(mockLogger.debug).toHaveBeenCalledWith('Zapisano czas przetwarzania joba', expect.objectContaining({
|
|
100
|
-
commandName: 'TestCommand',
|
|
101
|
-
durationMs: 200,
|
|
102
|
-
totalRecorded: 2,
|
|
103
|
-
}));
|
|
104
|
-
});
|
|
105
|
-
});
|
|
106
|
-
describe('collectMetrics', () => {
|
|
107
|
-
it('powinien zbierać metryki z kolejki i logować', () => __awaiter(void 0, void 0, void 0, function* () {
|
|
108
|
-
mockQueue.getJobCounts.mockResolvedValue({
|
|
109
|
-
waiting: 15,
|
|
110
|
-
active: 8,
|
|
111
|
-
completed: 250,
|
|
112
|
-
failed: 3,
|
|
113
|
-
});
|
|
114
|
-
collector = new worker_metrics_collector_1.default('TestCommand', mockQueue, mockLogger);
|
|
115
|
-
collector.start();
|
|
116
|
-
yield new Promise((resolve) => setTimeout(resolve, 100));
|
|
117
|
-
expect(mockLogger.log).toHaveBeenCalledWith('Metryki workera TestCommand', expect.objectContaining({
|
|
118
|
-
commandName: 'TestCommand',
|
|
119
|
-
waiting: 15,
|
|
120
|
-
active: 8,
|
|
121
|
-
completed: 250,
|
|
122
|
-
failed: 3,
|
|
123
|
-
jobsPerSecond: 0, // Pierwszy pomiar
|
|
124
|
-
jobsPerMinute: 0,
|
|
125
|
-
}));
|
|
126
|
-
collector.stop();
|
|
127
|
-
}));
|
|
128
|
-
it('powinien obsłużyć błąd podczas zbierania metryk', () => __awaiter(void 0, void 0, void 0, function* () {
|
|
129
|
-
mockQueue.getJobCounts.mockRejectedValue(new Error('Redis connection error'));
|
|
130
|
-
collector = new worker_metrics_collector_1.default('TestCommand', mockQueue, mockLogger);
|
|
131
|
-
collector.start();
|
|
132
|
-
yield new Promise((resolve) => setTimeout(resolve, 100));
|
|
133
|
-
expect(mockLogger.error).toHaveBeenCalledWith('Błąd podczas zbierania metryk workera', expect.objectContaining({
|
|
134
|
-
commandName: 'TestCommand',
|
|
135
|
-
error: 'Redis connection error',
|
|
136
|
-
}));
|
|
137
|
-
collector.stop();
|
|
138
|
-
}));
|
|
139
|
-
});
|
|
140
|
-
describe('calculateThroughput', () => {
|
|
141
|
-
it('powinien zwrócić 0 dla pierwszego pomiaru', () => __awaiter(void 0, void 0, void 0, function* () {
|
|
142
|
-
mockQueue.getJobCounts.mockResolvedValue({
|
|
143
|
-
waiting: 5,
|
|
144
|
-
active: 2,
|
|
145
|
-
completed: 50,
|
|
146
|
-
failed: 1,
|
|
147
|
-
});
|
|
148
|
-
collector = new worker_metrics_collector_1.default('TestCommand', mockQueue, mockLogger);
|
|
149
|
-
collector.start();
|
|
150
|
-
yield new Promise((resolve) => setTimeout(resolve, 100));
|
|
151
|
-
// Pierwszy pomiar - brak historii
|
|
152
|
-
expect(mockLogger.log).toHaveBeenCalledWith('Metryki workera TestCommand', expect.objectContaining({
|
|
153
|
-
jobsPerSecond: 0,
|
|
154
|
-
jobsPerMinute: 0,
|
|
155
|
-
}));
|
|
156
|
-
collector.stop();
|
|
157
|
-
}));
|
|
158
|
-
it('powinien obliczyć przepustowość na podstawie różnicy completed', () => __awaiter(void 0, void 0, void 0, function* () {
|
|
159
|
-
let callCount = 0;
|
|
160
|
-
mockQueue.getJobCounts.mockImplementation(() => {
|
|
161
|
-
const completed = 100 + callCount * 10; // 100, 110, 120...
|
|
162
|
-
callCount++;
|
|
163
|
-
return Promise.resolve({
|
|
164
|
-
waiting: 10,
|
|
165
|
-
active: 5,
|
|
166
|
-
completed,
|
|
167
|
-
failed: 0,
|
|
168
|
-
});
|
|
169
|
-
});
|
|
170
|
-
collector = new worker_metrics_collector_1.default('TestCommand', mockQueue, mockLogger);
|
|
171
|
-
collector.start();
|
|
172
|
-
// Czekaj na kilka pomiarów (metryki zbierane co 5s, czekamy 11s na 3 pomiary)
|
|
173
|
-
yield new Promise((resolve) => setTimeout(resolve, 11000));
|
|
174
|
-
// Sprawdź że throughput jest obliczany (nie jest 0 po drugim pomiarze)
|
|
175
|
-
const logCalls = mockLogger.log.mock.calls;
|
|
176
|
-
const metricsWithThroughput = logCalls.filter((call) => {
|
|
177
|
-
var _a;
|
|
178
|
-
const metrics = call[1];
|
|
179
|
-
return call[0] === 'Metryki workera TestCommand' && ((_a = metrics.jobsPerSecond) !== null && _a !== void 0 ? _a : 0) > 0;
|
|
180
|
-
});
|
|
181
|
-
expect(metricsWithThroughput.length).toBeGreaterThan(0);
|
|
182
|
-
collector.stop();
|
|
183
|
-
}));
|
|
184
|
-
});
|
|
185
|
-
describe('calculateAvgProcessingTime', () => {
|
|
186
|
-
it('powinien obliczyć średni czas przetwarzania', () => __awaiter(void 0, void 0, void 0, function* () {
|
|
187
|
-
mockQueue.getJobCounts.mockResolvedValue({
|
|
188
|
-
waiting: 0,
|
|
189
|
-
active: 0,
|
|
190
|
-
completed: 0,
|
|
191
|
-
failed: 0,
|
|
192
|
-
});
|
|
193
|
-
collector = new worker_metrics_collector_1.default('TestCommand', mockQueue, mockLogger);
|
|
194
|
-
// Zapisz czasy przetwarzania
|
|
195
|
-
collector.recordJobProcessingTime(100);
|
|
196
|
-
collector.recordJobProcessingTime(200);
|
|
197
|
-
collector.recordJobProcessingTime(300);
|
|
198
|
-
collector.start();
|
|
199
|
-
yield new Promise((resolve) => setTimeout(resolve, 100));
|
|
200
|
-
// Średnia: (100 + 200 + 300) / 3 = 200
|
|
201
|
-
expect(mockLogger.log).toHaveBeenCalledWith('Metryki workera TestCommand', expect.objectContaining({
|
|
202
|
-
avgProcessingTimeMs: 200,
|
|
203
|
-
}));
|
|
204
|
-
collector.stop();
|
|
205
|
-
}));
|
|
206
|
-
it('powinien zwrócić 0 gdy brak pomiarów', () => __awaiter(void 0, void 0, void 0, function* () {
|
|
207
|
-
mockQueue.getJobCounts.mockResolvedValue({
|
|
208
|
-
waiting: 0,
|
|
209
|
-
active: 0,
|
|
210
|
-
completed: 0,
|
|
211
|
-
failed: 0,
|
|
212
|
-
});
|
|
213
|
-
collector = new worker_metrics_collector_1.default('TestCommand', mockQueue, mockLogger);
|
|
214
|
-
collector.start();
|
|
215
|
-
yield new Promise((resolve) => setTimeout(resolve, 100));
|
|
216
|
-
expect(mockLogger.log).toHaveBeenCalledWith('Metryki workera TestCommand', expect.objectContaining({
|
|
217
|
-
avgProcessingTimeMs: 0,
|
|
218
|
-
}));
|
|
219
|
-
expect(mockLogger.debug).toHaveBeenCalledWith('Brak czasów przetwarzania do obliczenia średniej', expect.any(Object));
|
|
220
|
-
collector.stop();
|
|
221
|
-
}));
|
|
222
|
-
});
|
|
223
|
-
describe('addToHistory - okno przesuwne', () => {
|
|
224
|
-
it('powinien zbierać metryki wielokrotnie bez błędów', () => __awaiter(void 0, void 0, void 0, function* () {
|
|
225
|
-
mockQueue.getJobCounts.mockResolvedValue({
|
|
226
|
-
waiting: 5,
|
|
227
|
-
active: 3,
|
|
228
|
-
completed: 100,
|
|
229
|
-
failed: 0,
|
|
230
|
-
});
|
|
231
|
-
collector = new worker_metrics_collector_1.default('TestCommand', mockQueue, mockLogger);
|
|
232
|
-
collector.start();
|
|
233
|
-
// Czekaj na kilka cykli zbierania
|
|
234
|
-
yield new Promise((resolve) => setTimeout(resolve, 500));
|
|
235
|
-
// Sprawdź że metryki są zbierane wielokrotnie
|
|
236
|
-
// (weryfikacja pośrednia - okno przesuwne działa poprawnie bez błędów)
|
|
237
|
-
expect(mockLogger.log).toHaveBeenCalled();
|
|
238
|
-
expect(mockQueue.getJobCounts).toHaveBeenCalled();
|
|
239
|
-
collector.stop();
|
|
240
|
-
}));
|
|
241
|
-
});
|
|
242
|
-
describe('analyzeTrend', () => {
|
|
243
|
-
it('powinien logować metryki z trendem', () => __awaiter(void 0, void 0, void 0, function* () {
|
|
244
|
-
mockQueue.getJobCounts.mockResolvedValue({
|
|
245
|
-
waiting: 10,
|
|
246
|
-
active: 5,
|
|
247
|
-
completed: 100,
|
|
248
|
-
failed: 0,
|
|
249
|
-
});
|
|
250
|
-
const onRecommendation = jest.fn();
|
|
251
|
-
collector = new worker_metrics_collector_1.default('TestCommand', mockQueue, mockLogger, onRecommendation);
|
|
252
|
-
collector.start();
|
|
253
|
-
// Czekaj na kilka cykli zbierania
|
|
254
|
-
yield new Promise((resolve) => setTimeout(resolve, 300));
|
|
255
|
-
collector.stop();
|
|
256
|
-
// Sprawdź że metryki są logowane
|
|
257
|
-
expect(mockLogger.log).toHaveBeenCalled();
|
|
258
|
-
}));
|
|
259
|
-
});
|
|
260
|
-
describe('analyzeMetricsAndRecommendConcurrency', () => {
|
|
261
|
-
// Uwaga: Te testy są uproszczone z powodu trudności z testowaniem fake timers + async
|
|
262
|
-
// Pełną funkcjonalność testujemy w testach integracyjnych
|
|
263
|
-
it('powinien utworzyć collector z callbackiem', () => {
|
|
264
|
-
const onRecommendation = jest.fn();
|
|
265
|
-
collector = new worker_metrics_collector_1.default('TestCommand', mockQueue, mockLogger, onRecommendation);
|
|
266
|
-
// Test jednostkowy - sprawdzamy czy collector został utworzony poprawnie
|
|
267
|
-
expect(collector).toBeDefined();
|
|
268
|
-
});
|
|
269
|
-
it('callback powinien otrzymywać obiekt rekomendacji', () => {
|
|
270
|
-
const onRecommendation = jest.fn();
|
|
271
|
-
collector = new worker_metrics_collector_1.default('TestCommand', mockQueue, mockLogger, onRecommendation);
|
|
272
|
-
// Symuluj rekomendację ręcznie
|
|
273
|
-
const mockRecommendation = {
|
|
274
|
-
shouldAdjust: true,
|
|
275
|
-
direction: 'increase',
|
|
276
|
-
reason: 'Test reason',
|
|
277
|
-
currentMetrics: {
|
|
278
|
-
waiting: 100,
|
|
279
|
-
active: 10,
|
|
280
|
-
jobsPerSecond: 5,
|
|
281
|
-
avgProcessingTimeMs: 200,
|
|
282
|
-
timestamp: Date.now(),
|
|
283
|
-
},
|
|
284
|
-
};
|
|
285
|
-
onRecommendation(mockRecommendation);
|
|
286
|
-
expect(onRecommendation).toHaveBeenCalledWith(mockRecommendation);
|
|
287
|
-
});
|
|
288
|
-
it('powinien logować metryki z odpowiednimi polami', () => __awaiter(void 0, void 0, void 0, function* () {
|
|
289
|
-
mockQueue.getJobCounts.mockResolvedValue({
|
|
290
|
-
waiting: 50,
|
|
291
|
-
active: 10,
|
|
292
|
-
completed: 100,
|
|
293
|
-
failed: 0,
|
|
294
|
-
});
|
|
295
|
-
collector = new worker_metrics_collector_1.default('TestCommand', mockQueue, mockLogger);
|
|
296
|
-
collector.recordJobProcessingTime(100);
|
|
297
|
-
collector.start();
|
|
298
|
-
yield Promise.resolve();
|
|
299
|
-
// Sprawdź że metryki zawierają wszystkie wymagane pola
|
|
300
|
-
expect(mockLogger.log).toHaveBeenCalledWith('Metryki workera TestCommand', expect.objectContaining({
|
|
301
|
-
commandName: 'TestCommand',
|
|
302
|
-
waiting: 50,
|
|
303
|
-
active: 10,
|
|
304
|
-
completed: 100,
|
|
305
|
-
failed: 0,
|
|
306
|
-
jobsPerSecond: expect.any(Number),
|
|
307
|
-
jobsPerMinute: expect.any(Number),
|
|
308
|
-
avgProcessingTimeMs: expect.any(Number),
|
|
309
|
-
timestamp: expect.any(String),
|
|
310
|
-
}));
|
|
311
|
-
collector.stop();
|
|
312
|
-
}));
|
|
313
|
-
});
|
|
314
|
-
});
|
|
315
|
-
//# sourceMappingURL=worker-metrics-collector.spec.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"worker-metrics-collector.spec.js","sourceRoot":"","sources":["../../../src/command-bus/worker/worker-metrics-collector.spec.ts"],"names":[],"mappings":"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"}
|
|
Binary file
|