@fluyappgocore/commons-backend 1.0.202
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/build/classes/BacklogManager.d.ts +129 -0
- package/build/classes/BacklogManager.js +417 -0
- package/build/classes/BacklogMonitor.d.ts +102 -0
- package/build/classes/BacklogMonitor.js +222 -0
- package/build/classes/HttpResponse.d.ts +7 -0
- package/build/classes/HttpResponse.js +13 -0
- package/build/classes/index.d.ts +3 -0
- package/build/classes/index.js +15 -0
- package/build/dtos/file.dto.d.ts +5 -0
- package/build/dtos/file.dto.js +25 -0
- package/build/dtos/index.d.ts +1 -0
- package/build/dtos/index.js +13 -0
- package/build/events/BatchEnhancedListener.d.ts +106 -0
- package/build/events/BatchEnhancedListener.js +307 -0
- package/build/events/EnhancedListener.d.ts +75 -0
- package/build/events/EnhancedListener.js +185 -0
- package/build/events/baseListener.d.ts +19 -0
- package/build/events/baseListener.js +90 -0
- package/build/events/basePublisher.d.ts +14 -0
- package/build/events/basePublisher.js +84 -0
- package/build/events/config.d.ts +7 -0
- package/build/events/config.js +14 -0
- package/build/events/createClient.d.ts +38 -0
- package/build/events/createClient.js +416 -0
- package/build/events/index.d.ts +6 -0
- package/build/events/index.js +18 -0
- package/build/events/interfaces/agent.event.d.ts +7 -0
- package/build/events/interfaces/agent.event.js +2 -0
- package/build/events/interfaces/agentCrud.event.d.ts +7 -0
- package/build/events/interfaces/agentCrud.event.js +2 -0
- package/build/events/interfaces/agentTracking.event.d.ts +7 -0
- package/build/events/interfaces/agentTracking.event.js +2 -0
- package/build/events/interfaces/audit.event.d.ts +7 -0
- package/build/events/interfaces/audit.event.js +2 -0
- package/build/events/interfaces/branch.event.d.ts +7 -0
- package/build/events/interfaces/branch.event.js +2 -0
- package/build/events/interfaces/deleteTracking.event.d.ts +7 -0
- package/build/events/interfaces/deleteTracking.event.js +2 -0
- package/build/events/interfaces/department.event.d.ts +7 -0
- package/build/events/interfaces/department.event.js +2 -0
- package/build/events/interfaces/entity.event.d.ts +7 -0
- package/build/events/interfaces/entity.event.js +2 -0
- package/build/events/interfaces/index.d.ts +23 -0
- package/build/events/interfaces/index.js +35 -0
- package/build/events/interfaces/manualMatch.event.d.ts +7 -0
- package/build/events/interfaces/manualMatch.event.js +2 -0
- package/build/events/interfaces/match.event.d.ts +7 -0
- package/build/events/interfaces/match.event.js +2 -0
- package/build/events/interfaces/monitor.event.d.ts +7 -0
- package/build/events/interfaces/monitor.event.js +2 -0
- package/build/events/interfaces/notification.event.d.ts +7 -0
- package/build/events/interfaces/notification.event.js +2 -0
- package/build/events/interfaces/object.event.d.ts +7 -0
- package/build/events/interfaces/object.event.js +2 -0
- package/build/events/interfaces/payments.event.d.ts +7 -0
- package/build/events/interfaces/payments.event.js +2 -0
- package/build/events/interfaces/planning.event.d.ts +7 -0
- package/build/events/interfaces/planning.event.js +2 -0
- package/build/events/interfaces/service.event.d.ts +7 -0
- package/build/events/interfaces/service.event.js +2 -0
- package/build/events/interfaces/subscription.event.d.ts +7 -0
- package/build/events/interfaces/subscription.event.js +2 -0
- package/build/events/interfaces/ticket.event.d.ts +7 -0
- package/build/events/interfaces/ticket.event.js +2 -0
- package/build/events/interfaces/ticketNote.event.d.ts +7 -0
- package/build/events/interfaces/ticketNote.event.js +2 -0
- package/build/events/interfaces/ticketTracking.event.d.ts +7 -0
- package/build/events/interfaces/ticketTracking.event.js +2 -0
- package/build/events/interfaces/ticketxTopics.event.d.ts +7 -0
- package/build/events/interfaces/ticketxTopics.event.js +2 -0
- package/build/events/interfaces/topics.event.d.ts +7 -0
- package/build/events/interfaces/topics.event.js +2 -0
- package/build/events/interfaces/waitingList.event.d.ts +7 -0
- package/build/events/interfaces/waitingList.event.js +2 -0
- package/build/exceptions/AuthenticationTokenMissingException.d.ts +5 -0
- package/build/exceptions/AuthenticationTokenMissingException.js +27 -0
- package/build/exceptions/HttpException.d.ts +5 -0
- package/build/exceptions/HttpException.js +27 -0
- package/build/exceptions/MongoErrorException.d.ts +4 -0
- package/build/exceptions/MongoErrorException.js +27 -0
- package/build/exceptions/MulterException.d.ts +4 -0
- package/build/exceptions/MulterException.js +27 -0
- package/build/exceptions/QwizardException.d.ts +5 -0
- package/build/exceptions/QwizardException.js +27 -0
- package/build/exceptions/RecordingServerException.d.ts +5 -0
- package/build/exceptions/RecordingServerException.js +27 -0
- package/build/exceptions/UserNotFoundException.d.ts +4 -0
- package/build/exceptions/UserNotFoundException.js +27 -0
- package/build/exceptions/UserWithThatEmailAlreadyExistsException.d.ts +4 -0
- package/build/exceptions/UserWithThatEmailAlreadyExistsException.js +27 -0
- package/build/exceptions/WrongAnonymousAuthException.d.ts +5 -0
- package/build/exceptions/WrongAnonymousAuthException.js +27 -0
- package/build/exceptions/WrongAuthenticationTokenException.d.ts +5 -0
- package/build/exceptions/WrongAuthenticationTokenException.js +27 -0
- package/build/exceptions/WrongBusinessAuthException.d.ts +5 -0
- package/build/exceptions/WrongBusinessAuthException.js +27 -0
- package/build/exceptions/WrongCredentialsException.d.ts +4 -0
- package/build/exceptions/WrongCredentialsException.js +27 -0
- package/build/exceptions/WrongRoomException.d.ts +4 -0
- package/build/exceptions/WrongRoomException.js +27 -0
- package/build/exceptions/index.d.ts +16 -0
- package/build/exceptions/index.js +28 -0
- package/build/exceptions/invalidToken.exception.d.ts +4 -0
- package/build/exceptions/invalidToken.exception.js +27 -0
- package/build/exceptions/missingToken.exception.d.ts +4 -0
- package/build/exceptions/missingToken.exception.js +27 -0
- package/build/exceptions/wrongAuth.exception.d.ts +5 -0
- package/build/exceptions/wrongAuth.exception.js +27 -0
- package/build/index.d.ts +12 -0
- package/build/index.js +32 -0
- package/build/interfaces/controller.interface.d.ts +5 -0
- package/build/interfaces/controller.interface.js +2 -0
- package/build/interfaces/index.d.ts +3 -0
- package/build/interfaces/index.js +15 -0
- package/build/interfaces/requesWithUser.interface.d.ts +11 -0
- package/build/interfaces/requesWithUser.interface.js +2 -0
- package/build/interfaces/token.interface.d.ts +12 -0
- package/build/interfaces/token.interface.js +2 -0
- package/build/lib/ensureDatabase.d.ts +11 -0
- package/build/lib/ensureDatabase.js +97 -0
- package/build/lib/functions.d.ts +89 -0
- package/build/lib/functions.js +214 -0
- package/build/lib/helpers.d.ts +29 -0
- package/build/lib/helpers.js +33 -0
- package/build/lib/index.d.ts +4 -0
- package/build/lib/index.js +16 -0
- package/build/lib/logger.d.ts +2 -0
- package/build/lib/logger.js +41 -0
- package/build/middlewares/auth.middleware.d.ts +6 -0
- package/build/middlewares/auth.middleware.js +287 -0
- package/build/middlewares/error.middleware.d.ts +3 -0
- package/build/middlewares/error.middleware.js +14 -0
- package/build/middlewares/index.d.ts +3 -0
- package/build/middlewares/index.js +15 -0
- package/build/middlewares/validation.middleware.d.ts +2 -0
- package/build/middlewares/validation.middleware.js +22 -0
- package/package.json +45 -0
|
@@ -0,0 +1,222 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.BacklogMonitor = void 0;
|
|
4
|
+
var BacklogMonitor = /** @class */ (function () {
|
|
5
|
+
function BacklogMonitor() {
|
|
6
|
+
this.listeners = new Map();
|
|
7
|
+
}
|
|
8
|
+
BacklogMonitor.getInstance = function () {
|
|
9
|
+
if (!BacklogMonitor.instance) {
|
|
10
|
+
BacklogMonitor.instance = new BacklogMonitor();
|
|
11
|
+
}
|
|
12
|
+
return BacklogMonitor.instance;
|
|
13
|
+
};
|
|
14
|
+
/**
|
|
15
|
+
* Registra un listener para monitoreo (EnhancedListener o BatchEnhancedListener)
|
|
16
|
+
*/
|
|
17
|
+
BacklogMonitor.prototype.registerListener = function (listener) {
|
|
18
|
+
var key = listener.groupName + ":" + listener.topic;
|
|
19
|
+
this.listeners.set(key, listener);
|
|
20
|
+
console.log("\uD83D\uDCCB Registered listener for monitoring: " + key);
|
|
21
|
+
};
|
|
22
|
+
/**
|
|
23
|
+
* Desregistra un listener
|
|
24
|
+
*/
|
|
25
|
+
BacklogMonitor.prototype.unregisterListener = function (groupName, topic) {
|
|
26
|
+
var key = groupName + ":" + topic;
|
|
27
|
+
this.listeners.delete(key);
|
|
28
|
+
console.log("\uD83D\uDCCB Unregistered listener: " + key);
|
|
29
|
+
};
|
|
30
|
+
/**
|
|
31
|
+
* Obtiene estadÃsticas de un listener especÃfico
|
|
32
|
+
*/
|
|
33
|
+
BacklogMonitor.prototype.getListenerStats = function (groupName, topic) {
|
|
34
|
+
var key = groupName + ":" + topic;
|
|
35
|
+
var listener = this.listeners.get(key);
|
|
36
|
+
if (!listener) {
|
|
37
|
+
return null;
|
|
38
|
+
}
|
|
39
|
+
var stats = listener.getStats();
|
|
40
|
+
var successRate = stats.processed + stats.failed > 0
|
|
41
|
+
? (stats.processed / (stats.processed + stats.failed)) * 100
|
|
42
|
+
: 100;
|
|
43
|
+
return {
|
|
44
|
+
listenerName: stats.listenerName,
|
|
45
|
+
topic: stats.topic,
|
|
46
|
+
groupName: stats.groupName,
|
|
47
|
+
processed: stats.processed,
|
|
48
|
+
failed: stats.failed,
|
|
49
|
+
retries: stats.retries,
|
|
50
|
+
queueSize: stats.queueSize,
|
|
51
|
+
activeProcessing: stats.activeProcessing,
|
|
52
|
+
circuitBreakerOpen: stats.circuitBreakerOpen,
|
|
53
|
+
averageProcessingTime: stats.averageProcessingTime,
|
|
54
|
+
successRate: parseFloat(successRate.toFixed(2)),
|
|
55
|
+
lastProcessedAt: stats.lastProcessedAt,
|
|
56
|
+
config: stats.config
|
|
57
|
+
};
|
|
58
|
+
};
|
|
59
|
+
/**
|
|
60
|
+
* Obtiene estadÃsticas de todos los listeners
|
|
61
|
+
*/
|
|
62
|
+
BacklogMonitor.prototype.getAllListenersStats = function () {
|
|
63
|
+
var allStats = [];
|
|
64
|
+
Array.from(this.listeners.entries()).forEach(function (_a) {
|
|
65
|
+
var key = _a[0], listener = _a[1];
|
|
66
|
+
var stats = listener.getStats();
|
|
67
|
+
var successRate = stats.processed + stats.failed > 0
|
|
68
|
+
? (stats.processed / (stats.processed + stats.failed)) * 100
|
|
69
|
+
: 100;
|
|
70
|
+
allStats.push({
|
|
71
|
+
listenerName: stats.listenerName,
|
|
72
|
+
topic: stats.topic,
|
|
73
|
+
groupName: stats.groupName,
|
|
74
|
+
processed: stats.processed,
|
|
75
|
+
failed: stats.failed,
|
|
76
|
+
retries: stats.retries,
|
|
77
|
+
queueSize: stats.queueSize,
|
|
78
|
+
activeProcessing: stats.activeProcessing,
|
|
79
|
+
circuitBreakerOpen: stats.circuitBreakerOpen,
|
|
80
|
+
averageProcessingTime: stats.averageProcessingTime,
|
|
81
|
+
successRate: parseFloat(successRate.toFixed(2)),
|
|
82
|
+
lastProcessedAt: stats.lastProcessedAt,
|
|
83
|
+
config: stats.config
|
|
84
|
+
});
|
|
85
|
+
});
|
|
86
|
+
return allStats;
|
|
87
|
+
};
|
|
88
|
+
/**
|
|
89
|
+
* Obtiene estadÃsticas del sistema completo
|
|
90
|
+
*/
|
|
91
|
+
BacklogMonitor.prototype.getSystemStats = function () {
|
|
92
|
+
var allStats = this.getAllListenersStats();
|
|
93
|
+
var totalProcessed = allStats.reduce(function (sum, stats) { return sum + stats.processed; }, 0);
|
|
94
|
+
var totalFailed = allStats.reduce(function (sum, stats) { return sum + stats.failed; }, 0);
|
|
95
|
+
var totalRetries = allStats.reduce(function (sum, stats) { return sum + stats.retries; }, 0);
|
|
96
|
+
var totalQueueSize = allStats.reduce(function (sum, stats) { return sum + stats.queueSize; }, 0);
|
|
97
|
+
var totalActiveProcessing = allStats.reduce(function (sum, stats) { return sum + stats.activeProcessing; }, 0);
|
|
98
|
+
var circuitBreakersOpen = allStats.filter(function (stats) { return stats.circuitBreakerOpen; }).length;
|
|
99
|
+
var overallSuccessRate = totalProcessed + totalFailed > 0
|
|
100
|
+
? (totalProcessed / (totalProcessed + totalFailed)) * 100
|
|
101
|
+
: 100;
|
|
102
|
+
// Determinar salud del sistema
|
|
103
|
+
var systemHealth = 'healthy';
|
|
104
|
+
if (circuitBreakersOpen > 0 || overallSuccessRate < 90) {
|
|
105
|
+
systemHealth = 'degraded';
|
|
106
|
+
}
|
|
107
|
+
if (circuitBreakersOpen > allStats.length * 0.5 || overallSuccessRate < 70) {
|
|
108
|
+
systemHealth = 'critical';
|
|
109
|
+
}
|
|
110
|
+
return {
|
|
111
|
+
totalListeners: allStats.length,
|
|
112
|
+
activeListeners: allStats.filter(function (stats) { return stats.activeProcessing > 0 || stats.queueSize > 0; }).length,
|
|
113
|
+
totalProcessed: totalProcessed,
|
|
114
|
+
totalFailed: totalFailed,
|
|
115
|
+
totalRetries: totalRetries,
|
|
116
|
+
totalQueueSize: totalQueueSize,
|
|
117
|
+
totalActiveProcessing: totalActiveProcessing,
|
|
118
|
+
circuitBreakersOpen: circuitBreakersOpen,
|
|
119
|
+
overallSuccessRate: parseFloat(overallSuccessRate.toFixed(2)),
|
|
120
|
+
systemHealth: systemHealth
|
|
121
|
+
};
|
|
122
|
+
};
|
|
123
|
+
/**
|
|
124
|
+
* Actualiza configuración de un listener especÃfico
|
|
125
|
+
*/
|
|
126
|
+
BacklogMonitor.prototype.updateListenerConfig = function (groupName, topic, newConfig) {
|
|
127
|
+
var key = groupName + ":" + topic;
|
|
128
|
+
var listener = this.listeners.get(key);
|
|
129
|
+
if (!listener) {
|
|
130
|
+
return false;
|
|
131
|
+
}
|
|
132
|
+
listener.updateBacklogConfig(newConfig);
|
|
133
|
+
return true;
|
|
134
|
+
};
|
|
135
|
+
/**
|
|
136
|
+
* Actualiza configuración de todos los listeners
|
|
137
|
+
*/
|
|
138
|
+
BacklogMonitor.prototype.updateAllListenersConfig = function (newConfig) {
|
|
139
|
+
var updated = 0;
|
|
140
|
+
Array.from(this.listeners.entries()).forEach(function (_a) {
|
|
141
|
+
var key = _a[0], listener = _a[1];
|
|
142
|
+
listener.updateBacklogConfig(newConfig);
|
|
143
|
+
updated++;
|
|
144
|
+
});
|
|
145
|
+
console.log("\uD83D\uDD27 Updated config for " + updated + " listeners");
|
|
146
|
+
return updated;
|
|
147
|
+
};
|
|
148
|
+
/**
|
|
149
|
+
* Resetea estadÃsticas de un listener especÃfico
|
|
150
|
+
*/
|
|
151
|
+
BacklogMonitor.prototype.resetListenerStats = function (groupName, topic) {
|
|
152
|
+
var key = groupName + ":" + topic;
|
|
153
|
+
var listener = this.listeners.get(key);
|
|
154
|
+
if (!listener) {
|
|
155
|
+
return false;
|
|
156
|
+
}
|
|
157
|
+
listener.resetStats();
|
|
158
|
+
return true;
|
|
159
|
+
};
|
|
160
|
+
/**
|
|
161
|
+
* Resetea estadÃsticas de todos los listeners
|
|
162
|
+
*/
|
|
163
|
+
BacklogMonitor.prototype.resetAllStats = function () {
|
|
164
|
+
var reset = 0;
|
|
165
|
+
Array.from(this.listeners.entries()).forEach(function (_a) {
|
|
166
|
+
var key = _a[0], listener = _a[1];
|
|
167
|
+
listener.resetStats();
|
|
168
|
+
reset++;
|
|
169
|
+
});
|
|
170
|
+
console.log("\uD83D\uDD04 Reset stats for " + reset + " listeners");
|
|
171
|
+
return reset;
|
|
172
|
+
};
|
|
173
|
+
/**
|
|
174
|
+
* Fuerza circuit breaker para un listener especÃfico
|
|
175
|
+
*/
|
|
176
|
+
BacklogMonitor.prototype.forceCircuitBreaker = function (groupName, topic, open) {
|
|
177
|
+
var key = groupName + ":" + topic;
|
|
178
|
+
var listener = this.listeners.get(key);
|
|
179
|
+
if (!listener) {
|
|
180
|
+
return false;
|
|
181
|
+
}
|
|
182
|
+
listener.forceCircuitBreaker(open);
|
|
183
|
+
return true;
|
|
184
|
+
};
|
|
185
|
+
/**
|
|
186
|
+
* Obtiene resumen de salud del sistema
|
|
187
|
+
*/
|
|
188
|
+
BacklogMonitor.prototype.getHealthSummary = function () {
|
|
189
|
+
var systemStats = this.getSystemStats();
|
|
190
|
+
var problematicListeners = this.getAllListenersStats()
|
|
191
|
+
.filter(function (stats) { return stats.circuitBreakerOpen || stats.successRate < 90; });
|
|
192
|
+
var message = '';
|
|
193
|
+
var status = systemStats.systemHealth;
|
|
194
|
+
switch (systemStats.systemHealth) {
|
|
195
|
+
case 'healthy':
|
|
196
|
+
message = 'All listeners operating normally';
|
|
197
|
+
break;
|
|
198
|
+
case 'degraded':
|
|
199
|
+
message = problematicListeners.length + " listener(s) experiencing issues";
|
|
200
|
+
break;
|
|
201
|
+
case 'critical':
|
|
202
|
+
message = "System critical: " + systemStats.circuitBreakersOpen + " circuit breakers open";
|
|
203
|
+
break;
|
|
204
|
+
}
|
|
205
|
+
return {
|
|
206
|
+
status: status,
|
|
207
|
+
message: message,
|
|
208
|
+
details: {
|
|
209
|
+
systemStats: systemStats,
|
|
210
|
+
problematicListeners: problematicListeners.map(function (l) { return ({
|
|
211
|
+
name: l.listenerName,
|
|
212
|
+
topic: l.topic,
|
|
213
|
+
successRate: l.successRate,
|
|
214
|
+
circuitBreakerOpen: l.circuitBreakerOpen,
|
|
215
|
+
queueSize: l.queueSize
|
|
216
|
+
}); })
|
|
217
|
+
}
|
|
218
|
+
};
|
|
219
|
+
};
|
|
220
|
+
return BacklogMonitor;
|
|
221
|
+
}());
|
|
222
|
+
exports.BacklogMonitor = BacklogMonitor;
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.HttpResponse = void 0;
|
|
4
|
+
var HttpResponse = /** @class */ (function () {
|
|
5
|
+
function HttpResponse(code, data, metadata, message) {
|
|
6
|
+
this.code = code;
|
|
7
|
+
this.data = data;
|
|
8
|
+
this.metadata = metadata;
|
|
9
|
+
this.message = message;
|
|
10
|
+
}
|
|
11
|
+
return HttpResponse;
|
|
12
|
+
}());
|
|
13
|
+
exports.HttpResponse = HttpResponse;
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });
|
|
5
|
+
}) : (function(o, m, k, k2) {
|
|
6
|
+
if (k2 === undefined) k2 = k;
|
|
7
|
+
o[k2] = m[k];
|
|
8
|
+
}));
|
|
9
|
+
var __exportStar = (this && this.__exportStar) || function(m, exports) {
|
|
10
|
+
for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
|
|
11
|
+
};
|
|
12
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
13
|
+
__exportStar(require("./HttpResponse"), exports);
|
|
14
|
+
__exportStar(require("./BacklogManager"), exports);
|
|
15
|
+
__exportStar(require("./BacklogMonitor"), exports);
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
|
|
3
|
+
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
|
4
|
+
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
|
|
5
|
+
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
|
|
6
|
+
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
7
|
+
};
|
|
8
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
9
|
+
exports.FileDTO = void 0;
|
|
10
|
+
var class_validator_1 = require("class-validator");
|
|
11
|
+
var FileDTO = /** @class */ (function () {
|
|
12
|
+
function FileDTO() {
|
|
13
|
+
}
|
|
14
|
+
__decorate([
|
|
15
|
+
class_validator_1.IsString()
|
|
16
|
+
], FileDTO.prototype, "Key", void 0);
|
|
17
|
+
__decorate([
|
|
18
|
+
class_validator_1.IsString()
|
|
19
|
+
], FileDTO.prototype, "ContentType", void 0);
|
|
20
|
+
__decorate([
|
|
21
|
+
class_validator_1.IsString()
|
|
22
|
+
], FileDTO.prototype, "folder", void 0);
|
|
23
|
+
return FileDTO;
|
|
24
|
+
}());
|
|
25
|
+
exports.FileDTO = FileDTO;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export * from './file.dto';
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });
|
|
5
|
+
}) : (function(o, m, k, k2) {
|
|
6
|
+
if (k2 === undefined) k2 = k;
|
|
7
|
+
o[k2] = m[k];
|
|
8
|
+
}));
|
|
9
|
+
var __exportStar = (this && this.__exportStar) || function(m, exports) {
|
|
10
|
+
for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
|
|
11
|
+
};
|
|
12
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
13
|
+
__exportStar(require("./file.dto"), exports);
|
|
@@ -0,0 +1,106 @@
|
|
|
1
|
+
import { KafkaMessage } from "kafkajs";
|
|
2
|
+
import { TicketTopics, AgentTopics, EntityTreeTopics, AgentCrudTopics, MatchTopics, TicketTrackingTopics, AgentTrackingTopics, ManualMatchTopics, MonitorTopics, UserTopics, DeleteTrackingTopics, AuditTopics, NotificationTopics, TicketNoteTopics, TopicsTopics, TicketxTopicsTopics, DeviceTopics, PlanningTopics, WaitingTopics, PaymentsTopics, SubscriptionTopics } from "@fluyappgo/commons";
|
|
3
|
+
import { BacklogManager, CircuitBreakerCallback } from "../classes/BacklogManager";
|
|
4
|
+
import { MonitorableListener } from "../classes/BacklogMonitor";
|
|
5
|
+
interface Event {
|
|
6
|
+
topic: TicketTopics | AgentTopics | EntityTreeTopics | AgentCrudTopics | MatchTopics | TicketTrackingTopics | AgentTrackingTopics | ManualMatchTopics | MonitorTopics | UserTopics | DeleteTrackingTopics | AuditTopics | NotificationTopics | TicketNoteTopics | TopicsTopics | TicketxTopicsTopics | DeviceTopics | PlanningTopics | WaitingTopics | PaymentsTopics | SubscriptionTopics;
|
|
7
|
+
data: any;
|
|
8
|
+
keyKafka: number;
|
|
9
|
+
groupName: string;
|
|
10
|
+
}
|
|
11
|
+
/**
|
|
12
|
+
* 🔥 BULLETPROOF: BatchEnhancedListener con control de flujo real en la entrada
|
|
13
|
+
*
|
|
14
|
+
* DIFERENCIAS CLAVE vs EnhancedListener:
|
|
15
|
+
* ✅ Control de flujo en la ENTRADA del consumer (eachBatch)
|
|
16
|
+
* ✅ NUNCA más mensajes en memoria de los que puede procesar
|
|
17
|
+
* ✅ Pausa automática cuando BacklogManager está saturado
|
|
18
|
+
* ✅ Resolución manual de offsets para mejor control de errores
|
|
19
|
+
* ✅ Heartbeat automático para mantener conexión viva
|
|
20
|
+
*/
|
|
21
|
+
export declare abstract class BatchEnhancedListener<T extends Event> implements MonitorableListener {
|
|
22
|
+
abstract topic: T["topic"];
|
|
23
|
+
abstract groupName: string;
|
|
24
|
+
protected client: any;
|
|
25
|
+
protected backlogManager: BacklogManager;
|
|
26
|
+
protected listenerName: string;
|
|
27
|
+
protected batchConfig: {
|
|
28
|
+
maxBytesPerPartition: number;
|
|
29
|
+
maxBytes: number;
|
|
30
|
+
};
|
|
31
|
+
abstract processMessage(data: T["data"], msg: KafkaMessage): Promise<void>;
|
|
32
|
+
constructor(client: any, listenerName: string, backlogConfig?: any, batchConfig?: {
|
|
33
|
+
maxBytesPerPartition?: number;
|
|
34
|
+
maxBytes?: number;
|
|
35
|
+
});
|
|
36
|
+
/**
|
|
37
|
+
* Configuración por defecto que puede ser sobrescrita por cada listener
|
|
38
|
+
*/
|
|
39
|
+
protected getDefaultBacklogConfig(): {
|
|
40
|
+
maxConcurrent: number;
|
|
41
|
+
rateLimitMs: number;
|
|
42
|
+
circuitBreakerThreshold: number;
|
|
43
|
+
circuitBreakerResetTime: number;
|
|
44
|
+
maxRetries: number;
|
|
45
|
+
backlogRecoveryBatchSize: number;
|
|
46
|
+
enableBacklogRecovery: boolean;
|
|
47
|
+
};
|
|
48
|
+
/**
|
|
49
|
+
* 🔥 BULLETPROOF: Listen usando eachBatch con control de flujo real
|
|
50
|
+
*/
|
|
51
|
+
listen(fromBeginning: boolean): void;
|
|
52
|
+
/**
|
|
53
|
+
* 🔥 BULLETPROOF: Procesa batch con control de flujo real
|
|
54
|
+
*/
|
|
55
|
+
private processBatch;
|
|
56
|
+
/**
|
|
57
|
+
* Parse message helper
|
|
58
|
+
*/
|
|
59
|
+
private parseMessage;
|
|
60
|
+
/**
|
|
61
|
+
* Log de estadÃsticas del BacklogManager
|
|
62
|
+
*/
|
|
63
|
+
private logStats;
|
|
64
|
+
/**
|
|
65
|
+
* Obtener estadÃsticas del listener
|
|
66
|
+
*/
|
|
67
|
+
getStats(): {
|
|
68
|
+
availableCapacity: number;
|
|
69
|
+
isAtMaxCapacity: boolean;
|
|
70
|
+
processed: number;
|
|
71
|
+
failed: number;
|
|
72
|
+
retries: number;
|
|
73
|
+
circuitBreakerTrips: number;
|
|
74
|
+
lastProcessedAt: Date;
|
|
75
|
+
averageProcessingTime: number;
|
|
76
|
+
queueSize: number;
|
|
77
|
+
activeProcessing: number;
|
|
78
|
+
circuitBreakerOpen: boolean;
|
|
79
|
+
config: import("../classes/BacklogManager").BacklogConfig;
|
|
80
|
+
listenerName: string;
|
|
81
|
+
topic: T["topic"];
|
|
82
|
+
groupName: string;
|
|
83
|
+
};
|
|
84
|
+
/**
|
|
85
|
+
* Actualizar configuración del BacklogManager en tiempo real
|
|
86
|
+
*/
|
|
87
|
+
updateBacklogConfig(newConfig: any): void;
|
|
88
|
+
/**
|
|
89
|
+
* Resetear estadÃsticas
|
|
90
|
+
*/
|
|
91
|
+
resetStats(): void;
|
|
92
|
+
/**
|
|
93
|
+
* Forzar circuit breaker (para debugging)
|
|
94
|
+
*/
|
|
95
|
+
forceCircuitBreaker(open: boolean): void;
|
|
96
|
+
/**
|
|
97
|
+
* Registra un callback para cambios de estado del circuit breaker
|
|
98
|
+
* @param callback Función que se ejecuta cuando cambia el estado del circuit breaker
|
|
99
|
+
*/
|
|
100
|
+
onCircuitBreakerStateChange(callback: CircuitBreakerCallback): void;
|
|
101
|
+
/**
|
|
102
|
+
* Obtiene el nombre del listener
|
|
103
|
+
*/
|
|
104
|
+
getListenerName(): string;
|
|
105
|
+
}
|
|
106
|
+
export {};
|