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.
Files changed (35) hide show
  1. package/dist/command-bus/command-bus.spec.js +17 -3
  2. package/dist/command-bus/command-bus.spec.js.map +1 -1
  3. package/dist/command-bus/index.d.ts +1 -2
  4. package/dist/command-bus/index.js +13 -12
  5. package/dist/command-bus/index.js.map +1 -1
  6. package/dist/command-bus/job/job-processor.d.ts +8 -10
  7. package/dist/command-bus/job/job-processor.js +23 -113
  8. package/dist/command-bus/job/job-processor.js.map +1 -1
  9. package/dist/command-bus/job/job-processor.spec.js +17 -107
  10. package/dist/command-bus/job/job-processor.spec.js.map +1 -1
  11. package/dist/command-bus/rpc/rpc-coordinator.d.ts +39 -16
  12. package/dist/command-bus/rpc/rpc-coordinator.js +174 -94
  13. package/dist/command-bus/rpc/rpc-coordinator.js.map +1 -1
  14. package/dist/command-bus/rpc/rpc-coordinator.spec.js +64 -434
  15. package/dist/command-bus/rpc/rpc-coordinator.spec.js.map +1 -1
  16. package/dist/command-bus/types/index.d.ts +5 -4
  17. package/dist/command-bus/worker/worker-benchmark.d.ts +2 -1
  18. package/dist/command-bus/worker/worker-benchmark.js +34 -41
  19. package/dist/command-bus/worker/worker-benchmark.js.map +1 -1
  20. package/dist/command-bus/worker/worker-benchmark.spec.js +25 -15
  21. package/dist/command-bus/worker/worker-benchmark.spec.js.map +1 -1
  22. package/dist/command-bus/worker/worker-metrics-collector.d.ts +60 -49
  23. package/dist/command-bus/worker/worker-metrics-collector.js +176 -193
  24. package/dist/command-bus/worker/worker-metrics-collector.js.map +1 -1
  25. package/dist/command-bus/worker/worker-orchestrator.d.ts +1 -1
  26. package/dist/command-bus/worker/worker-orchestrator.js +20 -25
  27. package/dist/command-bus/worker/worker-orchestrator.js.map +1 -1
  28. package/dist/command-bus/worker/worker-orchestrator.spec.js +32 -28
  29. package/dist/command-bus/worker/worker-orchestrator.spec.js.map +1 -1
  30. package/dist/pp-command-bus-1.2.0.tgz +0 -0
  31. package/package.json +1 -1
  32. package/dist/command-bus/worker/worker-metrics-collector.spec.d.ts +0 -1
  33. package/dist/command-bus/worker/worker-metrics-collector.spec.js +0 -315
  34. package/dist/command-bus/worker/worker-metrics-collector.spec.js.map +0 -1
  35. 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