pp-command-bus 1.5.0 → 2.0.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 +400 -1219
- package/dist/command-bus/command-bus.spec.js +138 -359
- package/dist/command-bus/command-bus.spec.js.map +1 -1
- package/dist/command-bus/command.d.ts +3 -4
- package/dist/command-bus/command.js +3 -32
- package/dist/command-bus/command.js.map +1 -1
- package/dist/command-bus/config/command-bus-config.d.ts +80 -21
- package/dist/command-bus/config/command-bus-config.js +104 -58
- package/dist/command-bus/config/command-bus-config.js.map +1 -1
- package/dist/command-bus/config/command-bus-config.spec.js +174 -100
- package/dist/command-bus/config/command-bus-config.spec.js.map +1 -1
- package/dist/command-bus/index.d.ts +41 -50
- package/dist/command-bus/index.js +143 -127
- package/dist/command-bus/index.js.map +1 -1
- package/dist/command-bus/interceptors/index.d.ts +5 -0
- package/dist/command-bus/interceptors/index.js +22 -0
- package/dist/command-bus/interceptors/index.js.map +1 -0
- package/dist/command-bus/interceptors/interceptor.interface.d.ts +35 -0
- package/dist/command-bus/interceptors/interceptor.interface.js +3 -0
- package/dist/command-bus/interceptors/interceptor.interface.js.map +1 -0
- package/dist/command-bus/interceptors/performance-interceptor.d.ts +24 -0
- package/dist/command-bus/interceptors/performance-interceptor.js +86 -0
- package/dist/command-bus/interceptors/performance-interceptor.js.map +1 -0
- package/dist/command-bus/interceptors/performance-interceptor.spec.js +124 -0
- package/dist/command-bus/interceptors/performance-interceptor.spec.js.map +1 -0
- package/dist/command-bus/logging/command-logger.d.ts +2 -0
- package/dist/command-bus/logging/command-logger.js +7 -0
- package/dist/command-bus/logging/command-logger.js.map +1 -1
- package/dist/command-bus/logging/command-logger.spec.js +36 -0
- package/dist/command-bus/logging/command-logger.spec.js.map +1 -1
- package/dist/command-bus/serialization/index.d.ts +6 -0
- package/dist/command-bus/serialization/index.js +9 -0
- package/dist/command-bus/serialization/index.js.map +1 -0
- package/dist/command-bus/serialization/msgpack-serializer.d.ts +26 -0
- package/dist/command-bus/serialization/msgpack-serializer.js +70 -0
- package/dist/command-bus/serialization/msgpack-serializer.js.map +1 -0
- package/dist/command-bus/serialization/msgpack-serializer.spec.js +223 -0
- package/dist/command-bus/serialization/msgpack-serializer.spec.js.map +1 -0
- package/dist/command-bus/serialization/serializer.interface.d.ts +21 -0
- package/dist/command-bus/serialization/serializer.interface.js +3 -0
- package/dist/command-bus/serialization/serializer.interface.js.map +1 -0
- package/dist/command-bus/transport/consumer-loop.d.ts +45 -0
- package/dist/command-bus/transport/consumer-loop.js +90 -0
- package/dist/command-bus/transport/consumer-loop.js.map +1 -0
- package/dist/command-bus/transport/consumer-loop.spec.js +216 -0
- package/dist/command-bus/transport/consumer-loop.spec.js.map +1 -0
- package/dist/command-bus/transport/index.d.ts +21 -0
- package/dist/command-bus/transport/index.js +23 -0
- package/dist/command-bus/transport/index.js.map +1 -0
- package/dist/command-bus/transport/message-processor.d.ts +70 -0
- package/dist/command-bus/transport/message-processor.js +158 -0
- package/dist/command-bus/transport/message-processor.js.map +1 -0
- package/dist/command-bus/transport/message-processor.spec.js +185 -0
- package/dist/command-bus/transport/message-processor.spec.js.map +1 -0
- package/dist/command-bus/transport/pending-recovery.d.ts +54 -0
- package/dist/command-bus/transport/pending-recovery.js +139 -0
- package/dist/command-bus/transport/pending-recovery.js.map +1 -0
- package/dist/command-bus/transport/pending-recovery.spec.js +176 -0
- package/dist/command-bus/transport/pending-recovery.spec.js.map +1 -0
- package/dist/command-bus/transport/redis-codec.d.ts +24 -0
- package/dist/command-bus/transport/redis-codec.js +33 -0
- package/dist/command-bus/transport/redis-codec.js.map +1 -0
- package/dist/command-bus/transport/redis-codec.spec.js +53 -0
- package/dist/command-bus/transport/redis-codec.spec.js.map +1 -0
- package/dist/command-bus/transport/redis-streams-transport.d.ts +94 -0
- package/dist/command-bus/transport/redis-streams-transport.js +143 -0
- package/dist/command-bus/transport/redis-streams-transport.js.map +1 -0
- package/dist/command-bus/transport/redis-streams-transport.spec.js +420 -0
- package/dist/command-bus/transport/redis-streams-transport.spec.js.map +1 -0
- package/dist/command-bus/transport/rpc-handler.d.ts +39 -0
- package/dist/command-bus/transport/rpc-handler.js +87 -0
- package/dist/command-bus/transport/rpc-handler.js.map +1 -0
- package/dist/command-bus/transport/rpc-handler.spec.js +157 -0
- package/dist/command-bus/transport/rpc-handler.spec.js.map +1 -0
- package/dist/command-bus/transport/stream-consumer.d.ts +91 -0
- package/dist/command-bus/transport/stream-consumer.js +182 -0
- package/dist/command-bus/transport/stream-consumer.js.map +1 -0
- package/dist/command-bus/transport/stream-consumer.spec.js +284 -0
- package/dist/command-bus/transport/stream-consumer.spec.js.map +1 -0
- package/dist/command-bus/transport/stream-producer.d.ts +23 -0
- package/dist/command-bus/transport/stream-producer.js +70 -0
- package/dist/command-bus/transport/stream-producer.js.map +1 -0
- package/dist/command-bus/transport/stream-producer.spec.js +125 -0
- package/dist/command-bus/transport/stream-producer.spec.js.map +1 -0
- package/dist/command-bus/transport/transport.interface.d.ts +87 -0
- package/dist/command-bus/transport/transport.interface.js +3 -0
- package/dist/command-bus/transport/transport.interface.js.map +1 -0
- package/dist/command-bus/types/index.d.ts +0 -84
- package/dist/examples/rpc.demo.js +1 -1
- package/dist/examples/rpc.demo.js.map +1 -1
- package/dist/index.d.ts +8 -5
- package/dist/index.js +6 -4
- package/dist/index.js.map +1 -1
- package/dist/pp-command-bus-2.0.1.tgz +0 -0
- package/dist/shared/redis/connection-pool.d.ts +54 -0
- package/dist/shared/redis/connection-pool.js +123 -0
- package/dist/shared/redis/connection-pool.js.map +1 -0
- package/dist/shared/redis/connection-pool.spec.d.ts +1 -0
- package/dist/shared/redis/connection-pool.spec.js +114 -0
- package/dist/shared/redis/connection-pool.spec.js.map +1 -0
- package/dist/shared/redis/index.d.ts +5 -3
- package/dist/shared/redis/index.js +6 -4
- package/dist/shared/redis/index.js.map +1 -1
- package/dist/shared/redis/rpc-connection-pool.d.ts +61 -0
- package/dist/shared/redis/rpc-connection-pool.js +154 -0
- package/dist/shared/redis/rpc-connection-pool.js.map +1 -0
- package/dist/shared/redis/rpc-connection-pool.spec.d.ts +1 -0
- package/dist/shared/redis/rpc-connection-pool.spec.js +173 -0
- package/dist/shared/redis/rpc-connection-pool.spec.js.map +1 -0
- package/dist/shared/types.d.ts +0 -4
- package/dist/shared/utils/error-utils.d.ts +8 -0
- package/dist/shared/utils/error-utils.js +14 -0
- package/dist/shared/utils/error-utils.js.map +1 -0
- package/package.json +12 -12
- package/dist/command-bus/config/auto-config-optimizer.d.ts +0 -35
- package/dist/command-bus/config/auto-config-optimizer.js +0 -52
- package/dist/command-bus/config/auto-config-optimizer.js.map +0 -1
- package/dist/command-bus/config/auto-config-optimizer.spec.js +0 -42
- package/dist/command-bus/config/auto-config-optimizer.spec.js.map +0 -1
- package/dist/command-bus/job/index.d.ts +0 -6
- package/dist/command-bus/job/index.js +0 -15
- package/dist/command-bus/job/index.js.map +0 -1
- package/dist/command-bus/job/job-options-builder.d.ts +0 -21
- package/dist/command-bus/job/job-options-builder.js +0 -58
- package/dist/command-bus/job/job-options-builder.js.map +0 -1
- package/dist/command-bus/job/job-options-builder.spec.js +0 -156
- package/dist/command-bus/job/job-options-builder.spec.js.map +0 -1
- package/dist/command-bus/job/job-processor.d.ts +0 -39
- package/dist/command-bus/job/job-processor.js +0 -203
- package/dist/command-bus/job/job-processor.js.map +0 -1
- package/dist/command-bus/job/job-processor.spec.js +0 -436
- package/dist/command-bus/job/job-processor.spec.js.map +0 -1
- package/dist/command-bus/queue/index.d.ts +0 -5
- package/dist/command-bus/queue/index.js +0 -13
- package/dist/command-bus/queue/index.js.map +0 -1
- package/dist/command-bus/queue/queue-manager.d.ts +0 -56
- package/dist/command-bus/queue/queue-manager.js +0 -163
- package/dist/command-bus/queue/queue-manager.js.map +0 -1
- package/dist/command-bus/queue/queue-manager.spec.js +0 -371
- package/dist/command-bus/queue/queue-manager.spec.js.map +0 -1
- package/dist/command-bus/rpc/index.d.ts +0 -11
- package/dist/command-bus/rpc/index.js +0 -19
- package/dist/command-bus/rpc/index.js.map +0 -1
- package/dist/command-bus/rpc/payload-compression.service.d.ts +0 -50
- package/dist/command-bus/rpc/payload-compression.service.js +0 -215
- package/dist/command-bus/rpc/payload-compression.service.js.map +0 -1
- package/dist/command-bus/rpc/payload-compression.service.spec.js +0 -376
- package/dist/command-bus/rpc/payload-compression.service.spec.js.map +0 -1
- package/dist/command-bus/rpc/rpc-coordinator.d.ts +0 -96
- package/dist/command-bus/rpc/rpc-coordinator.js +0 -500
- package/dist/command-bus/rpc/rpc-coordinator.js.map +0 -1
- package/dist/command-bus/rpc/rpc-coordinator.spec.js +0 -621
- package/dist/command-bus/rpc/rpc-coordinator.spec.js.map +0 -1
- package/dist/command-bus/rpc/rpc-job-cancellation.service.d.ts +0 -82
- package/dist/command-bus/rpc/rpc-job-cancellation.service.js +0 -180
- package/dist/command-bus/rpc/rpc-job-cancellation.service.js.map +0 -1
- package/dist/command-bus/rpc/rpc-job-cancellation.service.spec.js +0 -286
- package/dist/command-bus/rpc/rpc-job-cancellation.service.spec.js.map +0 -1
- package/dist/command-bus/worker/index.d.ts +0 -10
- package/dist/command-bus/worker/index.js +0 -19
- package/dist/command-bus/worker/index.js.map +0 -1
- package/dist/command-bus/worker/worker-benchmark.d.ts +0 -71
- package/dist/command-bus/worker/worker-benchmark.js +0 -202
- package/dist/command-bus/worker/worker-benchmark.js.map +0 -1
- package/dist/command-bus/worker/worker-benchmark.spec.js +0 -310
- package/dist/command-bus/worker/worker-benchmark.spec.js.map +0 -1
- package/dist/command-bus/worker/worker-metrics-collector.d.ts +0 -98
- package/dist/command-bus/worker/worker-metrics-collector.js +0 -242
- package/dist/command-bus/worker/worker-metrics-collector.js.map +0 -1
- package/dist/command-bus/worker/worker-orchestrator.d.ts +0 -70
- package/dist/command-bus/worker/worker-orchestrator.js +0 -339
- package/dist/command-bus/worker/worker-orchestrator.js.map +0 -1
- package/dist/command-bus/worker/worker-orchestrator.spec.js +0 -712
- package/dist/command-bus/worker/worker-orchestrator.spec.js.map +0 -1
- package/dist/examples/auto-config.demo.d.ts +0 -9
- package/dist/examples/auto-config.demo.js +0 -106
- package/dist/examples/auto-config.demo.js.map +0 -1
- package/dist/examples/rpc-compression.demo.d.ts +0 -5
- package/dist/examples/rpc-compression.demo.js +0 -358
- package/dist/examples/rpc-compression.demo.js.map +0 -1
- package/dist/examples/rpc-resilience.demo.d.ts +0 -15
- package/dist/examples/rpc-resilience.demo.js +0 -233
- package/dist/examples/rpc-resilience.demo.js.map +0 -1
- package/dist/pp-command-bus-1.5.0.tgz +0 -0
- package/dist/shared/config/base-config.d.ts +0 -54
- package/dist/shared/config/base-config.js +0 -114
- package/dist/shared/config/base-config.js.map +0 -1
- package/dist/shared/config/base-config.spec.js +0 -204
- package/dist/shared/config/base-config.spec.js.map +0 -1
- package/dist/shared/config/index.d.ts +0 -1
- package/dist/shared/config/index.js +0 -9
- package/dist/shared/config/index.js.map +0 -1
- package/dist/shared/redis/redis-connection-factory.d.ts +0 -66
- package/dist/shared/redis/redis-connection-factory.js +0 -113
- package/dist/shared/redis/redis-connection-factory.js.map +0 -1
- /package/dist/command-bus/{config/auto-config-optimizer.spec.d.ts → interceptors/performance-interceptor.spec.d.ts} +0 -0
- /package/dist/command-bus/{job/job-options-builder.spec.d.ts → serialization/msgpack-serializer.spec.d.ts} +0 -0
- /package/dist/command-bus/{job/job-processor.spec.d.ts → transport/consumer-loop.spec.d.ts} +0 -0
- /package/dist/command-bus/{queue/queue-manager.spec.d.ts → transport/message-processor.spec.d.ts} +0 -0
- /package/dist/command-bus/{rpc/payload-compression.service.spec.d.ts → transport/pending-recovery.spec.d.ts} +0 -0
- /package/dist/command-bus/{rpc/rpc-coordinator.spec.d.ts → transport/redis-codec.spec.d.ts} +0 -0
- /package/dist/command-bus/{rpc/rpc-job-cancellation.service.spec.d.ts → transport/redis-streams-transport.spec.d.ts} +0 -0
- /package/dist/command-bus/{worker/worker-benchmark.spec.d.ts → transport/rpc-handler.spec.d.ts} +0 -0
- /package/dist/command-bus/{worker/worker-orchestrator.spec.d.ts → transport/stream-consumer.spec.d.ts} +0 -0
- /package/dist/{shared/config/base-config.spec.d.ts → command-bus/transport/stream-producer.spec.d.ts} +0 -0
|
@@ -1,233 +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
|
-
var _a, _b, _c;
|
|
15
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
16
|
-
exports.ResilienceTestCommand = void 0;
|
|
17
|
-
exports.runResilienceDemo = runResilienceDemo;
|
|
18
|
-
const command_1 = __importDefault(require("../command-bus/command"));
|
|
19
|
-
const command_bus_1 = __importDefault(require("../command-bus"));
|
|
20
|
-
const command_bus_config_1 = __importDefault(require("../command-bus/config/command-bus-config"));
|
|
21
|
-
/**
|
|
22
|
-
* Demo RPC Resilience - test mechanizmów reconnect i failover
|
|
23
|
-
*
|
|
24
|
-
* Wysyła request co 1 sekundę przez 5 minut, zbiera metryki sukcesu/błędów.
|
|
25
|
-
* Użyj do testowania zachowania systemu podczas restartu Redis.
|
|
26
|
-
*
|
|
27
|
-
* Scenariusze testowe:
|
|
28
|
-
* 1. Normalny przepływ - uruchom i obserwuj stabilną pracę
|
|
29
|
-
* 2. Restart Redis: docker restart redis
|
|
30
|
-
* 3. Stop/Start Redis: docker stop redis, poczekaj 30s, docker start redis
|
|
31
|
-
*
|
|
32
|
-
* Opcje ENV:
|
|
33
|
-
* - DURATION: czas testu w sekundach (domyślnie 300 = 5 minut)
|
|
34
|
-
* - INTERVAL: interwał między requestami w ms (domyślnie 1000)
|
|
35
|
-
* - TIMEOUT: timeout per request w ms (domyślnie 5000)
|
|
36
|
-
*/
|
|
37
|
-
// ========== KONFIGURACJA ==========
|
|
38
|
-
const TEST_DURATION_S = parseInt((_a = process.env.DURATION) !== null && _a !== void 0 ? _a : '300', 10);
|
|
39
|
-
const REQUEST_INTERVAL_MS = parseInt((_b = process.env.INTERVAL) !== null && _b !== void 0 ? _b : '1000', 10);
|
|
40
|
-
const REQUEST_TIMEOUT_MS = parseInt((_c = process.env.TIMEOUT) !== null && _c !== void 0 ? _c : '5000', 10);
|
|
41
|
-
// ========== KOMENDA TESTOWA ==========
|
|
42
|
-
/**
|
|
43
|
-
* Komenda do testowania resilience RPC
|
|
44
|
-
*/
|
|
45
|
-
class ResilienceTestCommand extends command_1.default {
|
|
46
|
-
constructor(payload) {
|
|
47
|
-
super(payload);
|
|
48
|
-
}
|
|
49
|
-
}
|
|
50
|
-
exports.ResilienceTestCommand = ResilienceTestCommand;
|
|
51
|
-
// ========== FUNKCJE POMOCNICZE ==========
|
|
52
|
-
/**
|
|
53
|
-
* Funkcja sleep - opóźnienie asynchroniczne
|
|
54
|
-
*/
|
|
55
|
-
function sleep(ms) {
|
|
56
|
-
return new Promise((resolve) => setTimeout(resolve, ms));
|
|
57
|
-
}
|
|
58
|
-
/**
|
|
59
|
-
* Oblicza statystyki latency
|
|
60
|
-
*/
|
|
61
|
-
function calculateLatencyStats(latencies) {
|
|
62
|
-
if (latencies.length === 0) {
|
|
63
|
-
return { avg: 0, min: 0, max: 0 };
|
|
64
|
-
}
|
|
65
|
-
const sum = latencies.reduce((a, b) => a + b, 0);
|
|
66
|
-
return {
|
|
67
|
-
avg: Math.round(sum / latencies.length),
|
|
68
|
-
min: Math.min(...latencies),
|
|
69
|
-
max: Math.max(...latencies),
|
|
70
|
-
};
|
|
71
|
-
}
|
|
72
|
-
/**
|
|
73
|
-
* Formatuje czas w sekundach do formatu mm:ss
|
|
74
|
-
*/
|
|
75
|
-
function formatTime(seconds) {
|
|
76
|
-
const mins = Math.floor(seconds / 60);
|
|
77
|
-
const secs = seconds % 60;
|
|
78
|
-
return `${mins.toString().padStart(2, '0')}:${secs.toString().padStart(2, '0')}`;
|
|
79
|
-
}
|
|
80
|
-
/**
|
|
81
|
-
* Wyświetla status testu
|
|
82
|
-
*/
|
|
83
|
-
function printStatus(metrics, elapsedSeconds, totalSeconds) {
|
|
84
|
-
const latencyStats = calculateLatencyStats(metrics.latencies);
|
|
85
|
-
const successRate = metrics.sent > 0 ? ((metrics.success / metrics.sent) * 100).toFixed(1) : '0.0';
|
|
86
|
-
console.clear();
|
|
87
|
-
console.log(`
|
|
88
|
-
╔═══════════════════════════════════════════════════════════════╗
|
|
89
|
-
║ RPC RESILIENCE TEST ║
|
|
90
|
-
╠═══════════════════════════════════════════════════════════════╣
|
|
91
|
-
║ Czas: ${formatTime(elapsedSeconds)} / ${formatTime(totalSeconds)} ║
|
|
92
|
-
║ Postęp: ${Math.round((elapsedSeconds / totalSeconds) * 100)}% ║
|
|
93
|
-
╠═══════════════════════════════════════════════════════════════╣
|
|
94
|
-
║ Wysłane: ${metrics.sent.toString().padStart(5)} ║
|
|
95
|
-
║ Sukces: ${metrics.success.toString().padStart(5)} (${successRate.padStart(5)}%) ║
|
|
96
|
-
║ Błędy: ${metrics.failed.toString().padStart(5)} ║
|
|
97
|
-
║ Timeout: ${metrics.timeouts.toString().padStart(5)} ║
|
|
98
|
-
╠═══════════════════════════════════════════════════════════════╣
|
|
99
|
-
║ Latency: avg=${latencyStats.avg.toString().padStart(4)}ms min=${latencyStats.min.toString().padStart(4)}ms max=${latencyStats.max.toString().padStart(4)}ms ║
|
|
100
|
-
╚═══════════════════════════════════════════════════════════════╝
|
|
101
|
-
${metrics.lastError ? `\nOstatni błąd: ${metrics.lastError}` : ''}
|
|
102
|
-
`);
|
|
103
|
-
}
|
|
104
|
-
// ========== GŁÓWNA FUNKCJA DEMO ==========
|
|
105
|
-
function runResilienceDemo() {
|
|
106
|
-
return __awaiter(this, void 0, void 0, function* () {
|
|
107
|
-
var _a;
|
|
108
|
-
const redisUrl = (_a = process.env.REDIS_URL) !== null && _a !== void 0 ? _a : 'redis://localhost:6379';
|
|
109
|
-
console.log('RPC Resilience Demo - inicjalizacja...\n');
|
|
110
|
-
console.log(`Konfiguracja:`);
|
|
111
|
-
console.log(` - Czas testu: ${TEST_DURATION_S}s (${formatTime(TEST_DURATION_S)})`);
|
|
112
|
-
console.log(` - Interwał: ${REQUEST_INTERVAL_MS}ms`);
|
|
113
|
-
console.log(` - Timeout: ${REQUEST_TIMEOUT_MS}ms`);
|
|
114
|
-
console.log(` - Redis: ${redisUrl}\n`);
|
|
115
|
-
// Inicjalizacja CommandBus
|
|
116
|
-
const commandBusConfig = new command_bus_config_1.default({
|
|
117
|
-
redisUrl,
|
|
118
|
-
logger: console,
|
|
119
|
-
});
|
|
120
|
-
const commandBus = new command_bus_1.default(commandBusConfig);
|
|
121
|
-
// Metryki testu
|
|
122
|
-
const metrics = {
|
|
123
|
-
sent: 0,
|
|
124
|
-
success: 0,
|
|
125
|
-
failed: 0,
|
|
126
|
-
timeouts: 0,
|
|
127
|
-
latencies: [],
|
|
128
|
-
};
|
|
129
|
-
// Flaga do graceful shutdown
|
|
130
|
-
let isRunning = true;
|
|
131
|
-
// Handler dla Ctrl+C
|
|
132
|
-
process.on('SIGINT', () => {
|
|
133
|
-
console.log('\n\nOtrzymano SIGINT - zamykanie...');
|
|
134
|
-
isRunning = false;
|
|
135
|
-
});
|
|
136
|
-
process.on('SIGTERM', () => {
|
|
137
|
-
console.log('\n\nOtrzymano SIGTERM - zamykanie...');
|
|
138
|
-
isRunning = false;
|
|
139
|
-
});
|
|
140
|
-
// ========== REJESTRACJA HANDLERA ==========
|
|
141
|
-
yield commandBus.handle(ResilienceTestCommand, (command) => {
|
|
142
|
-
return {
|
|
143
|
-
sequenceNumber: command.__payload.sequenceNumber,
|
|
144
|
-
processedAt: Date.now(),
|
|
145
|
-
};
|
|
146
|
-
});
|
|
147
|
-
console.log('Handler zarejestrowany\n');
|
|
148
|
-
console.log('Start testu za 3 sekundy...\n');
|
|
149
|
-
yield sleep(3000);
|
|
150
|
-
// ========== PĘTLA TESTOWA ==========
|
|
151
|
-
const startTime = Date.now();
|
|
152
|
-
const testDurationMs = TEST_DURATION_S * 1000;
|
|
153
|
-
let sequenceNumber = 0;
|
|
154
|
-
let lastStatusUpdate = 0;
|
|
155
|
-
while (isRunning && Date.now() - startTime < testDurationMs) {
|
|
156
|
-
sequenceNumber++;
|
|
157
|
-
metrics.sent++;
|
|
158
|
-
const requestStartTime = Date.now();
|
|
159
|
-
try {
|
|
160
|
-
const response = yield commandBus.call(new ResilienceTestCommand({ sequenceNumber, timestamp: requestStartTime }), REQUEST_TIMEOUT_MS);
|
|
161
|
-
const latency = Date.now() - requestStartTime;
|
|
162
|
-
metrics.success++;
|
|
163
|
-
metrics.latencies.push(latency);
|
|
164
|
-
// Utrzymuj tylko ostatnie 1000 pomiarów latency
|
|
165
|
-
if (metrics.latencies.length > 1000) {
|
|
166
|
-
metrics.latencies.shift();
|
|
167
|
-
}
|
|
168
|
-
// Sprawdź sekwencję odpowiedzi
|
|
169
|
-
if (response.sequenceNumber !== sequenceNumber) {
|
|
170
|
-
console.warn(`Niezgodność sekwencji: wysłano ${sequenceNumber}, otrzymano ${response.sequenceNumber}`);
|
|
171
|
-
}
|
|
172
|
-
}
|
|
173
|
-
catch (error) {
|
|
174
|
-
const errorMessage = error instanceof Error ? error.message : String(error);
|
|
175
|
-
if (errorMessage.includes('timeout')) {
|
|
176
|
-
metrics.timeouts++;
|
|
177
|
-
metrics.lastError = `Timeout (seq: ${sequenceNumber})`;
|
|
178
|
-
}
|
|
179
|
-
else {
|
|
180
|
-
metrics.failed++;
|
|
181
|
-
metrics.lastError = `${errorMessage} (seq: ${sequenceNumber})`;
|
|
182
|
-
}
|
|
183
|
-
}
|
|
184
|
-
// Aktualizuj status co sekundę
|
|
185
|
-
const elapsedSeconds = Math.floor((Date.now() - startTime) / 1000);
|
|
186
|
-
if (elapsedSeconds !== lastStatusUpdate) {
|
|
187
|
-
lastStatusUpdate = elapsedSeconds;
|
|
188
|
-
printStatus(metrics, elapsedSeconds, TEST_DURATION_S);
|
|
189
|
-
}
|
|
190
|
-
// Czekaj do następnego interwału
|
|
191
|
-
const elapsed = Date.now() - requestStartTime;
|
|
192
|
-
const waitTime = Math.max(0, REQUEST_INTERVAL_MS - elapsed);
|
|
193
|
-
if (waitTime > 0 && isRunning) {
|
|
194
|
-
yield sleep(waitTime);
|
|
195
|
-
}
|
|
196
|
-
}
|
|
197
|
-
// ========== PODSUMOWANIE ==========
|
|
198
|
-
console.log('\n');
|
|
199
|
-
console.log('═══════════════════════════════════════════════════════════════');
|
|
200
|
-
console.log(' PODSUMOWANIE TESTU ');
|
|
201
|
-
console.log('═══════════════════════════════════════════════════════════════');
|
|
202
|
-
const latencyStats = calculateLatencyStats(metrics.latencies);
|
|
203
|
-
const totalDurationS = Math.round((Date.now() - startTime) / 1000);
|
|
204
|
-
const successRate = metrics.sent > 0 ? ((metrics.success / metrics.sent) * 100).toFixed(2) : '0.00';
|
|
205
|
-
console.log(`
|
|
206
|
-
Czas trwania: ${formatTime(totalDurationS)}
|
|
207
|
-
Wysłane requesty: ${metrics.sent}
|
|
208
|
-
Sukces: ${metrics.success} (${successRate}%)
|
|
209
|
-
Błędy: ${metrics.failed}
|
|
210
|
-
Timeout: ${metrics.timeouts}
|
|
211
|
-
|
|
212
|
-
Latency:
|
|
213
|
-
- Średnia: ${latencyStats.avg}ms
|
|
214
|
-
- Minimum: ${latencyStats.min}ms
|
|
215
|
-
- Maksimum: ${latencyStats.max}ms
|
|
216
|
-
|
|
217
|
-
${metrics.lastError ? `Ostatni błąd: ${metrics.lastError}` : 'Brak błędów!'}
|
|
218
|
-
`);
|
|
219
|
-
// ========== ZAMKNIĘCIE ==========
|
|
220
|
-
console.log('Zamykanie połączeń...');
|
|
221
|
-
yield commandBus.close();
|
|
222
|
-
console.log('Demo zakończone.\n');
|
|
223
|
-
process.exit(metrics.failed + metrics.timeouts > 0 ? 1 : 0);
|
|
224
|
-
});
|
|
225
|
-
}
|
|
226
|
-
// ========== URUCHOMIENIE ==========
|
|
227
|
-
if (require.main === module) {
|
|
228
|
-
runResilienceDemo().catch((error) => {
|
|
229
|
-
console.error('Fatal error:', error);
|
|
230
|
-
process.exit(1);
|
|
231
|
-
});
|
|
232
|
-
}
|
|
233
|
-
//# sourceMappingURL=rpc-resilience.demo.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"rpc-resilience.demo.js","sourceRoot":"","sources":["../../src/examples/rpc-resilience.demo.ts"],"names":[],"mappings":"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"}
|
|
Binary file
|
|
@@ -1,54 +0,0 @@
|
|
|
1
|
-
import type { ConnectionOptions } from 'bullmq';
|
|
2
|
-
import type { ILogger } from '../types';
|
|
3
|
-
import type { LogLevelType } from '../logging/log-level';
|
|
4
|
-
/**
|
|
5
|
-
* Bazowa klasa konfiguracji dla EventBus i CommandBus
|
|
6
|
-
*/
|
|
7
|
-
export default class BaseConfig {
|
|
8
|
-
/**
|
|
9
|
-
* URL połączenia do DragonflyDB/Redis
|
|
10
|
-
*/
|
|
11
|
-
redisUrl: string;
|
|
12
|
-
/**
|
|
13
|
-
* Poziom logowania (debug, log, warn, error)
|
|
14
|
-
* Domyślnie 'log' - loguje log, warn, error (bez debug)
|
|
15
|
-
*/
|
|
16
|
-
logLevel: LogLevelType;
|
|
17
|
-
/**
|
|
18
|
-
* Logger do użycia (domyślnie wbudowany Logger z console)
|
|
19
|
-
*/
|
|
20
|
-
logger: ILogger;
|
|
21
|
-
/**
|
|
22
|
-
* Opóźnienie między próbami reconnect do Redis w milisekundach
|
|
23
|
-
* Domyślnie 5000ms (5 sekund)
|
|
24
|
-
*/
|
|
25
|
-
redisRetryDelay: number;
|
|
26
|
-
/**
|
|
27
|
-
* Maksymalna liczba prób reconnect do Redis
|
|
28
|
-
* 0 = nieskończoność (domyślnie)
|
|
29
|
-
*/
|
|
30
|
-
redisMaxRetries: number;
|
|
31
|
-
constructor(params?: Partial<BaseConfig>);
|
|
32
|
-
/**
|
|
33
|
-
* Zwraca opcje połączenia Redis na podstawie URL
|
|
34
|
-
* Zawiera retryStrategy z konfiguracją reconnect
|
|
35
|
-
*/
|
|
36
|
-
getRedisOptions(): ConnectionOptions;
|
|
37
|
-
/**
|
|
38
|
-
* Zwraca opcje połączenia Redis dla Worker'ów BullMQ
|
|
39
|
-
* Worker'y wymagają maxRetriesPerRequest: null dla poprawnego działania blocking operations
|
|
40
|
-
*/
|
|
41
|
-
getRedisOptionsForWorker(): ConnectionOptions;
|
|
42
|
-
/**
|
|
43
|
-
* Waliduje konfigurację
|
|
44
|
-
*/
|
|
45
|
-
protected validate(): void;
|
|
46
|
-
/**
|
|
47
|
-
* Parsuje string na liczbę z wartością domyślną
|
|
48
|
-
*/
|
|
49
|
-
protected parseIntWithDefault(value: string | undefined, defaultValue: number): number;
|
|
50
|
-
/**
|
|
51
|
-
* Parsuje string na boolean z wartością domyślną
|
|
52
|
-
*/
|
|
53
|
-
protected parseBoolWithDefault(value: string | undefined, defaultValue: boolean): boolean;
|
|
54
|
-
}
|
|
@@ -1,114 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
const logger_1 = require("../logging/logger");
|
|
4
|
-
/**
|
|
5
|
-
* Bazowa klasa konfiguracji dla EventBus i CommandBus
|
|
6
|
-
*/
|
|
7
|
-
class BaseConfig {
|
|
8
|
-
constructor(params) {
|
|
9
|
-
var _a, _b;
|
|
10
|
-
/**
|
|
11
|
-
* URL połączenia do DragonflyDB/Redis
|
|
12
|
-
*/
|
|
13
|
-
this.redisUrl = (_a = process.env.REDIS_URL) !== null && _a !== void 0 ? _a : 'redis://localhost:6379';
|
|
14
|
-
// Ustaw logLevel przed utworzeniem loggera
|
|
15
|
-
const initialLogLevel = (_b = process.env.LOG_LEVEL) !== null && _b !== void 0 ? _b : 'log';
|
|
16
|
-
this.logLevel = initialLogLevel;
|
|
17
|
-
// Utwórz logger z odpowiednim poziomem
|
|
18
|
-
this.logger = new logger_1.Logger(console, this.logLevel);
|
|
19
|
-
// Ustaw opcje reconnect Redis
|
|
20
|
-
this.redisRetryDelay = this.parseIntWithDefault(process.env.REDIS_RETRY_DELAY, 5000);
|
|
21
|
-
this.redisMaxRetries = this.parseIntWithDefault(process.env.REDIS_MAX_RETRIES, 0);
|
|
22
|
-
if (params) {
|
|
23
|
-
// Zapamię tај logLevel przed merge params
|
|
24
|
-
const originalLogLevel = this.logLevel;
|
|
25
|
-
Object.keys(params).forEach((key) => {
|
|
26
|
-
this[key] = params[key];
|
|
27
|
-
});
|
|
28
|
-
// Jeśli logLevel został nadpisany, utwórz nowy logger
|
|
29
|
-
// Porównujemy z oryginalnym logLevel (przed merge)
|
|
30
|
-
if (params.logLevel && params.logLevel !== originalLogLevel) {
|
|
31
|
-
this.logger = new logger_1.Logger(console, params.logLevel);
|
|
32
|
-
}
|
|
33
|
-
}
|
|
34
|
-
// Walidacja konfiguracji
|
|
35
|
-
this.validate();
|
|
36
|
-
}
|
|
37
|
-
/**
|
|
38
|
-
* Zwraca opcje połączenia Redis na podstawie URL
|
|
39
|
-
* Zawiera retryStrategy z konfiguracją reconnect
|
|
40
|
-
*/
|
|
41
|
-
getRedisOptions() {
|
|
42
|
-
try {
|
|
43
|
-
const url = new URL(this.redisUrl);
|
|
44
|
-
// Przechwytujemy wartości dla closure w retryStrategy
|
|
45
|
-
const retryDelay = this.redisRetryDelay;
|
|
46
|
-
const maxRetries = this.redisMaxRetries;
|
|
47
|
-
const options = {
|
|
48
|
-
host: url.hostname,
|
|
49
|
-
port: parseInt(url.port, 10) || 6379,
|
|
50
|
-
retryStrategy: (times) => {
|
|
51
|
-
// Max retries (0 = nieskończoność)
|
|
52
|
-
if (maxRetries > 0 && times > maxRetries) {
|
|
53
|
-
return null; // Stop reconnecting
|
|
54
|
-
}
|
|
55
|
-
return retryDelay;
|
|
56
|
-
},
|
|
57
|
-
};
|
|
58
|
-
if (url.username) {
|
|
59
|
-
options.username = url.username;
|
|
60
|
-
}
|
|
61
|
-
if (url.password) {
|
|
62
|
-
options.password = url.password;
|
|
63
|
-
}
|
|
64
|
-
if (url.pathname && url.pathname.length > 1) {
|
|
65
|
-
const db = parseInt(url.pathname.substring(1), 10);
|
|
66
|
-
if (!isNaN(db)) {
|
|
67
|
-
options.db = db;
|
|
68
|
-
}
|
|
69
|
-
}
|
|
70
|
-
return options;
|
|
71
|
-
}
|
|
72
|
-
catch (_a) {
|
|
73
|
-
throw new Error('Invalid Redis URL');
|
|
74
|
-
}
|
|
75
|
-
}
|
|
76
|
-
/**
|
|
77
|
-
* Zwraca opcje połączenia Redis dla Worker'ów BullMQ
|
|
78
|
-
* Worker'y wymagają maxRetriesPerRequest: null dla poprawnego działania blocking operations
|
|
79
|
-
*/
|
|
80
|
-
getRedisOptionsForWorker() {
|
|
81
|
-
const options = this.getRedisOptions();
|
|
82
|
-
return Object.assign(Object.assign({}, options), { maxRetriesPerRequest: null });
|
|
83
|
-
}
|
|
84
|
-
/**
|
|
85
|
-
* Waliduje konfigurację
|
|
86
|
-
*/
|
|
87
|
-
validate() {
|
|
88
|
-
try {
|
|
89
|
-
new URL(this.redisUrl);
|
|
90
|
-
}
|
|
91
|
-
catch (_a) {
|
|
92
|
-
throw new Error('Invalid Redis URL');
|
|
93
|
-
}
|
|
94
|
-
}
|
|
95
|
-
/**
|
|
96
|
-
* Parsuje string na liczbę z wartością domyślną
|
|
97
|
-
*/
|
|
98
|
-
parseIntWithDefault(value, defaultValue) {
|
|
99
|
-
if (!value)
|
|
100
|
-
return defaultValue;
|
|
101
|
-
const parsed = parseInt(value, 10);
|
|
102
|
-
return isNaN(parsed) ? defaultValue : parsed;
|
|
103
|
-
}
|
|
104
|
-
/**
|
|
105
|
-
* Parsuje string na boolean z wartością domyślną
|
|
106
|
-
*/
|
|
107
|
-
parseBoolWithDefault(value, defaultValue) {
|
|
108
|
-
if (!value)
|
|
109
|
-
return defaultValue;
|
|
110
|
-
return value.toLowerCase() === 'true' || value === '1';
|
|
111
|
-
}
|
|
112
|
-
}
|
|
113
|
-
exports.default = BaseConfig;
|
|
114
|
-
//# sourceMappingURL=base-config.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"base-config.js","sourceRoot":"","sources":["../../../src/shared/config/base-config.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,204 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
-
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
-
};
|
|
5
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
-
const base_config_1 = __importDefault(require("./base-config"));
|
|
7
|
-
const logger_1 = require("../logging/logger");
|
|
8
|
-
describe('BaseConfig', () => {
|
|
9
|
-
const originalEnv = process.env;
|
|
10
|
-
beforeEach(() => {
|
|
11
|
-
// Reset zmiennych środowiskowych
|
|
12
|
-
process.env = Object.assign({}, originalEnv);
|
|
13
|
-
});
|
|
14
|
-
afterEach(() => {
|
|
15
|
-
process.env = originalEnv;
|
|
16
|
-
});
|
|
17
|
-
describe('konstruktor', () => {
|
|
18
|
-
it('powinno używać domyślnych wartości', () => {
|
|
19
|
-
// When
|
|
20
|
-
const config = new base_config_1.default();
|
|
21
|
-
// Then
|
|
22
|
-
expect(config.redisUrl).toBe('redis://localhost:6379');
|
|
23
|
-
expect(config.logger).toBeInstanceOf(logger_1.Logger);
|
|
24
|
-
expect(config.logLevel).toBe('log');
|
|
25
|
-
expect(config.redisRetryDelay).toBe(5000);
|
|
26
|
-
expect(config.redisMaxRetries).toBe(0);
|
|
27
|
-
});
|
|
28
|
-
it('powinno wczytać konfigurację ze zmiennych środowiskowych', () => {
|
|
29
|
-
// Given
|
|
30
|
-
process.env.REDIS_URL = 'redis://dragonfly:6380';
|
|
31
|
-
// When
|
|
32
|
-
const config = new base_config_1.default();
|
|
33
|
-
// Then
|
|
34
|
-
expect(config.redisUrl).toBe('redis://dragonfly:6380');
|
|
35
|
-
});
|
|
36
|
-
it('powinno nadpisać wartości przez parametry konstruktora', () => {
|
|
37
|
-
// Given
|
|
38
|
-
const customLogger = {
|
|
39
|
-
log: jest.fn(),
|
|
40
|
-
error: jest.fn(),
|
|
41
|
-
warn: jest.fn(),
|
|
42
|
-
debug: jest.fn(),
|
|
43
|
-
};
|
|
44
|
-
// When
|
|
45
|
-
const config = new base_config_1.default({
|
|
46
|
-
redisUrl: 'redis://custom:6379',
|
|
47
|
-
logger: customLogger,
|
|
48
|
-
});
|
|
49
|
-
// Then
|
|
50
|
-
expect(config.redisUrl).toBe('redis://custom:6379');
|
|
51
|
-
expect(config.logger).toBe(customLogger);
|
|
52
|
-
});
|
|
53
|
-
});
|
|
54
|
-
describe('getRedisOptions', () => {
|
|
55
|
-
it('powinno zwrócić opcje połączenia Redis z URL', () => {
|
|
56
|
-
// Given
|
|
57
|
-
const config = new base_config_1.default({
|
|
58
|
-
redisUrl: 'redis://user:pass@dragonfly.example.com:6380/0',
|
|
59
|
-
});
|
|
60
|
-
// When
|
|
61
|
-
const options = config.getRedisOptions();
|
|
62
|
-
// Then
|
|
63
|
-
expect(options.host).toBe('dragonfly.example.com');
|
|
64
|
-
expect(options.port).toBe(6380);
|
|
65
|
-
expect(options.username).toBe('user');
|
|
66
|
-
expect(options.password).toBe('pass');
|
|
67
|
-
expect(options.db).toBe(0);
|
|
68
|
-
expect(options.retryStrategy).toBeInstanceOf(Function);
|
|
69
|
-
});
|
|
70
|
-
it('powinno obsłużyć URL bez autoryzacji', () => {
|
|
71
|
-
// Given
|
|
72
|
-
const config = new base_config_1.default({
|
|
73
|
-
redisUrl: 'redis://localhost:6379',
|
|
74
|
-
});
|
|
75
|
-
// When
|
|
76
|
-
const options = config.getRedisOptions();
|
|
77
|
-
// Then
|
|
78
|
-
expect(options.host).toBe('localhost');
|
|
79
|
-
expect(options.port).toBe(6379);
|
|
80
|
-
expect(options.username).toBeUndefined();
|
|
81
|
-
expect(options.password).toBeUndefined();
|
|
82
|
-
expect(options.retryStrategy).toBeInstanceOf(Function);
|
|
83
|
-
});
|
|
84
|
-
it('powinno obsłużyć URL z bazą danych ale bez autoryzacji', () => {
|
|
85
|
-
// Given
|
|
86
|
-
const config = new base_config_1.default({
|
|
87
|
-
redisUrl: 'redis://localhost:6379/2',
|
|
88
|
-
});
|
|
89
|
-
// When
|
|
90
|
-
const options = config.getRedisOptions();
|
|
91
|
-
// Then
|
|
92
|
-
expect(options.host).toBe('localhost');
|
|
93
|
-
expect(options.port).toBe(6379);
|
|
94
|
-
expect(options.db).toBe(2);
|
|
95
|
-
expect(options.retryStrategy).toBeInstanceOf(Function);
|
|
96
|
-
});
|
|
97
|
-
it('powinno obsłużyć nieprawidłowy URL podczas tworzenia konfiguracji', () => {
|
|
98
|
-
// When & Then
|
|
99
|
-
expect(() => new base_config_1.default({
|
|
100
|
-
redisUrl: 'invalid-url',
|
|
101
|
-
})).toThrow('Invalid Redis URL');
|
|
102
|
-
});
|
|
103
|
-
});
|
|
104
|
-
describe('retryStrategy', () => {
|
|
105
|
-
it('powinno używać domyślnego opóźnienia 5000ms', () => {
|
|
106
|
-
// Given
|
|
107
|
-
const config = new base_config_1.default();
|
|
108
|
-
const options = config.getRedisOptions();
|
|
109
|
-
const retryStrategy = options.retryStrategy;
|
|
110
|
-
// When
|
|
111
|
-
const delay = retryStrategy(1);
|
|
112
|
-
// Then
|
|
113
|
-
expect(delay).toBe(5000);
|
|
114
|
-
});
|
|
115
|
-
it('powinno używać konfigurowalnego opóźnienia z env', () => {
|
|
116
|
-
// Given
|
|
117
|
-
process.env.REDIS_RETRY_DELAY = '10000';
|
|
118
|
-
const config = new base_config_1.default();
|
|
119
|
-
const options = config.getRedisOptions();
|
|
120
|
-
const retryStrategy = options.retryStrategy;
|
|
121
|
-
// When
|
|
122
|
-
const delay = retryStrategy(1);
|
|
123
|
-
// Then
|
|
124
|
-
expect(delay).toBe(10000);
|
|
125
|
-
});
|
|
126
|
-
it('powinno używać konfigurowalnego opóźnienia z parametrów', () => {
|
|
127
|
-
// Given
|
|
128
|
-
const config = new base_config_1.default({
|
|
129
|
-
redisRetryDelay: 3000,
|
|
130
|
-
});
|
|
131
|
-
const options = config.getRedisOptions();
|
|
132
|
-
const retryStrategy = options.retryStrategy;
|
|
133
|
-
// When
|
|
134
|
-
const delay = retryStrategy(1);
|
|
135
|
-
// Then
|
|
136
|
-
expect(delay).toBe(3000);
|
|
137
|
-
});
|
|
138
|
-
it('powinno zwracać stałe opóźnienie niezależnie od liczby prób', () => {
|
|
139
|
-
// Given
|
|
140
|
-
const config = new base_config_1.default({
|
|
141
|
-
redisRetryDelay: 5000,
|
|
142
|
-
});
|
|
143
|
-
const options = config.getRedisOptions();
|
|
144
|
-
const retryStrategy = options.retryStrategy;
|
|
145
|
-
// When & Then - stałe 5000ms dla wszystkich prób
|
|
146
|
-
expect(retryStrategy(1)).toBe(5000);
|
|
147
|
-
expect(retryStrategy(5)).toBe(5000);
|
|
148
|
-
expect(retryStrategy(10)).toBe(5000);
|
|
149
|
-
expect(retryStrategy(100)).toBe(5000);
|
|
150
|
-
});
|
|
151
|
-
it('powinno zatrzymać reconnect po przekroczeniu max retries', () => {
|
|
152
|
-
// Given
|
|
153
|
-
const config = new base_config_1.default({
|
|
154
|
-
redisRetryDelay: 5000,
|
|
155
|
-
redisMaxRetries: 3,
|
|
156
|
-
});
|
|
157
|
-
const options = config.getRedisOptions();
|
|
158
|
-
const retryStrategy = options.retryStrategy;
|
|
159
|
-
// When & Then
|
|
160
|
-
expect(retryStrategy(1)).toBe(5000);
|
|
161
|
-
expect(retryStrategy(2)).toBe(5000);
|
|
162
|
-
expect(retryStrategy(3)).toBe(5000);
|
|
163
|
-
expect(retryStrategy(4)).toBeNull(); // Przekroczono max
|
|
164
|
-
});
|
|
165
|
-
it('powinno używać konfigurowalnego max retries z env', () => {
|
|
166
|
-
// Given
|
|
167
|
-
process.env.REDIS_MAX_RETRIES = '5';
|
|
168
|
-
const config = new base_config_1.default();
|
|
169
|
-
const options = config.getRedisOptions();
|
|
170
|
-
const retryStrategy = options.retryStrategy;
|
|
171
|
-
// When & Then
|
|
172
|
-
expect(retryStrategy(5)).toBe(5000);
|
|
173
|
-
expect(retryStrategy(6)).toBeNull(); // Przekroczono max
|
|
174
|
-
});
|
|
175
|
-
it('powinno kontynuować reconnect w nieskończoność gdy max retries = 0', () => {
|
|
176
|
-
// Given
|
|
177
|
-
const config = new base_config_1.default({
|
|
178
|
-
redisRetryDelay: 5000,
|
|
179
|
-
redisMaxRetries: 0, // 0 = nieskończoność
|
|
180
|
-
});
|
|
181
|
-
const options = config.getRedisOptions();
|
|
182
|
-
const retryStrategy = options.retryStrategy;
|
|
183
|
-
// When & Then - nigdy nie zwraca null
|
|
184
|
-
expect(retryStrategy(1)).toBe(5000);
|
|
185
|
-
expect(retryStrategy(100)).toBe(5000);
|
|
186
|
-
expect(retryStrategy(1000)).toBe(5000);
|
|
187
|
-
});
|
|
188
|
-
});
|
|
189
|
-
describe('walidacja', () => {
|
|
190
|
-
it('powinno zwalidować konfigurację przy tworzeniu', () => {
|
|
191
|
-
// Given
|
|
192
|
-
process.env.REDIS_URL = 'redis://valid:6379';
|
|
193
|
-
// When & Then
|
|
194
|
-
expect(() => new base_config_1.default()).not.toThrow();
|
|
195
|
-
});
|
|
196
|
-
it('powinno rzucić błąd przy nieprawidłowym URL Redis', () => {
|
|
197
|
-
// Given
|
|
198
|
-
process.env.REDIS_URL = 'not-a-url';
|
|
199
|
-
// When & Then
|
|
200
|
-
expect(() => new base_config_1.default()).toThrow('Invalid Redis URL');
|
|
201
|
-
});
|
|
202
|
-
});
|
|
203
|
-
});
|
|
204
|
-
//# sourceMappingURL=base-config.spec.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"base-config.spec.js","sourceRoot":"","sources":["../../../src/shared/config/base-config.spec.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
export { default as BaseConfig } from './base-config';
|
|
@@ -1,9 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
-
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
-
};
|
|
5
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
-
exports.BaseConfig = void 0;
|
|
7
|
-
var base_config_1 = require("./base-config");
|
|
8
|
-
Object.defineProperty(exports, "BaseConfig", { enumerable: true, get: function () { return __importDefault(base_config_1).default; } });
|
|
9
|
-
//# sourceMappingURL=index.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/shared/config/index.ts"],"names":[],"mappings":";;;;;;AAAA,6CAAsD;AAA7C,0HAAA,OAAO,OAAc"}
|