@emmvish/stable-request 1.7.3 → 1.8.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/README.md +335 -0
- package/dist/core/stable-api-gateway.d.ts +2 -2
- package/dist/core/stable-api-gateway.d.ts.map +1 -1
- package/dist/core/stable-api-gateway.js +58 -4
- package/dist/core/stable-api-gateway.js.map +1 -1
- package/dist/core/stable-request.d.ts +2 -2
- package/dist/core/stable-request.d.ts.map +1 -1
- package/dist/core/stable-request.js +35 -5
- package/dist/core/stable-request.js.map +1 -1
- package/dist/core/stable-workflow.d.ts.map +1 -1
- package/dist/core/stable-workflow.js +15 -3
- package/dist/core/stable-workflow.js.map +1 -1
- package/dist/index.d.ts +3 -2
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -1
- package/dist/index.js.map +1 -1
- package/dist/types/index.d.ts +232 -0
- package/dist/types/index.d.ts.map +1 -1
- package/dist/utilities/cache-manager.d.ts +19 -0
- package/dist/utilities/cache-manager.d.ts.map +1 -1
- package/dist/utilities/cache-manager.js +38 -2
- package/dist/utilities/cache-manager.js.map +1 -1
- package/dist/utilities/circuit-breaker.d.ts +22 -0
- package/dist/utilities/circuit-breaker.d.ts.map +1 -1
- package/dist/utilities/circuit-breaker.js +65 -1
- package/dist/utilities/circuit-breaker.js.map +1 -1
- package/dist/utilities/concurrency-limiter.d.ts +26 -0
- package/dist/utilities/concurrency-limiter.d.ts.map +1 -1
- package/dist/utilities/concurrency-limiter.js +74 -4
- package/dist/utilities/concurrency-limiter.js.map +1 -1
- package/dist/utilities/execute-branch-workflow.d.ts.map +1 -1
- package/dist/utilities/execute-branch-workflow.js +18 -12
- package/dist/utilities/execute-branch-workflow.js.map +1 -1
- package/dist/utilities/execute-concurrently.d.ts.map +1 -1
- package/dist/utilities/execute-concurrently.js +5 -6
- package/dist/utilities/execute-concurrently.js.map +1 -1
- package/dist/utilities/execute-phase.d.ts.map +1 -1
- package/dist/utilities/execute-phase.js +11 -5
- package/dist/utilities/execute-phase.js.map +1 -1
- package/dist/utilities/execute-sequentially.d.ts.map +1 -1
- package/dist/utilities/execute-sequentially.js +5 -6
- package/dist/utilities/execute-sequentially.js.map +1 -1
- package/dist/utilities/index.d.ts +4 -3
- package/dist/utilities/index.d.ts.map +1 -1
- package/dist/utilities/index.js +4 -3
- package/dist/utilities/index.js.map +1 -1
- package/dist/utilities/metrics-aggregator.d.ts +51 -0
- package/dist/utilities/metrics-aggregator.d.ts.map +1 -0
- package/dist/utilities/metrics-aggregator.js +311 -0
- package/dist/utilities/metrics-aggregator.js.map +1 -0
- package/dist/utilities/rate-limiter.d.ts +19 -0
- package/dist/utilities/rate-limiter.d.ts.map +1 -1
- package/dist/utilities/rate-limiter.js +56 -3
- package/dist/utilities/rate-limiter.js.map +1 -1
- package/package.json +1 -1
|
@@ -3,6 +3,13 @@ export class CacheManager {
|
|
|
3
3
|
cache;
|
|
4
4
|
config;
|
|
5
5
|
accessOrder = [];
|
|
6
|
+
hits = 0;
|
|
7
|
+
misses = 0;
|
|
8
|
+
sets = 0;
|
|
9
|
+
evictions = 0;
|
|
10
|
+
expirations = 0;
|
|
11
|
+
totalGetTime = 0;
|
|
12
|
+
totalSetTime = 0;
|
|
6
13
|
constructor(config) {
|
|
7
14
|
this.cache = new Map();
|
|
8
15
|
this.config = {
|
|
@@ -53,7 +60,6 @@ export class CacheManager {
|
|
|
53
60
|
return parseInt(maxAgeMatch[1]) * 1000;
|
|
54
61
|
}
|
|
55
62
|
}
|
|
56
|
-
// Check Expires header if no cache-control max-age was found
|
|
57
63
|
const expires = headers['expires'] || headers['Expires'];
|
|
58
64
|
if (expires) {
|
|
59
65
|
const expiresDate = new Date(expires);
|
|
@@ -64,6 +70,7 @@ export class CacheManager {
|
|
|
64
70
|
return null;
|
|
65
71
|
}
|
|
66
72
|
get(reqConfig) {
|
|
73
|
+
const startTime = Date.now();
|
|
67
74
|
if (!this.config.enabled) {
|
|
68
75
|
return null;
|
|
69
76
|
}
|
|
@@ -73,19 +80,27 @@ export class CacheManager {
|
|
|
73
80
|
const key = this.generateKey(reqConfig);
|
|
74
81
|
const cached = this.cache.get(key);
|
|
75
82
|
if (!cached) {
|
|
83
|
+
this.misses++;
|
|
84
|
+
this.totalGetTime += (Date.now() - startTime);
|
|
76
85
|
return null;
|
|
77
86
|
}
|
|
78
87
|
const now = Date.now();
|
|
79
88
|
if (now > cached.expiresAt) {
|
|
80
89
|
this.cache.delete(key);
|
|
81
90
|
this.accessOrder = this.accessOrder.filter(k => k !== key);
|
|
91
|
+
this.expirations++;
|
|
92
|
+
this.misses++;
|
|
93
|
+
this.totalGetTime += (Date.now() - startTime);
|
|
82
94
|
return null;
|
|
83
95
|
}
|
|
84
96
|
this.accessOrder = this.accessOrder.filter(k => k !== key);
|
|
85
97
|
this.accessOrder.push(key);
|
|
98
|
+
this.hits++;
|
|
99
|
+
this.totalGetTime += (Date.now() - startTime);
|
|
86
100
|
return cached;
|
|
87
101
|
}
|
|
88
102
|
set(reqConfig, data, status, statusText, headers) {
|
|
103
|
+
const startTime = Date.now();
|
|
89
104
|
if (!this.config.enabled) {
|
|
90
105
|
return;
|
|
91
106
|
}
|
|
@@ -117,10 +132,13 @@ export class CacheManager {
|
|
|
117
132
|
const oldestKey = this.accessOrder.shift();
|
|
118
133
|
if (oldestKey) {
|
|
119
134
|
this.cache.delete(oldestKey);
|
|
135
|
+
this.evictions++;
|
|
120
136
|
}
|
|
121
137
|
}
|
|
122
138
|
this.cache.set(key, cached);
|
|
123
139
|
this.accessOrder.push(key);
|
|
140
|
+
this.sets++;
|
|
141
|
+
this.totalSetTime += (Date.now() - startTime);
|
|
124
142
|
}
|
|
125
143
|
clear() {
|
|
126
144
|
this.cache.clear();
|
|
@@ -135,6 +153,12 @@ export class CacheManager {
|
|
|
135
153
|
const now = Date.now();
|
|
136
154
|
const entries = Array.from(this.cache.entries());
|
|
137
155
|
const validEntries = entries.filter(([_, cached]) => now <= cached.expiresAt);
|
|
156
|
+
const totalRequests = this.hits + this.misses;
|
|
157
|
+
const hitRate = totalRequests > 0 ? (this.hits / totalRequests) * 100 : 0;
|
|
158
|
+
const missRate = totalRequests > 0 ? (this.misses / totalRequests) * 100 : 0;
|
|
159
|
+
const averageAge = validEntries.length > 0
|
|
160
|
+
? validEntries.reduce((sum, [_, cached]) => sum + (now - cached.timestamp), 0) / validEntries.length
|
|
161
|
+
: 0;
|
|
138
162
|
return {
|
|
139
163
|
size: this.cache.size,
|
|
140
164
|
validEntries: validEntries.length,
|
|
@@ -145,7 +169,19 @@ export class CacheManager {
|
|
|
145
169
|
: null,
|
|
146
170
|
newestEntry: entries.length > 0
|
|
147
171
|
? Math.max(...entries.map(([_, cached]) => cached.timestamp))
|
|
148
|
-
: null
|
|
172
|
+
: null,
|
|
173
|
+
hits: this.hits,
|
|
174
|
+
misses: this.misses,
|
|
175
|
+
sets: this.sets,
|
|
176
|
+
evictions: this.evictions,
|
|
177
|
+
expirations: this.expirations,
|
|
178
|
+
totalRequests: totalRequests,
|
|
179
|
+
hitRate: hitRate,
|
|
180
|
+
missRate: missRate,
|
|
181
|
+
averageCacheAge: averageAge,
|
|
182
|
+
averageGetTime: totalRequests > 0 ? this.totalGetTime / totalRequests : 0,
|
|
183
|
+
averageSetTime: this.sets > 0 ? this.totalSetTime / this.sets : 0,
|
|
184
|
+
utilizationPercentage: (this.cache.size / this.config.maxSize) * 100
|
|
149
185
|
};
|
|
150
186
|
}
|
|
151
187
|
prune() {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cache-manager.js","sourceRoot":"","sources":["../../src/utilities/cache-manager.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,MAAM,QAAQ,CAAC;AAIjC,MAAM,OAAO,YAAY;IACb,KAAK,CAA8B;IACnC,MAAM,CAA+F;IACrG,WAAW,GAAa,EAAE,CAAC;
|
|
1
|
+
{"version":3,"file":"cache-manager.js","sourceRoot":"","sources":["../../src/utilities/cache-manager.ts"],"names":[],"mappings":"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"}
|
|
@@ -13,6 +13,15 @@ export declare class CircuitBreaker {
|
|
|
13
13
|
private halfOpenRequests;
|
|
14
14
|
private halfOpenSuccesses;
|
|
15
15
|
private halfOpenFailures;
|
|
16
|
+
private stateTransitions;
|
|
17
|
+
private lastStateChangeTime;
|
|
18
|
+
private openCount;
|
|
19
|
+
private halfOpenCount;
|
|
20
|
+
private totalOpenDuration;
|
|
21
|
+
private lastOpenTime;
|
|
22
|
+
private recoveryAttempts;
|
|
23
|
+
private successfulRecoveries;
|
|
24
|
+
private failedRecoveries;
|
|
16
25
|
constructor(config: CircuitBreakerConfig);
|
|
17
26
|
canExecute(): Promise<boolean>;
|
|
18
27
|
recordSuccess(): void;
|
|
@@ -39,6 +48,17 @@ export declare class CircuitBreaker {
|
|
|
39
48
|
successfulAttempts: number;
|
|
40
49
|
attemptFailurePercentage: number;
|
|
41
50
|
config: Required<CircuitBreakerConfig>;
|
|
51
|
+
stateTransitions: number;
|
|
52
|
+
lastStateChangeTime: number;
|
|
53
|
+
openCount: number;
|
|
54
|
+
halfOpenCount: number;
|
|
55
|
+
totalOpenDuration: number;
|
|
56
|
+
averageOpenDuration: number;
|
|
57
|
+
recoveryAttempts: number;
|
|
58
|
+
successfulRecoveries: number;
|
|
59
|
+
failedRecoveries: number;
|
|
60
|
+
recoverySuccessRate: number;
|
|
61
|
+
openUntil: number | null;
|
|
42
62
|
};
|
|
43
63
|
reset(): void;
|
|
44
64
|
execute<T>(fn: () => Promise<T>): Promise<T>;
|
|
@@ -46,4 +66,6 @@ export declare class CircuitBreaker {
|
|
|
46
66
|
export declare class CircuitBreakerOpenError extends Error {
|
|
47
67
|
constructor(message: string);
|
|
48
68
|
}
|
|
69
|
+
export declare function getGlobalCircuitBreaker(config?: CircuitBreakerConfig): CircuitBreaker;
|
|
70
|
+
export declare function resetGlobalCircuitBreaker(): void;
|
|
49
71
|
//# sourceMappingURL=circuit-breaker.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"circuit-breaker.d.ts","sourceRoot":"","sources":["../../src/utilities/circuit-breaker.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,oBAAoB,EAAE,MAAM,mBAAmB,CAAC;AACzD,OAAO,EAAE,mBAAmB,EAAE,MAAM,mBAAmB,CAAC;AAExD,qBAAa,cAAc;IACvB,OAAO,CAAC,KAAK,CAAmD;IAChE,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAiC;IAExD,OAAO,CAAC,aAAa,CAAa;IAClC,OAAO,CAAC,cAAc,CAAa;IACnC,OAAO,CAAC,kBAAkB,CAAa;IAEvC,OAAO,CAAC,aAAa,CAAa;IAClC,OAAO,CAAC,cAAc,CAAa;IACnC,OAAO,CAAC,kBAAkB,CAAa;IAEvC,OAAO,CAAC,eAAe,CAAa;IACpC,OAAO,CAAC,gBAAgB,CAAa;IACrC,OAAO,CAAC,iBAAiB,CAAa;IACtC,OAAO,CAAC,gBAAgB,CAAa;gBAEzB,MAAM,EAAE,oBAAoB;IAWlC,UAAU,IAAI,OAAO,CAAC,OAAO,CAAC;IAqBpC,aAAa,IAAI,IAAI;IAerB,aAAa,IAAI,IAAI;IAcrB,oBAAoB,IAAI,IAAI;IAc5B,oBAAoB,IAAI,IAAI;IAY5B,OAAO,CAAC,cAAc;IAYtB,OAAO,CAAC,qBAAqB;IAY7B,OAAO,CAAC,uBAAuB;IAY/B,OAAO,CAAC,kBAAkB;
|
|
1
|
+
{"version":3,"file":"circuit-breaker.d.ts","sourceRoot":"","sources":["../../src/utilities/circuit-breaker.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,oBAAoB,EAAE,MAAM,mBAAmB,CAAC;AACzD,OAAO,EAAE,mBAAmB,EAAE,MAAM,mBAAmB,CAAC;AAExD,qBAAa,cAAc;IACvB,OAAO,CAAC,KAAK,CAAmD;IAChE,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAiC;IAExD,OAAO,CAAC,aAAa,CAAa;IAClC,OAAO,CAAC,cAAc,CAAa;IACnC,OAAO,CAAC,kBAAkB,CAAa;IAEvC,OAAO,CAAC,aAAa,CAAa;IAClC,OAAO,CAAC,cAAc,CAAa;IACnC,OAAO,CAAC,kBAAkB,CAAa;IAEvC,OAAO,CAAC,eAAe,CAAa;IACpC,OAAO,CAAC,gBAAgB,CAAa;IACrC,OAAO,CAAC,iBAAiB,CAAa;IACtC,OAAO,CAAC,gBAAgB,CAAa;IAErC,OAAO,CAAC,gBAAgB,CAAa;IACrC,OAAO,CAAC,mBAAmB,CAAsB;IACjD,OAAO,CAAC,SAAS,CAAa;IAC9B,OAAO,CAAC,aAAa,CAAa;IAClC,OAAO,CAAC,iBAAiB,CAAa;IACtC,OAAO,CAAC,YAAY,CAAa;IACjC,OAAO,CAAC,gBAAgB,CAAa;IACrC,OAAO,CAAC,oBAAoB,CAAa;IACzC,OAAO,CAAC,gBAAgB,CAAa;gBAEzB,MAAM,EAAE,oBAAoB;IAWlC,UAAU,IAAI,OAAO,CAAC,OAAO,CAAC;IAqBpC,aAAa,IAAI,IAAI;IAerB,aAAa,IAAI,IAAI;IAcrB,oBAAoB,IAAI,IAAI;IAc5B,oBAAoB,IAAI,IAAI;IAY5B,OAAO,CAAC,cAAc;IAYtB,OAAO,CAAC,qBAAqB;IAY7B,OAAO,CAAC,uBAAuB;IAY/B,OAAO,CAAC,kBAAkB;IAe1B,OAAO,CAAC,gBAAgB;IAaxB,OAAO,CAAC,oBAAoB;IAa5B,OAAO,CAAC,mBAAmB;IAO3B,OAAO,CAAC,aAAa;IASrB,OAAO,CAAC,qBAAqB;IAM7B,QAAQ,IAAI;QACR,KAAK,EAAE,mBAAmB,CAAC;QAC3B,aAAa,EAAE,MAAM,CAAC;QACtB,cAAc,EAAE,MAAM,CAAC;QACvB,kBAAkB,EAAE,MAAM,CAAC;QAC3B,iBAAiB,EAAE,MAAM,CAAC;QAC1B,aAAa,EAAE,MAAM,CAAC;QACtB,cAAc,EAAE,MAAM,CAAC;QACvB,kBAAkB,EAAE,MAAM,CAAC;QAC3B,wBAAwB,EAAE,MAAM,CAAC;QACjC,MAAM,EAAE,QAAQ,CAAC,oBAAoB,CAAC,CAAC;QACvC,gBAAgB,EAAE,MAAM,CAAC;QACzB,mBAAmB,EAAE,MAAM,CAAC;QAC5B,SAAS,EAAE,MAAM,CAAC;QAClB,aAAa,EAAE,MAAM,CAAC;QACtB,iBAAiB,EAAE,MAAM,CAAC;QAC1B,mBAAmB,EAAE,MAAM,CAAC;QAC5B,gBAAgB,EAAE,MAAM,CAAC;QACzB,oBAAoB,EAAE,MAAM,CAAC;QAC7B,gBAAgB,EAAE,MAAM,CAAC;QACzB,mBAAmB,EAAE,MAAM,CAAC;QAC5B,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;KAC5B;IAqCD,KAAK,IAAI,IAAI;IAOP,OAAO,CAAC,CAAC,EAAE,EAAE,EAAE,MAAM,OAAO,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC;CAkBrD;AAED,qBAAa,uBAAwB,SAAQ,KAAK;gBAClC,OAAO,EAAE,MAAM;CAI9B;AAID,wBAAgB,uBAAuB,CAAC,MAAM,CAAC,EAAE,oBAAoB,GAAG,cAAc,CAKrF;AAED,wBAAgB,yBAAyB,IAAI,IAAI,CAKhD"}
|
|
@@ -12,6 +12,15 @@ export class CircuitBreaker {
|
|
|
12
12
|
halfOpenRequests = 0;
|
|
13
13
|
halfOpenSuccesses = 0;
|
|
14
14
|
halfOpenFailures = 0;
|
|
15
|
+
stateTransitions = 0;
|
|
16
|
+
lastStateChangeTime = Date.now();
|
|
17
|
+
openCount = 0;
|
|
18
|
+
halfOpenCount = 0;
|
|
19
|
+
totalOpenDuration = 0;
|
|
20
|
+
lastOpenTime = 0;
|
|
21
|
+
recoveryAttempts = 0;
|
|
22
|
+
successfulRecoveries = 0;
|
|
23
|
+
failedRecoveries = 0;
|
|
15
24
|
constructor(config) {
|
|
16
25
|
this.config = {
|
|
17
26
|
failureThresholdPercentage: Math.max(0, Math.min(100, config.failureThresholdPercentage)),
|
|
@@ -118,16 +127,41 @@ export class CircuitBreaker {
|
|
|
118
127
|
}
|
|
119
128
|
}
|
|
120
129
|
transitionToClosed() {
|
|
130
|
+
const now = Date.now();
|
|
131
|
+
if (this.state === CircuitBreakerState.HALF_OPEN) {
|
|
132
|
+
this.successfulRecoveries++;
|
|
133
|
+
}
|
|
134
|
+
if (this.state === CircuitBreakerState.OPEN && this.lastOpenTime > 0) {
|
|
135
|
+
this.totalOpenDuration += (now - this.lastOpenTime);
|
|
136
|
+
}
|
|
121
137
|
this.state = CircuitBreakerState.CLOSED;
|
|
138
|
+
this.lastStateChangeTime = now;
|
|
139
|
+
this.stateTransitions++;
|
|
122
140
|
this.resetCounters();
|
|
123
141
|
this.resetHalfOpenCounters();
|
|
124
142
|
}
|
|
125
143
|
transitionToOpen() {
|
|
144
|
+
const now = Date.now();
|
|
145
|
+
if (this.state === CircuitBreakerState.HALF_OPEN) {
|
|
146
|
+
this.failedRecoveries++;
|
|
147
|
+
}
|
|
126
148
|
this.state = CircuitBreakerState.OPEN;
|
|
149
|
+
this.lastStateChangeTime = now;
|
|
150
|
+
this.lastOpenTime = now;
|
|
151
|
+
this.stateTransitions++;
|
|
152
|
+
this.openCount++;
|
|
127
153
|
this.resetHalfOpenCounters();
|
|
128
154
|
}
|
|
129
155
|
transitionToHalfOpen() {
|
|
156
|
+
const now = Date.now();
|
|
157
|
+
if (this.state === CircuitBreakerState.OPEN && this.lastOpenTime > 0) {
|
|
158
|
+
this.totalOpenDuration += (now - this.lastOpenTime);
|
|
159
|
+
}
|
|
130
160
|
this.state = CircuitBreakerState.HALF_OPEN;
|
|
161
|
+
this.lastStateChangeTime = now;
|
|
162
|
+
this.stateTransitions++;
|
|
163
|
+
this.halfOpenCount++;
|
|
164
|
+
this.recoveryAttempts++;
|
|
131
165
|
this.resetHalfOpenCounters();
|
|
132
166
|
}
|
|
133
167
|
shouldResetCounters() {
|
|
@@ -150,6 +184,10 @@ export class CircuitBreaker {
|
|
|
150
184
|
this.halfOpenFailures = 0;
|
|
151
185
|
}
|
|
152
186
|
getState() {
|
|
187
|
+
const now = Date.now();
|
|
188
|
+
const openUntil = this.state === CircuitBreakerState.OPEN
|
|
189
|
+
? this.lastFailureTime + this.config.recoveryTimeoutMs
|
|
190
|
+
: null;
|
|
153
191
|
return {
|
|
154
192
|
state: this.state,
|
|
155
193
|
totalRequests: this.totalRequests,
|
|
@@ -164,7 +202,20 @@ export class CircuitBreaker {
|
|
|
164
202
|
attemptFailurePercentage: this.totalAttempts > 0
|
|
165
203
|
? (this.failedAttempts / this.totalAttempts) * 100
|
|
166
204
|
: 0,
|
|
167
|
-
config: this.config
|
|
205
|
+
config: this.config,
|
|
206
|
+
stateTransitions: this.stateTransitions,
|
|
207
|
+
lastStateChangeTime: this.lastStateChangeTime,
|
|
208
|
+
openCount: this.openCount,
|
|
209
|
+
halfOpenCount: this.halfOpenCount,
|
|
210
|
+
totalOpenDuration: this.totalOpenDuration,
|
|
211
|
+
averageOpenDuration: this.openCount > 0 ? this.totalOpenDuration / this.openCount : 0,
|
|
212
|
+
recoveryAttempts: this.recoveryAttempts,
|
|
213
|
+
successfulRecoveries: this.successfulRecoveries,
|
|
214
|
+
failedRecoveries: this.failedRecoveries,
|
|
215
|
+
recoverySuccessRate: this.recoveryAttempts > 0
|
|
216
|
+
? (this.successfulRecoveries / this.recoveryAttempts) * 100
|
|
217
|
+
: 0,
|
|
218
|
+
openUntil: openUntil
|
|
168
219
|
};
|
|
169
220
|
}
|
|
170
221
|
reset() {
|
|
@@ -195,4 +246,17 @@ export class CircuitBreakerOpenError extends Error {
|
|
|
195
246
|
this.name = 'CircuitBreakerOpenError';
|
|
196
247
|
}
|
|
197
248
|
}
|
|
249
|
+
let globalCircuitBreaker = null;
|
|
250
|
+
export function getGlobalCircuitBreaker(config) {
|
|
251
|
+
if (!globalCircuitBreaker && config) {
|
|
252
|
+
globalCircuitBreaker = new CircuitBreaker(config);
|
|
253
|
+
}
|
|
254
|
+
return globalCircuitBreaker;
|
|
255
|
+
}
|
|
256
|
+
export function resetGlobalCircuitBreaker() {
|
|
257
|
+
if (globalCircuitBreaker) {
|
|
258
|
+
globalCircuitBreaker.reset();
|
|
259
|
+
}
|
|
260
|
+
globalCircuitBreaker = null;
|
|
261
|
+
}
|
|
198
262
|
//# sourceMappingURL=circuit-breaker.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"circuit-breaker.js","sourceRoot":"","sources":["../../src/utilities/circuit-breaker.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"circuit-breaker.js","sourceRoot":"","sources":["../../src/utilities/circuit-breaker.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,mBAAmB,EAAE,MAAM,mBAAmB,CAAC;AAExD,MAAM,OAAO,cAAc;IACf,KAAK,GAAwB,mBAAmB,CAAC,MAAM,CAAC;IAC/C,MAAM,CAAiC;IAEhD,aAAa,GAAW,CAAC,CAAC;IAC1B,cAAc,GAAW,CAAC,CAAC;IAC3B,kBAAkB,GAAW,CAAC,CAAC;IAE/B,aAAa,GAAW,CAAC,CAAC;IAC1B,cAAc,GAAW,CAAC,CAAC;IAC3B,kBAAkB,GAAW,CAAC,CAAC;IAE/B,eAAe,GAAW,CAAC,CAAC;IAC5B,gBAAgB,GAAW,CAAC,CAAC;IAC7B,iBAAiB,GAAW,CAAC,CAAC;IAC9B,gBAAgB,GAAW,CAAC,CAAC;IAE7B,gBAAgB,GAAW,CAAC,CAAC;IAC7B,mBAAmB,GAAW,IAAI,CAAC,GAAG,EAAE,CAAC;IACzC,SAAS,GAAW,CAAC,CAAC;IACtB,aAAa,GAAW,CAAC,CAAC;IAC1B,iBAAiB,GAAW,CAAC,CAAC;IAC9B,YAAY,GAAW,CAAC,CAAC;IACzB,gBAAgB,GAAW,CAAC,CAAC;IAC7B,oBAAoB,GAAW,CAAC,CAAC;IACjC,gBAAgB,GAAW,CAAC,CAAC;IAErC,YAAY,MAA4B;QACpC,IAAI,CAAC,MAAM,GAAG;YACV,0BAA0B,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,MAAM,CAAC,0BAA0B,CAAC,CAAC;YACzF,eAAe,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,MAAM,CAAC,eAAe,CAAC;YACpD,iBAAiB,EAAE,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,MAAM,CAAC,iBAAiB,CAAC;YAC1D,0BAA0B,EAAE,MAAM,CAAC,0BAA0B,IAAI,EAAE;YACnE,mBAAmB,EAAE,MAAM,CAAC,mBAAmB,IAAI,CAAC;YACpD,uBAAuB,EAAE,MAAM,CAAC,uBAAuB,IAAI,KAAK;SACnE,CAAC;IACN,CAAC;IAED,KAAK,CAAC,UAAU;QACZ,IAAI,IAAI,CAAC,KAAK,KAAK,mBAAmB,CAAC,MAAM,EAAE,CAAC;YAC5C,OAAO,IAAI,CAAC;QAChB,CAAC;QAED,IAAI,IAAI,CAAC,KAAK,KAAK,mBAAmB,CAAC,IAAI,EAAE,CAAC;YAC1C,MAAM,oBAAoB,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,eAAe,CAAC;YAC/D,IAAI,oBAAoB,IAAI,IAAI,CAAC,MAAM,CAAC,iBAAiB,EAAE,CAAC;gBACxD,IAAI,CAAC,oBAAoB,EAAE,CAAC;gBAC5B,OAAO,IAAI,CAAC;YAChB,CAAC;YACD,OAAO,KAAK,CAAC;QACjB,CAAC;QAED,IAAI,IAAI,CAAC,KAAK,KAAK,mBAAmB,CAAC,SAAS,EAAE,CAAC;YAC/C,OAAO,IAAI,CAAC,gBAAgB,GAAG,IAAI,CAAC,MAAM,CAAC,mBAAmB,CAAC;QACnE,CAAC;QAED,OAAO,KAAK,CAAC;IACjB,CAAC;IAED,aAAa;QACT,IAAI,CAAC,aAAa,EAAE,CAAC;QACrB,IAAI,CAAC,kBAAkB,EAAE,CAAC;QAE1B,IAAI,IAAI,CAAC,KAAK,KAAK,mBAAmB,CAAC,SAAS,EAAE,CAAC;YAC/C,IAAI,CAAC,iBAAiB,EAAE,CAAC;YACzB,IAAI,CAAC,gBAAgB,EAAE,CAAC;YACxB,IAAI,CAAC,uBAAuB,EAAE,CAAC;QACnC,CAAC;aAAM,IAAI,IAAI,CAAC,KAAK,KAAK,mBAAmB,CAAC,MAAM,EAAE,CAAC;YACnD,IAAI,IAAI,CAAC,mBAAmB,EAAE,EAAE,CAAC;gBAC7B,IAAI,CAAC,aAAa,EAAE,CAAC;YACzB,CAAC;QACL,CAAC;IACL,CAAC;IAED,aAAa;QACT,IAAI,CAAC,aAAa,EAAE,CAAC;QACrB,IAAI,CAAC,cAAc,EAAE,CAAC;QACtB,IAAI,CAAC,eAAe,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;QAElC,IAAI,IAAI,CAAC,KAAK,KAAK,mBAAmB,CAAC,SAAS,EAAE,CAAC;YAC/C,IAAI,CAAC,gBAAgB,EAAE,CAAC;YACxB,IAAI,CAAC,gBAAgB,EAAE,CAAC;YACxB,IAAI,CAAC,uBAAuB,EAAE,CAAC;QACnC,CAAC;aAAM,IAAI,IAAI,CAAC,KAAK,KAAK,mBAAmB,CAAC,MAAM,EAAE,CAAC;YACnD,IAAI,CAAC,cAAc,EAAE,CAAC;QAC1B,CAAC;IACL,CAAC;IAED,oBAAoB;QAChB,IAAI,CAAC,aAAa,EAAE,CAAC;QACrB,IAAI,CAAC,kBAAkB,EAAE,CAAC;QAE1B,IAAI,IAAI,CAAC,KAAK,KAAK,mBAAmB,CAAC,MAAM,EAAE,CAAC;YAC5C,IAAI,IAAI,CAAC,MAAM,CAAC,uBAAuB,EAAE,CAAC;gBACtC,IAAI,CAAC,qBAAqB,EAAE,CAAC;YACjC,CAAC;YACD,IAAI,IAAI,CAAC,mBAAmB,EAAE,EAAE,CAAC;gBAC7B,IAAI,CAAC,aAAa,EAAE,CAAC;YACzB,CAAC;QACL,CAAC;IACL,CAAC;IAED,oBAAoB;QAChB,IAAI,CAAC,aAAa,EAAE,CAAC;QACrB,IAAI,CAAC,cAAc,EAAE,CAAC;QACtB,IAAI,CAAC,eAAe,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;QAElC,IAAI,IAAI,CAAC,KAAK,KAAK,mBAAmB,CAAC,MAAM,EAAE,CAAC;YAC5C,IAAI,IAAI,CAAC,MAAM,CAAC,uBAAuB,EAAE,CAAC;gBACtC,IAAI,CAAC,qBAAqB,EAAE,CAAC;YACjC,CAAC;QACL,CAAC;IACL,CAAC;IAEO,cAAc;QAClB,IAAI,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC,MAAM,CAAC,eAAe,EAAE,CAAC;YACnD,OAAO;QACX,CAAC;QAED,MAAM,iBAAiB,GAAG,CAAC,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC,aAAa,CAAC,GAAG,GAAG,CAAC;QAE3E,IAAI,iBAAiB,IAAI,IAAI,CAAC,MAAM,CAAC,0BAA0B,EAAE,CAAC;YAC9D,IAAI,CAAC,gBAAgB,EAAE,CAAC;QAC5B,CAAC;IACL,CAAC;IAEO,qBAAqB;QACzB,IAAI,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC,MAAM,CAAC,eAAe,EAAE,CAAC;YACnD,OAAO;QACX,CAAC;QAED,MAAM,iBAAiB,GAAG,CAAC,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC,aAAa,CAAC,GAAG,GAAG,CAAC;QAE3E,IAAI,iBAAiB,IAAI,IAAI,CAAC,MAAM,CAAC,0BAA0B,EAAE,CAAC;YAC9D,IAAI,CAAC,gBAAgB,EAAE,CAAC;QAC5B,CAAC;IACL,CAAC;IAEO,uBAAuB;QAC3B,IAAI,IAAI,CAAC,gBAAgB,IAAI,IAAI,CAAC,MAAM,CAAC,mBAAmB,EAAE,CAAC;YAC3D,MAAM,iBAAiB,GAAG,CAAC,IAAI,CAAC,iBAAiB,GAAG,IAAI,CAAC,gBAAgB,CAAC,GAAG,GAAG,CAAC;YAEjF,IAAI,iBAAiB,IAAI,IAAI,CAAC,MAAM,CAAC,0BAA0B,EAAE,CAAC;gBAC9D,IAAI,CAAC,kBAAkB,EAAE,CAAC;YAC9B,CAAC;iBAAM,CAAC;gBACJ,IAAI,CAAC,gBAAgB,EAAE,CAAC;YAC5B,CAAC;QACL,CAAC;IACL,CAAC;IAEO,kBAAkB;QACtB,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;QACvB,IAAI,IAAI,CAAC,KAAK,KAAK,mBAAmB,CAAC,SAAS,EAAE,CAAC;YAC/C,IAAI,CAAC,oBAAoB,EAAE,CAAC;QAChC,CAAC;QACD,IAAI,IAAI,CAAC,KAAK,KAAK,mBAAmB,CAAC,IAAI,IAAI,IAAI,CAAC,YAAY,GAAG,CAAC,EAAE,CAAC;YACnE,IAAI,CAAC,iBAAiB,IAAI,CAAC,GAAG,GAAG,IAAI,CAAC,YAAY,CAAC,CAAC;QACxD,CAAC;QACD,IAAI,CAAC,KAAK,GAAG,mBAAmB,CAAC,MAAM,CAAC;QACxC,IAAI,CAAC,mBAAmB,GAAG,GAAG,CAAC;QAC/B,IAAI,CAAC,gBAAgB,EAAE,CAAC;QACxB,IAAI,CAAC,aAAa,EAAE,CAAC;QACrB,IAAI,CAAC,qBAAqB,EAAE,CAAC;IACjC,CAAC;IAEO,gBAAgB;QACpB,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;QACvB,IAAI,IAAI,CAAC,KAAK,KAAK,mBAAmB,CAAC,SAAS,EAAE,CAAC;YAC/C,IAAI,CAAC,gBAAgB,EAAE,CAAC;QAC5B,CAAC;QACD,IAAI,CAAC,KAAK,GAAG,mBAAmB,CAAC,IAAI,CAAC;QACtC,IAAI,CAAC,mBAAmB,GAAG,GAAG,CAAC;QAC/B,IAAI,CAAC,YAAY,GAAG,GAAG,CAAC;QACxB,IAAI,CAAC,gBAAgB,EAAE,CAAC;QACxB,IAAI,CAAC,SAAS,EAAE,CAAC;QACjB,IAAI,CAAC,qBAAqB,EAAE,CAAC;IACjC,CAAC;IAEO,oBAAoB;QACxB,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;QACvB,IAAI,IAAI,CAAC,KAAK,KAAK,mBAAmB,CAAC,IAAI,IAAI,IAAI,CAAC,YAAY,GAAG,CAAC,EAAE,CAAC;YACnE,IAAI,CAAC,iBAAiB,IAAI,CAAC,GAAG,GAAG,IAAI,CAAC,YAAY,CAAC,CAAC;QACxD,CAAC;QACD,IAAI,CAAC,KAAK,GAAG,mBAAmB,CAAC,SAAS,CAAC;QAC3C,IAAI,CAAC,mBAAmB,GAAG,GAAG,CAAC;QAC/B,IAAI,CAAC,gBAAgB,EAAE,CAAC;QACxB,IAAI,CAAC,aAAa,EAAE,CAAC;QACrB,IAAI,CAAC,gBAAgB,EAAE,CAAC;QACxB,IAAI,CAAC,qBAAqB,EAAE,CAAC;IACjC,CAAC;IAEO,mBAAmB;QACvB,MAAM,SAAS,GAAG,IAAI,CAAC,MAAM,CAAC,uBAAuB;YACjD,CAAC,CAAC,IAAI,CAAC,aAAa,IAAI,IAAI,CAAC,MAAM,CAAC,eAAe,GAAG,EAAE;YACxD,CAAC,CAAC,IAAI,CAAC,aAAa,IAAI,IAAI,CAAC,MAAM,CAAC,eAAe,GAAG,EAAE,CAAC;QAC7D,OAAO,SAAS,CAAC;IACrB,CAAC;IAEO,aAAa;QACjB,IAAI,CAAC,aAAa,GAAG,CAAC,CAAC;QACvB,IAAI,CAAC,cAAc,GAAG,CAAC,CAAC;QACxB,IAAI,CAAC,kBAAkB,GAAG,CAAC,CAAC;QAC5B,IAAI,CAAC,aAAa,GAAG,CAAC,CAAC;QACvB,IAAI,CAAC,cAAc,GAAG,CAAC,CAAC;QACxB,IAAI,CAAC,kBAAkB,GAAG,CAAC,CAAC;IAChC,CAAC;IAEO,qBAAqB;QACzB,IAAI,CAAC,gBAAgB,GAAG,CAAC,CAAC;QAC1B,IAAI,CAAC,iBAAiB,GAAG,CAAC,CAAC;QAC3B,IAAI,CAAC,gBAAgB,GAAG,CAAC,CAAC;IAC9B,CAAC;IAED,QAAQ;QAuBJ,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;QACvB,MAAM,SAAS,GAAG,IAAI,CAAC,KAAK,KAAK,mBAAmB,CAAC,IAAI;YACrD,CAAC,CAAC,IAAI,CAAC,eAAe,GAAG,IAAI,CAAC,MAAM,CAAC,iBAAiB;YACtD,CAAC,CAAC,IAAI,CAAC;QAEX,OAAO;YACH,KAAK,EAAE,IAAI,CAAC,KAAK;YACjB,aAAa,EAAE,IAAI,CAAC,aAAa;YACjC,cAAc,EAAE,IAAI,CAAC,cAAc;YACnC,kBAAkB,EAAE,IAAI,CAAC,kBAAkB;YAC3C,iBAAiB,EAAE,IAAI,CAAC,aAAa,GAAG,CAAC;gBACrC,CAAC,CAAC,CAAC,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC,aAAa,CAAC,GAAG,GAAG;gBAClD,CAAC,CAAC,CAAC;YACP,aAAa,EAAE,IAAI,CAAC,aAAa;YACjC,cAAc,EAAE,IAAI,CAAC,cAAc;YACnC,kBAAkB,EAAE,IAAI,CAAC,kBAAkB;YAC3C,wBAAwB,EAAE,IAAI,CAAC,aAAa,GAAG,CAAC;gBAC5C,CAAC,CAAC,CAAC,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC,aAAa,CAAC,GAAG,GAAG;gBAClD,CAAC,CAAC,CAAC;YACP,MAAM,EAAE,IAAI,CAAC,MAAM;YACnB,gBAAgB,EAAE,IAAI,CAAC,gBAAgB;YACvC,mBAAmB,EAAE,IAAI,CAAC,mBAAmB;YAC7C,SAAS,EAAE,IAAI,CAAC,SAAS;YACzB,aAAa,EAAE,IAAI,CAAC,aAAa;YACjC,iBAAiB,EAAE,IAAI,CAAC,iBAAiB;YACzC,mBAAmB,EAAE,IAAI,CAAC,SAAS,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,iBAAiB,GAAG,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC;YACrF,gBAAgB,EAAE,IAAI,CAAC,gBAAgB;YACvC,oBAAoB,EAAE,IAAI,CAAC,oBAAoB;YAC/C,gBAAgB,EAAE,IAAI,CAAC,gBAAgB;YACvC,mBAAmB,EAAE,IAAI,CAAC,gBAAgB,GAAG,CAAC;gBAC1C,CAAC,CAAC,CAAC,IAAI,CAAC,oBAAoB,GAAG,IAAI,CAAC,gBAAgB,CAAC,GAAG,GAAG;gBAC3D,CAAC,CAAC,CAAC;YACP,SAAS,EAAE,SAAS;SACvB,CAAC;IACN,CAAC;IAED,KAAK;QACD,IAAI,CAAC,KAAK,GAAG,mBAAmB,CAAC,MAAM,CAAC;QACxC,IAAI,CAAC,aAAa,EAAE,CAAC;QACrB,IAAI,CAAC,qBAAqB,EAAE,CAAC;QAC7B,IAAI,CAAC,eAAe,GAAG,CAAC,CAAC;IAC7B,CAAC;IAED,KAAK,CAAC,OAAO,CAAI,EAAoB;QACjC,MAAM,UAAU,GAAG,MAAM,IAAI,CAAC,UAAU,EAAE,CAAC;QAE3C,IAAI,CAAC,UAAU,EAAE,CAAC;YACd,MAAM,IAAI,uBAAuB,CAC7B,sBAAsB,IAAI,CAAC,KAAK,oBAAoB,CACvD,CAAC;QACN,CAAC;QAED,IAAI,CAAC;YACD,MAAM,MAAM,GAAG,MAAM,EAAE,EAAE,CAAC;YAC1B,IAAI,CAAC,aAAa,EAAE,CAAC;YACrB,OAAO,MAAM,CAAC;QAClB,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACb,IAAI,CAAC,aAAa,EAAE,CAAC;YACrB,MAAM,KAAK,CAAC;QAChB,CAAC;IACL,CAAC;CACJ;AAED,MAAM,OAAO,uBAAwB,SAAQ,KAAK;IAC9C,YAAY,OAAe;QACvB,KAAK,CAAC,OAAO,CAAC,CAAC;QACf,IAAI,CAAC,IAAI,GAAG,yBAAyB,CAAC;IAC1C,CAAC;CACJ;AAED,IAAI,oBAAoB,GAA0B,IAAI,CAAC;AAEvD,MAAM,UAAU,uBAAuB,CAAC,MAA6B;IACjE,IAAI,CAAC,oBAAoB,IAAI,MAAM,EAAE,CAAC;QAClC,oBAAoB,GAAG,IAAI,cAAc,CAAC,MAAM,CAAC,CAAC;IACtD,CAAC;IACD,OAAO,oBAAqB,CAAC;AACjC,CAAC;AAED,MAAM,UAAU,yBAAyB;IACrC,IAAI,oBAAoB,EAAE,CAAC;QACvB,oBAAoB,CAAC,KAAK,EAAE,CAAC;IACjC,CAAC;IACD,oBAAoB,GAAG,IAAI,CAAC;AAChC,CAAC"}
|
|
@@ -2,10 +2,36 @@ export declare class ConcurrencyLimiter {
|
|
|
2
2
|
private readonly limit;
|
|
3
3
|
private running;
|
|
4
4
|
private readonly queue;
|
|
5
|
+
private totalRequests;
|
|
6
|
+
private completedRequests;
|
|
7
|
+
private failedRequests;
|
|
8
|
+
private queuedRequests;
|
|
9
|
+
private peakConcurrency;
|
|
10
|
+
private peakQueueLength;
|
|
11
|
+
private totalQueueWaitTime;
|
|
12
|
+
private totalExecutionTime;
|
|
13
|
+
private queueWaitTimes;
|
|
5
14
|
constructor(limit: number);
|
|
6
15
|
private acquire;
|
|
7
16
|
private release;
|
|
8
17
|
execute<T>(fn: () => Promise<T>): Promise<T>;
|
|
9
18
|
executeAll<T>(fns: Array<() => Promise<T>>): Promise<T[]>;
|
|
19
|
+
getState(): {
|
|
20
|
+
limit: number;
|
|
21
|
+
running: number;
|
|
22
|
+
queueLength: number;
|
|
23
|
+
totalRequests: number;
|
|
24
|
+
completedRequests: number;
|
|
25
|
+
failedRequests: number;
|
|
26
|
+
queuedRequests: number;
|
|
27
|
+
successRate: number;
|
|
28
|
+
peakConcurrency: number;
|
|
29
|
+
peakQueueLength: number;
|
|
30
|
+
averageQueueWaitTime: number;
|
|
31
|
+
averageExecutionTime: number;
|
|
32
|
+
utilizationPercentage: number;
|
|
33
|
+
};
|
|
10
34
|
}
|
|
35
|
+
export declare function getGlobalConcurrencyLimiter(limit?: number): ConcurrencyLimiter;
|
|
36
|
+
export declare function resetGlobalConcurrencyLimiter(): void;
|
|
11
37
|
//# sourceMappingURL=concurrency-limiter.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"concurrency-limiter.d.ts","sourceRoot":"","sources":["../../src/utilities/concurrency-limiter.ts"],"names":[],"mappings":"AAAA,qBAAa,kBAAkB;IAC3B,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAS;IAC/B,OAAO,CAAC,OAAO,CAAa;IAC5B,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAyB;
|
|
1
|
+
{"version":3,"file":"concurrency-limiter.d.ts","sourceRoot":"","sources":["../../src/utilities/concurrency-limiter.ts"],"names":[],"mappings":"AAAA,qBAAa,kBAAkB;IAC3B,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAS;IAC/B,OAAO,CAAC,OAAO,CAAa;IAC5B,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAyB;IAC/C,OAAO,CAAC,aAAa,CAAa;IAClC,OAAO,CAAC,iBAAiB,CAAa;IACtC,OAAO,CAAC,cAAc,CAAa;IACnC,OAAO,CAAC,cAAc,CAAa;IACnC,OAAO,CAAC,eAAe,CAAa;IACpC,OAAO,CAAC,eAAe,CAAa;IACpC,OAAO,CAAC,kBAAkB,CAAa;IACvC,OAAO,CAAC,kBAAkB,CAAa;IACvC,OAAO,CAAC,cAAc,CAAgB;gBAE1B,KAAK,EAAE,MAAM;YAIX,OAAO;IAsBrB,OAAO,CAAC,OAAO;IAUT,OAAO,CAAC,CAAC,EAAE,EAAE,EAAE,MAAM,OAAO,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC;IAqB5C,UAAU,CAAC,CAAC,EAAE,GAAG,EAAE,KAAK,CAAC,MAAM,OAAO,CAAC,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC,EAAE,CAAC;IAI/D,QAAQ;;;;;;;;;;;;;;;CA8BX;AAID,wBAAgB,2BAA2B,CAAC,KAAK,CAAC,EAAE,MAAM,GAAG,kBAAkB,CAK9E;AAED,wBAAgB,6BAA6B,IAAI,IAAI,CAEpD"}
|
|
@@ -2,16 +2,34 @@ export class ConcurrencyLimiter {
|
|
|
2
2
|
limit;
|
|
3
3
|
running = 0;
|
|
4
4
|
queue = [];
|
|
5
|
+
totalRequests = 0;
|
|
6
|
+
completedRequests = 0;
|
|
7
|
+
failedRequests = 0;
|
|
8
|
+
queuedRequests = 0;
|
|
9
|
+
peakConcurrency = 0;
|
|
10
|
+
peakQueueLength = 0;
|
|
11
|
+
totalQueueWaitTime = 0;
|
|
12
|
+
totalExecutionTime = 0;
|
|
13
|
+
queueWaitTimes = [];
|
|
5
14
|
constructor(limit) {
|
|
6
15
|
this.limit = Math.max(1, Math.floor(limit));
|
|
7
16
|
}
|
|
8
17
|
async acquire() {
|
|
18
|
+
const queueStartTime = Date.now();
|
|
9
19
|
if (this.running < this.limit) {
|
|
10
20
|
this.running++;
|
|
11
|
-
|
|
21
|
+
this.peakConcurrency = Math.max(this.peakConcurrency, this.running);
|
|
22
|
+
return Promise.resolve({ queueWaitTime: 0 });
|
|
12
23
|
}
|
|
24
|
+
this.queuedRequests++;
|
|
13
25
|
return new Promise((resolve) => {
|
|
14
|
-
this.queue.push(
|
|
26
|
+
this.queue.push(() => {
|
|
27
|
+
const queueWaitTime = Date.now() - queueStartTime;
|
|
28
|
+
this.totalQueueWaitTime += queueWaitTime;
|
|
29
|
+
this.queueWaitTimes.push(queueWaitTime);
|
|
30
|
+
resolve({ queueWaitTime });
|
|
31
|
+
});
|
|
32
|
+
this.peakQueueLength = Math.max(this.peakQueueLength, this.queue.length);
|
|
15
33
|
});
|
|
16
34
|
}
|
|
17
35
|
release() {
|
|
@@ -19,13 +37,26 @@ export class ConcurrencyLimiter {
|
|
|
19
37
|
const next = this.queue.shift();
|
|
20
38
|
if (next) {
|
|
21
39
|
this.running++;
|
|
40
|
+
this.peakConcurrency = Math.max(this.peakConcurrency, this.running);
|
|
22
41
|
next();
|
|
23
42
|
}
|
|
24
43
|
}
|
|
25
44
|
async execute(fn) {
|
|
26
|
-
|
|
45
|
+
this.totalRequests++;
|
|
46
|
+
const { queueWaitTime } = await this.acquire();
|
|
47
|
+
const executionStartTime = Date.now();
|
|
27
48
|
try {
|
|
28
|
-
|
|
49
|
+
const result = await fn();
|
|
50
|
+
const executionTime = Date.now() - executionStartTime;
|
|
51
|
+
this.totalExecutionTime += executionTime;
|
|
52
|
+
this.completedRequests++;
|
|
53
|
+
return result;
|
|
54
|
+
}
|
|
55
|
+
catch (error) {
|
|
56
|
+
const executionTime = Date.now() - executionStartTime;
|
|
57
|
+
this.totalExecutionTime += executionTime;
|
|
58
|
+
this.failedRequests++;
|
|
59
|
+
throw error;
|
|
29
60
|
}
|
|
30
61
|
finally {
|
|
31
62
|
this.release();
|
|
@@ -34,5 +65,44 @@ export class ConcurrencyLimiter {
|
|
|
34
65
|
async executeAll(fns) {
|
|
35
66
|
return Promise.all(fns.map(fn => this.execute(fn)));
|
|
36
67
|
}
|
|
68
|
+
getState() {
|
|
69
|
+
const successRate = this.totalRequests > 0
|
|
70
|
+
? (this.completedRequests - this.failedRequests) / this.totalRequests * 100
|
|
71
|
+
: 0;
|
|
72
|
+
const averageConcurrency = this.completedRequests > 0
|
|
73
|
+
? this.totalExecutionTime / (Date.now() - (this.totalExecutionTime / this.completedRequests))
|
|
74
|
+
: 0;
|
|
75
|
+
const averageQueueWaitTime = this.queuedRequests > 0
|
|
76
|
+
? this.totalQueueWaitTime / this.queuedRequests
|
|
77
|
+
: 0;
|
|
78
|
+
const averageExecutionTime = this.completedRequests > 0
|
|
79
|
+
? this.totalExecutionTime / this.completedRequests
|
|
80
|
+
: 0;
|
|
81
|
+
return {
|
|
82
|
+
limit: this.limit,
|
|
83
|
+
running: this.running,
|
|
84
|
+
queueLength: this.queue.length,
|
|
85
|
+
totalRequests: this.totalRequests,
|
|
86
|
+
completedRequests: this.completedRequests,
|
|
87
|
+
failedRequests: this.failedRequests,
|
|
88
|
+
queuedRequests: this.queuedRequests,
|
|
89
|
+
successRate: successRate,
|
|
90
|
+
peakConcurrency: this.peakConcurrency,
|
|
91
|
+
peakQueueLength: this.peakQueueLength,
|
|
92
|
+
averageQueueWaitTime: averageQueueWaitTime,
|
|
93
|
+
averageExecutionTime: averageExecutionTime,
|
|
94
|
+
utilizationPercentage: (this.running / this.limit) * 100
|
|
95
|
+
};
|
|
96
|
+
}
|
|
97
|
+
}
|
|
98
|
+
let globalConcurrencyLimiter = null;
|
|
99
|
+
export function getGlobalConcurrencyLimiter(limit) {
|
|
100
|
+
if (!globalConcurrencyLimiter && limit !== undefined) {
|
|
101
|
+
globalConcurrencyLimiter = new ConcurrencyLimiter(limit);
|
|
102
|
+
}
|
|
103
|
+
return globalConcurrencyLimiter;
|
|
104
|
+
}
|
|
105
|
+
export function resetGlobalConcurrencyLimiter() {
|
|
106
|
+
globalConcurrencyLimiter = null;
|
|
37
107
|
}
|
|
38
108
|
//# sourceMappingURL=concurrency-limiter.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"concurrency-limiter.js","sourceRoot":"","sources":["../../src/utilities/concurrency-limiter.ts"],"names":[],"mappings":"AAAA,MAAM,OAAO,kBAAkB;IACV,KAAK,CAAS;IACvB,OAAO,GAAW,CAAC,CAAC;IACX,KAAK,GAAsB,EAAE,CAAC;
|
|
1
|
+
{"version":3,"file":"concurrency-limiter.js","sourceRoot":"","sources":["../../src/utilities/concurrency-limiter.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"execute-branch-workflow.d.ts","sourceRoot":"","sources":["../../src/utilities/execute-branch-workflow.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"execute-branch-workflow.d.ts","sourceRoot":"","sources":["../../src/utilities/execute-branch-workflow.ts"],"names":[],"mappings":"AAKA,OAAO,EAGL,gCAAgC,EAGhC,qBAAqB,EAGtB,MAAM,mBAAmB,CAAC;AAE3B,wBAAsB,qBAAqB,CAAC,eAAe,GAAG,GAAG,EAAE,gBAAgB,GAAG,GAAG,EACvF,OAAO,EAAE,qBAAqB,CAAC,eAAe,EAAE,gBAAgB,CAAC,GAChE,OAAO,CAAC,gCAAgC,CAAC,gBAAgB,CAAC,CAAC,CA2oB7D"}
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import { executeNonLinearWorkflow } from './execute-non-linear-workflow.js';
|
|
2
2
|
import { executeWithPersistence } from './execute-with-persistence.js';
|
|
3
3
|
import { formatLogContext } from './format-log-context.js';
|
|
4
|
+
import { MetricsAggregator } from './metrics-aggregator.js';
|
|
4
5
|
import { PHASE_DECISION_ACTIONS } from '../enums/index.js';
|
|
5
6
|
export async function executeBranchWorkflow(context) {
|
|
6
7
|
const { branches, workflowId, commonGatewayOptions, requestGroups, logPhaseResults, handlePhaseCompletion, handlePhaseError = () => { }, handleBranchCompletion, handleBranchDecision, maxSerializableChars, workflowHookParams, sharedBuffer, stopOnFirstPhaseError, maxWorkflowIterations } = context;
|
|
@@ -55,6 +56,7 @@ export async function executeBranchWorkflow(context) {
|
|
|
55
56
|
phaseResults: result.phaseResults,
|
|
56
57
|
executionNumber
|
|
57
58
|
};
|
|
59
|
+
branchResult.metrics = MetricsAggregator.extractBranchMetrics(branchResult);
|
|
58
60
|
return {
|
|
59
61
|
branchResult,
|
|
60
62
|
phaseResults: result.phaseResults,
|
|
@@ -66,19 +68,21 @@ export async function executeBranchWorkflow(context) {
|
|
|
66
68
|
}
|
|
67
69
|
catch (error) {
|
|
68
70
|
console.error(`${formatLogContext({ workflowId })}stable-request: Branch ${branch.id} failed:`, error);
|
|
71
|
+
const errorBranchResult = {
|
|
72
|
+
workflowId,
|
|
73
|
+
branchId: branch.id,
|
|
74
|
+
branchIndex,
|
|
75
|
+
success: false,
|
|
76
|
+
executionTime: Date.now() - branchStartTime,
|
|
77
|
+
completedPhases: 0,
|
|
78
|
+
phaseResults: [],
|
|
79
|
+
executionNumber,
|
|
80
|
+
error: error?.message || 'Branch execution failed',
|
|
81
|
+
decision: undefined
|
|
82
|
+
};
|
|
83
|
+
errorBranchResult.metrics = MetricsAggregator.extractBranchMetrics(errorBranchResult);
|
|
69
84
|
return {
|
|
70
|
-
branchResult:
|
|
71
|
-
workflowId,
|
|
72
|
-
branchId: branch.id,
|
|
73
|
-
branchIndex,
|
|
74
|
-
success: false,
|
|
75
|
-
executionTime: Date.now() - branchStartTime,
|
|
76
|
-
completedPhases: 0,
|
|
77
|
-
phaseResults: [],
|
|
78
|
-
executionNumber,
|
|
79
|
-
error: error?.message || 'Branch execution failed',
|
|
80
|
-
decision: undefined
|
|
81
|
-
},
|
|
85
|
+
branchResult: errorBranchResult,
|
|
82
86
|
phaseResults: [],
|
|
83
87
|
executionHistory: [],
|
|
84
88
|
totalRequests: 0,
|
|
@@ -117,6 +121,7 @@ export async function executeBranchWorkflow(context) {
|
|
|
117
121
|
skipped: true,
|
|
118
122
|
error: `Exceeded max replay count of ${maxReplayCount}`
|
|
119
123
|
};
|
|
124
|
+
skippedResult.metrics = MetricsAggregator.extractBranchMetrics(skippedResult);
|
|
120
125
|
branchResults.push(skippedResult);
|
|
121
126
|
branchExecutionHistory.push({
|
|
122
127
|
branchId: currentBranchId,
|
|
@@ -261,6 +266,7 @@ export async function executeBranchWorkflow(context) {
|
|
|
261
266
|
executionNumber: 1,
|
|
262
267
|
skipped: true
|
|
263
268
|
};
|
|
269
|
+
skippedResult.metrics = MetricsAggregator.extractBranchMetrics(skippedResult);
|
|
264
270
|
branchResults.push(skippedResult);
|
|
265
271
|
branchExecutionHistory.push({
|
|
266
272
|
branchId: skippedBranch.id,
|