pp-command-bus 1.3.0 → 1.3.1
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/README.md +4 -4
- package/dist/command-bus/command-bus.spec.js +1 -1
- package/dist/command-bus/config/command-bus-config.d.ts +1 -1
- package/dist/command-bus/config/command-bus-config.js +1 -1
- package/dist/command-bus/config/command-bus-config.spec.js +2 -2
- package/dist/command-bus/job/job-options-builder.spec.js +4 -4
- package/dist/command-bus/job/job-processor.spec.js +2 -2
- package/dist/command-bus/worker/worker-orchestrator.spec.js +4 -4
- package/dist/pp-command-bus-1.3.1.tgz +0 -0
- package/package.json +1 -1
- package/dist/pp-command-bus-1.3.0.tgz +0 -0
package/README.md
CHANGED
|
@@ -232,7 +232,7 @@ const config = new CommandBusConfig({
|
|
|
232
232
|
logger: console, // ILogger interface
|
|
233
233
|
logLevel: 'log', // debug | log | warn | error
|
|
234
234
|
concurrency: 5,
|
|
235
|
-
maxAttempts:
|
|
235
|
+
maxAttempts: 1,
|
|
236
236
|
});
|
|
237
237
|
|
|
238
238
|
// Utwórz instancję CommandBus
|
|
@@ -295,7 +295,7 @@ Biblioteka wspiera konfigurację poprzez zmienne środowiskowe z prefiksem `COMM
|
|
|
295
295
|
| `REDIS_URL` | string | `redis://localhost:6379` | URL połączenia Redis/DragonflyDB (wspiera username, password, db) |
|
|
296
296
|
| `LOG_LEVEL` | enum | `log` | Poziom logowania: `debug`, `log`, `warn`, `error` |
|
|
297
297
|
| `COMMAND_BUS_CONCURRENCY` | number | `1` (lub auto) | Liczba równoległych workerów do przetwarzania komend |
|
|
298
|
-
| `COMMAND_BUS_MAX_ATTEMPTS` | number | `
|
|
298
|
+
| `COMMAND_BUS_MAX_ATTEMPTS` | number | `1` | Maksymalna liczba prób przetworzenia zadania |
|
|
299
299
|
| `COMMAND_BUS_BACKOFF_DELAY` | number | `2000` | Opóźnienie między próbami w milisekundach |
|
|
300
300
|
| `COMMAND_BUS_QUEUE_MODE` | enum | `fifo` | Tryb przetwarzania kolejki: `fifo` (First In First Out) lub `lifo` (Last In First Out) |
|
|
301
301
|
| `COMMAND_BUS_LOG` | string | _(puste)_ | Ścieżka do katalogu logów komend (JSONL format, rotacja co godzinę) |
|
|
@@ -328,7 +328,7 @@ COMMAND_BUS_AUTO_OPTIMIZE=true
|
|
|
328
328
|
# COMMAND_BUS_CONCURRENCY=10
|
|
329
329
|
|
|
330
330
|
# Retry i backoff
|
|
331
|
-
COMMAND_BUS_MAX_ATTEMPTS=
|
|
331
|
+
COMMAND_BUS_MAX_ATTEMPTS=1 # Maksymalna liczba prób
|
|
332
332
|
COMMAND_BUS_BACKOFF_DELAY=3000 # Opóźnienie między próbami (3s)
|
|
333
333
|
|
|
334
334
|
# Tryb kolejki
|
|
@@ -596,7 +596,7 @@ interface CommandBusConfigOptions {
|
|
|
596
596
|
logger?: ILogger; // Logger (domyślnie console)
|
|
597
597
|
logLevel?: 'debug' | 'log' | 'warn' | 'error'; // Poziom logowania (domyślnie 'log')
|
|
598
598
|
concurrency?: number; // Liczba workerów (domyślnie 1 lub auto)
|
|
599
|
-
maxAttempts?: number; // Maksymalna liczba prób (domyślnie
|
|
599
|
+
maxAttempts?: number; // Maksymalna liczba prób (domyślnie 1)
|
|
600
600
|
backoffDelay?: number; // Opóźnienie między próbami w ms (domyślnie 2000)
|
|
601
601
|
queueMode?: 'fifo' | 'lifo'; // Tryb kolejki (domyślnie 'fifo')
|
|
602
602
|
commandLog?: string; // Ścieżka do katalogu logów komend (opcjonalnie)
|
|
@@ -150,7 +150,7 @@ describe('CommandBus', () => {
|
|
|
150
150
|
__compressed: false, // Mała komenda nie powinna być skompresowana
|
|
151
151
|
data: 'test data',
|
|
152
152
|
}), expect.objectContaining({
|
|
153
|
-
attempts:
|
|
153
|
+
attempts: 1,
|
|
154
154
|
backoff: expect.objectContaining({
|
|
155
155
|
type: 'exponential',
|
|
156
156
|
delay: 2000,
|
|
@@ -18,7 +18,7 @@ class CommandBusConfig extends base_config_1.default {
|
|
|
18
18
|
const manualConcurrencyFromEnv = !!((_a = process.env.COMMAND_BUS_CONCURRENCY) !== null && _a !== void 0 ? _a : process.env.EVENT_BUS_CONCURRENCY);
|
|
19
19
|
// Wczytaj konfigurację z nowym prefiksem COMMAND_BUS_ z fallbackiem do starych nazw
|
|
20
20
|
this.concurrency = this.parseIntWithDefault((_b = process.env.COMMAND_BUS_CONCURRENCY) !== null && _b !== void 0 ? _b : process.env.EVENT_BUS_CONCURRENCY, 1);
|
|
21
|
-
this.maxAttempts = this.parseIntWithDefault((_c = process.env.COMMAND_BUS_MAX_ATTEMPTS) !== null && _c !== void 0 ? _c : process.env.EVENT_BUS_MAX_ATTEMPTS,
|
|
21
|
+
this.maxAttempts = this.parseIntWithDefault((_c = process.env.COMMAND_BUS_MAX_ATTEMPTS) !== null && _c !== void 0 ? _c : process.env.EVENT_BUS_MAX_ATTEMPTS, 1);
|
|
22
22
|
this.backoffDelay = this.parseIntWithDefault((_d = process.env.COMMAND_BUS_BACKOFF_DELAY) !== null && _d !== void 0 ? _d : process.env.EVENT_BUS_BACKOFF_DELAY, 2000);
|
|
23
23
|
const queueModeValue = (_e = process.env.COMMAND_BUS_QUEUE_MODE) !== null && _e !== void 0 ? _e : process.env.EVENT_BUS_QUEUE_MODE;
|
|
24
24
|
this.queueMode = queueModeValue === 'lifo' ? 'lifo' : 'fifo';
|
|
@@ -25,7 +25,7 @@ describe('CommandBusConfig', () => {
|
|
|
25
25
|
// autoOptimize jest domyślnie true, więc concurrency będzie auto-optymalizowane
|
|
26
26
|
expect(config.autoOptimize).toBe(true);
|
|
27
27
|
expect(config.concurrency).toBeGreaterThan(1); // Auto-optymalizacja
|
|
28
|
-
expect(config.maxAttempts).toBe(
|
|
28
|
+
expect(config.maxAttempts).toBe(1);
|
|
29
29
|
expect(config.backoffDelay).toBe(2000);
|
|
30
30
|
expect(config.queueMode).toBe('fifo');
|
|
31
31
|
expect(config.commandLog).toBe('');
|
|
@@ -116,7 +116,7 @@ describe('CommandBusConfig', () => {
|
|
|
116
116
|
// Gdy zmienna środowiskowa jest ustawiona (nawet nieprawidłowo), uznajemy ją za ręczne ustawienie
|
|
117
117
|
// więc nie uruchamiamy auto-optymalizacji i używamy fallback wartości z parseIntWithDefault
|
|
118
118
|
expect(config.concurrency).toBe(1); // Fallback value z parseIntWithDefault
|
|
119
|
-
expect(config.maxAttempts).toBe(
|
|
119
|
+
expect(config.maxAttempts).toBe(1);
|
|
120
120
|
expect(config.backoffDelay).toBe(2000);
|
|
121
121
|
});
|
|
122
122
|
it('powinno prawidłowo parsować queue mode', () => {
|
|
@@ -10,7 +10,7 @@ describe('JobOptionsBuilder', () => {
|
|
|
10
10
|
it('powinien zwrócić standardowe opcje z domyślną konfiguracją', () => {
|
|
11
11
|
const config = new command_bus_config_1.default({
|
|
12
12
|
redisUrl: 'redis://localhost:6379',
|
|
13
|
-
maxAttempts:
|
|
13
|
+
maxAttempts: 1,
|
|
14
14
|
backoffDelay: 2000,
|
|
15
15
|
queueMode: 'fifo',
|
|
16
16
|
});
|
|
@@ -25,7 +25,7 @@ describe('JobOptionsBuilder', () => {
|
|
|
25
25
|
count: 500, // Memory optimization: więcej dla debugging
|
|
26
26
|
age: 3600, // Memory optimization: 1h
|
|
27
27
|
},
|
|
28
|
-
attempts:
|
|
28
|
+
attempts: 1,
|
|
29
29
|
backoff: {
|
|
30
30
|
type: 'exponential',
|
|
31
31
|
delay: 2000,
|
|
@@ -66,7 +66,7 @@ describe('JobOptionsBuilder', () => {
|
|
|
66
66
|
it('powinien zwrócić opcje RPC reply z domyślnym TTL', () => {
|
|
67
67
|
const config = new command_bus_config_1.default({
|
|
68
68
|
redisUrl: 'redis://localhost:6379',
|
|
69
|
-
maxAttempts:
|
|
69
|
+
maxAttempts: 1,
|
|
70
70
|
backoffDelay: 2000,
|
|
71
71
|
});
|
|
72
72
|
const builder = new job_options_builder_1.default(config);
|
|
@@ -80,7 +80,7 @@ describe('JobOptionsBuilder', () => {
|
|
|
80
80
|
age: 300, // Memory optimization: 5 minut
|
|
81
81
|
count: 50, // Memory optimization: mniej failed jobs
|
|
82
82
|
},
|
|
83
|
-
attempts:
|
|
83
|
+
attempts: 1,
|
|
84
84
|
backoff: {
|
|
85
85
|
type: 'exponential',
|
|
86
86
|
delay: 2000,
|
|
@@ -67,7 +67,7 @@ describe('JobProcessor', () => {
|
|
|
67
67
|
id: 'job-123',
|
|
68
68
|
data: command,
|
|
69
69
|
attemptsMade: 0,
|
|
70
|
-
opts: { attempts:
|
|
70
|
+
opts: { attempts: 1 },
|
|
71
71
|
};
|
|
72
72
|
// When
|
|
73
73
|
const result = yield jobProcessor.process(job, commandName);
|
|
@@ -128,7 +128,7 @@ describe('JobProcessor', () => {
|
|
|
128
128
|
id: 'job-123',
|
|
129
129
|
data: command,
|
|
130
130
|
attemptsMade: 1,
|
|
131
|
-
opts: { attempts:
|
|
131
|
+
opts: { attempts: 1 },
|
|
132
132
|
};
|
|
133
133
|
// When & Then
|
|
134
134
|
yield expect(jobProcessor.process(job, commandName)).rejects.toThrow('Handler error');
|
|
@@ -41,7 +41,7 @@ describe('WorkerOrchestrator', () => {
|
|
|
41
41
|
let mockLogger;
|
|
42
42
|
let mockWorker;
|
|
43
43
|
const concurrency = 5;
|
|
44
|
-
const maxAttempts =
|
|
44
|
+
const maxAttempts = 1;
|
|
45
45
|
// Storage dla concurrency każdego workera
|
|
46
46
|
const workerConcurrencyStorage = new Map();
|
|
47
47
|
beforeEach(() => {
|
|
@@ -163,7 +163,7 @@ describe('WorkerOrchestrator', () => {
|
|
|
163
163
|
const mockJob = {
|
|
164
164
|
id: 'job-123',
|
|
165
165
|
data: { __id: 'cmd-123' },
|
|
166
|
-
attemptsMade:
|
|
166
|
+
attemptsMade: 0,
|
|
167
167
|
opts: { attempts: maxAttempts },
|
|
168
168
|
};
|
|
169
169
|
const error = new Error('Job failed');
|
|
@@ -174,7 +174,7 @@ describe('WorkerOrchestrator', () => {
|
|
|
174
174
|
commandName,
|
|
175
175
|
jobId: 'job-123',
|
|
176
176
|
error: 'Job failed',
|
|
177
|
-
attempt:
|
|
177
|
+
attempt: 0,
|
|
178
178
|
maxAttempts,
|
|
179
179
|
isRetryable: true,
|
|
180
180
|
}));
|
|
@@ -673,7 +673,7 @@ describe('WorkerOrchestrator', () => {
|
|
|
673
673
|
id: 'job-123',
|
|
674
674
|
data: { __id: 'cmd-123' },
|
|
675
675
|
attemptsMade: 1,
|
|
676
|
-
opts: { attempts:
|
|
676
|
+
opts: { attempts: 1 },
|
|
677
677
|
};
|
|
678
678
|
const WorkerMetricsCollector = jest.requireMock('./worker-metrics-collector');
|
|
679
679
|
const collectorInstance = WorkerMetricsCollector.mock.results[0].value;
|
|
Binary file
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "pp-command-bus",
|
|
3
|
-
"version": "1.3.
|
|
3
|
+
"version": "1.3.1",
|
|
4
4
|
"description": "Distributed Command Bus library supporting RPC and job queuing with BullMQ for Redis/DragonflyDB",
|
|
5
5
|
"homepage": "https://gitlab.polskiepolisy.pl/lib/pp-command-bus",
|
|
6
6
|
"repository": {
|
|
Binary file
|