solver-sdk 2.7.3 → 2.7.5
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/dist/cjs/api/chat-api/index.js +53 -58
- package/dist/cjs/api/chat-api/index.js.map +1 -1
- package/dist/cjs/api/chat-api/stream-utils.js +126 -12
- package/dist/cjs/api/chat-api/stream-utils.js.map +1 -1
- package/dist/cjs/api/projects-api.js +83 -4
- package/dist/cjs/api/projects-api.js.map +1 -1
- package/dist/cjs/utils/code-solver-websocket-client.js +0 -48
- package/dist/cjs/utils/code-solver-websocket-client.js.map +1 -1
- package/dist/cjs/utils/simple-connection-monitor.js +52 -0
- package/dist/cjs/utils/simple-connection-monitor.js.map +1 -0
- package/dist/cjs/ws/base-ws-client.js +8 -14
- package/dist/cjs/ws/base-ws-client.js.map +1 -1
- package/dist/cjs/ws/indexing-ws-client.js +46 -0
- package/dist/cjs/ws/indexing-ws-client.js.map +1 -1
- package/dist/esm/api/chat-api/index.js +54 -59
- package/dist/esm/api/chat-api/index.js.map +1 -1
- package/dist/esm/api/chat-api/stream-utils.js +126 -12
- package/dist/esm/api/chat-api/stream-utils.js.map +1 -1
- package/dist/esm/api/projects-api.js +83 -4
- package/dist/esm/api/projects-api.js.map +1 -1
- package/dist/esm/utils/code-solver-websocket-client.js +0 -48
- package/dist/esm/utils/code-solver-websocket-client.js.map +1 -1
- package/dist/esm/utils/simple-connection-monitor.js +48 -0
- package/dist/esm/utils/simple-connection-monitor.js.map +1 -0
- package/dist/esm/ws/base-ws-client.js +8 -14
- package/dist/esm/ws/base-ws-client.js.map +1 -1
- package/dist/esm/ws/indexing-ws-client.js +46 -0
- package/dist/esm/ws/indexing-ws-client.js.map +1 -1
- package/dist/types/api/chat-api/index.d.ts.map +1 -1
- package/dist/types/api/chat-api/models.d.ts +4 -2
- package/dist/types/api/chat-api/models.d.ts.map +1 -1
- package/dist/types/api/chat-api/stream-utils.d.ts.map +1 -1
- package/dist/types/api/projects-api.d.ts +18 -0
- package/dist/types/api/projects-api.d.ts.map +1 -1
- package/dist/types/utils/code-solver-websocket-client.d.ts +0 -7
- package/dist/types/utils/code-solver-websocket-client.d.ts.map +1 -1
- package/dist/types/utils/simple-connection-monitor.d.ts +26 -0
- package/dist/types/utils/simple-connection-monitor.d.ts.map +1 -0
- package/dist/types/ws/base-ws-client.d.ts +3 -3
- package/dist/types/ws/base-ws-client.d.ts.map +1 -1
- package/dist/types/ws/indexing-ws-client.d.ts +16 -0
- package/dist/types/ws/indexing-ws-client.d.ts.map +1 -1
- package/package.json +1 -1
- package/dist/cjs/interfaces/websocket/stats.interfaces.js +0 -3
- package/dist/cjs/interfaces/websocket/stats.interfaces.js.map +0 -1
- package/dist/cjs/utils/ping-pong-manager.js +0 -306
- package/dist/cjs/utils/ping-pong-manager.js.map +0 -1
- package/dist/cjs/ws/diagnostics-service.js +0 -170
- package/dist/cjs/ws/diagnostics-service.js.map +0 -1
- package/dist/esm/interfaces/websocket/stats.interfaces.js +0 -2
- package/dist/esm/interfaces/websocket/stats.interfaces.js.map +0 -1
- package/dist/esm/utils/ping-pong-manager.js +0 -302
- package/dist/esm/utils/ping-pong-manager.js.map +0 -1
- package/dist/esm/ws/diagnostics-service.js +0 -166
- package/dist/esm/ws/diagnostics-service.js.map +0 -1
- package/dist/types/interfaces/websocket/stats.interfaces.d.ts +0 -72
- package/dist/types/interfaces/websocket/stats.interfaces.d.ts.map +0 -1
- package/dist/types/utils/ping-pong-manager.d.ts +0 -118
- package/dist/types/utils/ping-pong-manager.d.ts.map +0 -1
- package/dist/types/ws/diagnostics-service.d.ts +0 -93
- package/dist/types/ws/diagnostics-service.d.ts.map +0 -1
|
@@ -1,306 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.PingPongManager = void 0;
|
|
4
|
-
const logger_js_1 = require("./logger.js");
|
|
5
|
-
const websocket_events_constants_js_1 = require("../constants/websocket-events.constants.js");
|
|
6
|
-
/**
|
|
7
|
-
* Класс для управления механизмом ping/pong
|
|
8
|
-
*/
|
|
9
|
-
class PingPongManager {
|
|
10
|
-
/**
|
|
11
|
-
* Создает новый менеджер ping/pong
|
|
12
|
-
* @param {PingPongManagerOptions} options Опции менеджера ping/pong
|
|
13
|
-
*/
|
|
14
|
-
constructor(options = {}) {
|
|
15
|
-
/** Таймеры для ping/pong */
|
|
16
|
-
this.pingIntervals = new Map();
|
|
17
|
-
/** Статистика ping/pong */
|
|
18
|
-
this.pingStats = new Map();
|
|
19
|
-
/** Количество последовательных таймаутов */
|
|
20
|
-
this.pingTimeouts = new Map();
|
|
21
|
-
/** Хранилище обработчиков ping/pong */
|
|
22
|
-
this.pingPongEventHandlers = new Map();
|
|
23
|
-
/** Клиенты WebSocket по namespace */
|
|
24
|
-
this.clients = new Map();
|
|
25
|
-
this.pingInterval = options.pingInterval || 30000;
|
|
26
|
-
this.pingTimeoutThreshold = options.pingTimeoutThreshold || 3;
|
|
27
|
-
this.logger = options.logger || (0, logger_js_1.createWebSocketLogger)('PingPongManager');
|
|
28
|
-
}
|
|
29
|
-
/**
|
|
30
|
-
* Регистрирует WebSocket клиент для указанного пространства имен
|
|
31
|
-
* @param {WebSocketNamespace} namespace Пространство имен
|
|
32
|
-
* @param {WebSocketClient} client WebSocket клиент
|
|
33
|
-
*/
|
|
34
|
-
registerClient(namespace, client) {
|
|
35
|
-
this.clients.set(namespace, client);
|
|
36
|
-
// Инициализируем статистику для namespace
|
|
37
|
-
if (!this.pingStats.has(namespace)) {
|
|
38
|
-
this.pingStats.set(namespace, {
|
|
39
|
-
namespace,
|
|
40
|
-
socketId: client.getSocketId(),
|
|
41
|
-
pingSent: 0,
|
|
42
|
-
pongReceived: 0,
|
|
43
|
-
averageRtt: 0,
|
|
44
|
-
minRtt: Number.MAX_SAFE_INTEGER,
|
|
45
|
-
maxRtt: 0,
|
|
46
|
-
lastRtt: 0,
|
|
47
|
-
lastPongTimestamp: 0,
|
|
48
|
-
isConnected: client.isConnected()
|
|
49
|
-
});
|
|
50
|
-
}
|
|
51
|
-
// Сбрасываем счетчик таймаутов
|
|
52
|
-
this.pingTimeouts.set(namespace, 0);
|
|
53
|
-
// Устанавливаем обработчик для события connection_pong
|
|
54
|
-
client.on(websocket_events_constants_js_1.WebSocketEvents.CONNECTION_PONG, this.createPongHandler(namespace));
|
|
55
|
-
this.logger.debug(`Зарегистрирован клиент для ${namespace}`, {
|
|
56
|
-
socketId: client.getSocketId()
|
|
57
|
-
});
|
|
58
|
-
}
|
|
59
|
-
/**
|
|
60
|
-
* Удаляет регистрацию WebSocket клиента для указанного пространства имен
|
|
61
|
-
* @param {WebSocketNamespace} namespace Пространство имен
|
|
62
|
-
*/
|
|
63
|
-
unregisterClient(namespace) {
|
|
64
|
-
this.clients.delete(namespace);
|
|
65
|
-
this.logger.debug(`Удалена регистрация клиента для ${namespace}`);
|
|
66
|
-
}
|
|
67
|
-
/**
|
|
68
|
-
* Создает обработчик для события pong
|
|
69
|
-
* @param {WebSocketNamespace} namespace Пространство имен
|
|
70
|
-
* @returns {PingPongEventHandler} Обработчик события pong
|
|
71
|
-
*/
|
|
72
|
-
createPongHandler(namespace) {
|
|
73
|
-
return (data) => {
|
|
74
|
-
// Обновляем статистику
|
|
75
|
-
const stats = this.pingStats.get(namespace);
|
|
76
|
-
if (stats) {
|
|
77
|
-
stats.pongReceived++;
|
|
78
|
-
stats.lastPongTimestamp = Date.now();
|
|
79
|
-
// Рассчитываем RTT, если есть метка времени эхо
|
|
80
|
-
if (data && data.echo) {
|
|
81
|
-
const rtt = Date.now() - data.echo;
|
|
82
|
-
stats.lastRtt = rtt;
|
|
83
|
-
// Обновляем min и max
|
|
84
|
-
stats.minRtt = Math.min(stats.minRtt, rtt);
|
|
85
|
-
stats.maxRtt = Math.max(stats.maxRtt, rtt);
|
|
86
|
-
// Обновляем среднее значение
|
|
87
|
-
stats.averageRtt = (stats.averageRtt * (stats.pongReceived - 1) + rtt) / stats.pongReceived;
|
|
88
|
-
}
|
|
89
|
-
// Сбрасываем счетчик таймаутов
|
|
90
|
-
this.pingTimeouts.set(namespace, 0);
|
|
91
|
-
// Обновляем ID сокета, если он изменился
|
|
92
|
-
const client = this.clients.get(namespace);
|
|
93
|
-
if (client) {
|
|
94
|
-
stats.socketId = client.getSocketId();
|
|
95
|
-
stats.isConnected = client.isConnected();
|
|
96
|
-
}
|
|
97
|
-
}
|
|
98
|
-
// Логируем получение pong
|
|
99
|
-
this.logger.debug(`Получен pong для ${namespace}`, {
|
|
100
|
-
rtt: stats?.lastRtt,
|
|
101
|
-
socketId: stats?.socketId
|
|
102
|
-
});
|
|
103
|
-
// Вызываем обработчики событий
|
|
104
|
-
this.notifyEventHandlers('connection_pong', {
|
|
105
|
-
namespace,
|
|
106
|
-
timestamp: Date.now(),
|
|
107
|
-
rtt: stats?.lastRtt,
|
|
108
|
-
socketId: stats?.socketId
|
|
109
|
-
});
|
|
110
|
-
};
|
|
111
|
-
}
|
|
112
|
-
/**
|
|
113
|
-
* Уведомляет обработчики о событии
|
|
114
|
-
* @param {string} eventType Тип события
|
|
115
|
-
* @param {any} data Данные события
|
|
116
|
-
*/
|
|
117
|
-
notifyEventHandlers(eventType, data) {
|
|
118
|
-
const handlers = this.pingPongEventHandlers.get(eventType) || [];
|
|
119
|
-
for (const handler of handlers) {
|
|
120
|
-
try {
|
|
121
|
-
handler(data);
|
|
122
|
-
}
|
|
123
|
-
catch (error) {
|
|
124
|
-
this.logger.error(`Ошибка в обработчике события ${eventType}`, error);
|
|
125
|
-
}
|
|
126
|
-
}
|
|
127
|
-
}
|
|
128
|
-
/**
|
|
129
|
-
* Включает автоматическую отправку ping-сообщений
|
|
130
|
-
* @param {WebSocketNamespace} namespace Пространство имен
|
|
131
|
-
* @returns {boolean} true, если механизм успешно включен
|
|
132
|
-
*/
|
|
133
|
-
enablePingPong(namespace) {
|
|
134
|
-
const client = this.clients.get(namespace);
|
|
135
|
-
if (!client || !client.isConnected()) {
|
|
136
|
-
this.logger.warn(`Невозможно включить ping/pong для неактивного соединения в ${namespace}`);
|
|
137
|
-
return false;
|
|
138
|
-
}
|
|
139
|
-
// Останавливаем существующий таймер, если есть
|
|
140
|
-
this.disablePingPong(namespace);
|
|
141
|
-
// Инициализируем статистику, если не была создана
|
|
142
|
-
if (!this.pingStats.has(namespace)) {
|
|
143
|
-
this.pingStats.set(namespace, {
|
|
144
|
-
namespace,
|
|
145
|
-
socketId: client.getSocketId(),
|
|
146
|
-
pingSent: 0,
|
|
147
|
-
pongReceived: 0,
|
|
148
|
-
averageRtt: 0,
|
|
149
|
-
minRtt: Number.MAX_SAFE_INTEGER,
|
|
150
|
-
maxRtt: 0,
|
|
151
|
-
lastRtt: 0,
|
|
152
|
-
lastPongTimestamp: 0,
|
|
153
|
-
isConnected: client.isConnected()
|
|
154
|
-
});
|
|
155
|
-
}
|
|
156
|
-
// Сбрасываем счетчик таймаутов
|
|
157
|
-
this.pingTimeouts.set(namespace, 0);
|
|
158
|
-
// Устанавливаем интервал отправки ping
|
|
159
|
-
const pingInterval = setInterval(() => {
|
|
160
|
-
const currentClient = this.clients.get(namespace);
|
|
161
|
-
if (!currentClient || !currentClient.isConnected()) {
|
|
162
|
-
this.disablePingPong(namespace);
|
|
163
|
-
return;
|
|
164
|
-
}
|
|
165
|
-
// Формируем данные ping
|
|
166
|
-
const pingData = {
|
|
167
|
-
timestamp: Date.now(),
|
|
168
|
-
echo: Date.now()
|
|
169
|
-
};
|
|
170
|
-
// Отправляем ping
|
|
171
|
-
const sent = currentClient.send({
|
|
172
|
-
event: websocket_events_constants_js_1.WebSocketEvents.CONNECTION_PING,
|
|
173
|
-
data: pingData
|
|
174
|
-
});
|
|
175
|
-
// Если успешно отправлено, обновляем статистику
|
|
176
|
-
if (sent) {
|
|
177
|
-
const stats = this.pingStats.get(namespace);
|
|
178
|
-
if (stats) {
|
|
179
|
-
stats.pingSent++;
|
|
180
|
-
}
|
|
181
|
-
this.logger.debug(`Отправлен ping для ${namespace}`, pingData);
|
|
182
|
-
}
|
|
183
|
-
else {
|
|
184
|
-
this.logger.warn(`Не удалось отправить ping для ${namespace}`);
|
|
185
|
-
}
|
|
186
|
-
// Проверяем таймаут
|
|
187
|
-
this.checkPingTimeout(namespace);
|
|
188
|
-
}, this.pingInterval);
|
|
189
|
-
// Сохраняем интервал
|
|
190
|
-
this.pingIntervals.set(namespace, pingInterval);
|
|
191
|
-
this.logger.info(`Включен механизм ping/pong для ${namespace} с интервалом ${this.pingInterval}ms`);
|
|
192
|
-
return true;
|
|
193
|
-
}
|
|
194
|
-
/**
|
|
195
|
-
* Проверяет таймаут для ping/pong
|
|
196
|
-
* @param {WebSocketNamespace} namespace Пространство имен
|
|
197
|
-
*/
|
|
198
|
-
checkPingTimeout(namespace) {
|
|
199
|
-
const timeouts = this.pingTimeouts.get(namespace) || 0;
|
|
200
|
-
const stats = this.pingStats.get(namespace);
|
|
201
|
-
if (!stats)
|
|
202
|
-
return;
|
|
203
|
-
// Если разница между отправленными и полученными превышает порог,
|
|
204
|
-
// или последний pong был получен слишком давно
|
|
205
|
-
if ((stats.pingSent - stats.pongReceived > this.pingTimeoutThreshold) ||
|
|
206
|
-
(Date.now() - stats.lastPongTimestamp > this.pingInterval * this.pingTimeoutThreshold)) {
|
|
207
|
-
// Увеличиваем счетчик таймаутов
|
|
208
|
-
this.pingTimeouts.set(namespace, timeouts + 1);
|
|
209
|
-
if (timeouts + 1 >= this.pingTimeoutThreshold) {
|
|
210
|
-
// Соединение потеряно
|
|
211
|
-
this.logger.error(`Соединение потеряно (таймаут ping/pong) для ${namespace}`);
|
|
212
|
-
// Установка флага неактивного соединения
|
|
213
|
-
stats.isConnected = false;
|
|
214
|
-
// Уведомляем о таймауте соединения
|
|
215
|
-
this.notifyEventHandlers('connection_timeout', {
|
|
216
|
-
namespace,
|
|
217
|
-
socketId: stats.socketId,
|
|
218
|
-
timeouts: timeouts + 1,
|
|
219
|
-
threshold: this.pingTimeoutThreshold
|
|
220
|
-
});
|
|
221
|
-
}
|
|
222
|
-
}
|
|
223
|
-
}
|
|
224
|
-
/**
|
|
225
|
-
* Отключает автоматическую отправку ping-сообщений
|
|
226
|
-
* @param {WebSocketNamespace} namespace Пространство имен
|
|
227
|
-
*/
|
|
228
|
-
disablePingPong(namespace) {
|
|
229
|
-
const interval = this.pingIntervals.get(namespace);
|
|
230
|
-
if (interval) {
|
|
231
|
-
clearInterval(interval);
|
|
232
|
-
this.pingIntervals.delete(namespace);
|
|
233
|
-
this.logger.info(`Отключен механизм ping/pong для ${namespace}`);
|
|
234
|
-
}
|
|
235
|
-
}
|
|
236
|
-
/**
|
|
237
|
-
* Отключает автоматическую отправку ping-сообщений для всех пространств имен
|
|
238
|
-
*/
|
|
239
|
-
disablePingPongAll() {
|
|
240
|
-
for (const [namespace, interval] of this.pingIntervals.entries()) {
|
|
241
|
-
clearInterval(interval);
|
|
242
|
-
this.pingIntervals.delete(namespace);
|
|
243
|
-
this.logger.info(`Отключен механизм ping/pong для ${namespace}`);
|
|
244
|
-
}
|
|
245
|
-
}
|
|
246
|
-
/**
|
|
247
|
-
* Получает статистику ping/pong для указанного пространства имен
|
|
248
|
-
* @param {WebSocketNamespace} namespace Пространство имен
|
|
249
|
-
* @returns {PingPongStats | null} Статистика ping/pong
|
|
250
|
-
*/
|
|
251
|
-
getPingStats(namespace) {
|
|
252
|
-
return this.pingStats.get(namespace) || null;
|
|
253
|
-
}
|
|
254
|
-
/**
|
|
255
|
-
* Получает статистику ping/pong для всех пространств имен
|
|
256
|
-
* @returns {PingPongStats[]} Массив статистики ping/pong
|
|
257
|
-
*/
|
|
258
|
-
getAllPingStats() {
|
|
259
|
-
return Array.from(this.pingStats.values());
|
|
260
|
-
}
|
|
261
|
-
/**
|
|
262
|
-
* Добавляет обработчик для событий ping/pong
|
|
263
|
-
* @param {string} eventType Тип события (connection_timeout, connection_pong)
|
|
264
|
-
* @param {PingPongEventHandler} handler Обработчик события
|
|
265
|
-
*/
|
|
266
|
-
onPingPongEvent(eventType, handler) {
|
|
267
|
-
if (!this.pingPongEventHandlers.has(eventType)) {
|
|
268
|
-
this.pingPongEventHandlers.set(eventType, []);
|
|
269
|
-
}
|
|
270
|
-
const handlers = this.pingPongEventHandlers.get(eventType);
|
|
271
|
-
if (handlers) {
|
|
272
|
-
handlers.push(handler);
|
|
273
|
-
}
|
|
274
|
-
}
|
|
275
|
-
/**
|
|
276
|
-
* Удаляет обработчик для событий ping/pong
|
|
277
|
-
* @param {string} eventType Тип события
|
|
278
|
-
* @param {PingPongEventHandler} [handler] Обработчик события (если не указан, удаляются все обработчики)
|
|
279
|
-
*/
|
|
280
|
-
offPingPongEvent(eventType, handler) {
|
|
281
|
-
if (!handler) {
|
|
282
|
-
// Если обработчик не указан, удаляем все обработчики для этого типа события
|
|
283
|
-
this.pingPongEventHandlers.delete(eventType);
|
|
284
|
-
}
|
|
285
|
-
else {
|
|
286
|
-
// Если обработчик указан, удаляем только его
|
|
287
|
-
const handlers = this.pingPongEventHandlers.get(eventType);
|
|
288
|
-
if (handlers) {
|
|
289
|
-
const index = handlers.findIndex(h => h === handler);
|
|
290
|
-
if (index !== -1) {
|
|
291
|
-
handlers.splice(index, 1);
|
|
292
|
-
}
|
|
293
|
-
}
|
|
294
|
-
}
|
|
295
|
-
}
|
|
296
|
-
/**
|
|
297
|
-
* Проверяет, включен ли механизм ping/pong для указанного пространства имен
|
|
298
|
-
* @param {WebSocketNamespace} namespace Пространство имен
|
|
299
|
-
* @returns {boolean} true, если механизм включен
|
|
300
|
-
*/
|
|
301
|
-
isPingPongEnabled(namespace) {
|
|
302
|
-
return this.pingIntervals.has(namespace);
|
|
303
|
-
}
|
|
304
|
-
}
|
|
305
|
-
exports.PingPongManager = PingPongManager;
|
|
306
|
-
//# sourceMappingURL=ping-pong-manager.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"ping-pong-manager.js","sourceRoot":"","sources":["../../../src/utils/ping-pong-manager.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,170 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.DiagnosticsService = void 0;
|
|
4
|
-
const session_manager_js_1 = require("../utils/session-manager.js");
|
|
5
|
-
const ping_pong_manager_js_1 = require("../utils/ping-pong-manager.js");
|
|
6
|
-
const connection_state_manager_js_1 = require("../utils/connection-state-manager.js");
|
|
7
|
-
const logger_js_1 = require("../utils/logger.js");
|
|
8
|
-
/**
|
|
9
|
-
* Сервис для диагностики WebSocket соединений
|
|
10
|
-
*/
|
|
11
|
-
class DiagnosticsService {
|
|
12
|
-
/**
|
|
13
|
-
* Создает новый сервис диагностики
|
|
14
|
-
* @param {DiagnosticsServiceOptions} options Опции сервиса
|
|
15
|
-
*/
|
|
16
|
-
constructor(options = {}) {
|
|
17
|
-
/** Таймер для проверки здоровья соединений */
|
|
18
|
-
this.healthCheckTimer = null;
|
|
19
|
-
/** Клиенты WebSocket по namespace */
|
|
20
|
-
this.clients = new Map();
|
|
21
|
-
this.healthCheckInterval = options.healthCheckInterval || 30000;
|
|
22
|
-
this.logger = options.logger || (0, logger_js_1.createWebSocketLogger)('DiagnosticsService');
|
|
23
|
-
this.sessionManager = options.sessionManager || new session_manager_js_1.SessionManager();
|
|
24
|
-
this.pingPongManager = options.pingPongManager || new ping_pong_manager_js_1.PingPongManager();
|
|
25
|
-
this.connectionStateManager = options.connectionStateManager || new connection_state_manager_js_1.ConnectionStateManager();
|
|
26
|
-
}
|
|
27
|
-
/**
|
|
28
|
-
* Регистрирует WebSocket клиент для мониторинга
|
|
29
|
-
* @param {WebSocketNamespace} namespace Пространство имен
|
|
30
|
-
* @param {WebSocketClient} client WebSocket клиент
|
|
31
|
-
*/
|
|
32
|
-
registerClient(namespace, client) {
|
|
33
|
-
this.clients.set(namespace, client);
|
|
34
|
-
this.logger.debug(`Зарегистрирован клиент для ${namespace}`, {
|
|
35
|
-
socketId: client.getSocketId()
|
|
36
|
-
});
|
|
37
|
-
}
|
|
38
|
-
/**
|
|
39
|
-
* Удаляет регистрацию WebSocket клиента
|
|
40
|
-
* @param {WebSocketNamespace} namespace Пространство имен
|
|
41
|
-
*/
|
|
42
|
-
unregisterClient(namespace) {
|
|
43
|
-
this.clients.delete(namespace);
|
|
44
|
-
this.logger.debug(`Удалена регистрация клиента для ${namespace}`);
|
|
45
|
-
}
|
|
46
|
-
/**
|
|
47
|
-
* Запускает периодическую проверку здоровья соединений
|
|
48
|
-
* @returns {boolean} true, если проверка успешно запущена
|
|
49
|
-
*/
|
|
50
|
-
startHealthCheck() {
|
|
51
|
-
// Останавливаем существующую проверку, если она есть
|
|
52
|
-
this.stopHealthCheck();
|
|
53
|
-
this.healthCheckTimer = setInterval(() => {
|
|
54
|
-
this.performHealthCheck();
|
|
55
|
-
}, this.healthCheckInterval);
|
|
56
|
-
this.logger.info(`Запущена периодическая проверка здоровья соединений с интервалом ${this.healthCheckInterval}ms`);
|
|
57
|
-
return true;
|
|
58
|
-
}
|
|
59
|
-
/**
|
|
60
|
-
* Останавливает периодическую проверку здоровья соединений
|
|
61
|
-
*/
|
|
62
|
-
stopHealthCheck() {
|
|
63
|
-
if (this.healthCheckTimer) {
|
|
64
|
-
clearInterval(this.healthCheckTimer);
|
|
65
|
-
this.healthCheckTimer = null;
|
|
66
|
-
this.logger.info('Остановлена периодическая проверка здоровья соединений');
|
|
67
|
-
}
|
|
68
|
-
}
|
|
69
|
-
/**
|
|
70
|
-
* Выполняет проверку здоровья соединений
|
|
71
|
-
*/
|
|
72
|
-
performHealthCheck() {
|
|
73
|
-
for (const [namespace, client] of this.clients.entries()) {
|
|
74
|
-
try {
|
|
75
|
-
// Проверяем соединение через WebSocket клиент
|
|
76
|
-
if (!client.isConnected()) {
|
|
77
|
-
this.logger.warn(`Соединение с ${namespace} не активно`);
|
|
78
|
-
continue;
|
|
79
|
-
}
|
|
80
|
-
// Проверяем статистику ping/pong
|
|
81
|
-
const stats = this.pingPongManager.getPingStats(namespace);
|
|
82
|
-
if (stats) {
|
|
83
|
-
const now = Date.now();
|
|
84
|
-
// Если последний pong был получен слишком давно
|
|
85
|
-
if (stats.lastPongTimestamp && now - stats.lastPongTimestamp > this.healthCheckInterval * 2) {
|
|
86
|
-
this.logger.warn(`Долгое отсутствие активности для ${namespace}, последний pong: ${new Date(stats.lastPongTimestamp).toISOString()}`);
|
|
87
|
-
// Отправляем проверочный ping для обновления статистики
|
|
88
|
-
client.send({
|
|
89
|
-
event: 'connection_health_check',
|
|
90
|
-
data: { timestamp: now, echo: now }
|
|
91
|
-
});
|
|
92
|
-
}
|
|
93
|
-
}
|
|
94
|
-
}
|
|
95
|
-
catch (error) {
|
|
96
|
-
this.logger.error(`Ошибка при проверке здоровья соединения ${namespace}`, error);
|
|
97
|
-
}
|
|
98
|
-
}
|
|
99
|
-
}
|
|
100
|
-
/**
|
|
101
|
-
* Выполняет диагностику соединения
|
|
102
|
-
* @param {WebSocketNamespace} namespace Пространство имен
|
|
103
|
-
* @returns {ConnectionDiagnostics} Диагностическая информация
|
|
104
|
-
*/
|
|
105
|
-
diagnoseConnection(namespace) {
|
|
106
|
-
const client = this.clients.get(namespace);
|
|
107
|
-
const stats = this.pingPongManager.getPingStats(namespace);
|
|
108
|
-
const state = this.connectionStateManager.getState(namespace);
|
|
109
|
-
const sessionToken = this.sessionManager.getSessionToken(namespace);
|
|
110
|
-
return {
|
|
111
|
-
namespace,
|
|
112
|
-
isConnected: client?.isConnected() || false,
|
|
113
|
-
socketId: client?.getSocketId() || null,
|
|
114
|
-
lastActivity: stats?.lastPongTimestamp || 0,
|
|
115
|
-
rtt: {
|
|
116
|
-
current: stats?.lastRtt || -1,
|
|
117
|
-
min: stats?.minRtt === Number.MAX_SAFE_INTEGER ? -1 : (stats?.minRtt || -1),
|
|
118
|
-
max: stats?.maxRtt || -1,
|
|
119
|
-
avg: stats?.averageRtt || -1
|
|
120
|
-
},
|
|
121
|
-
pingSent: stats?.pingSent || 0,
|
|
122
|
-
pongReceived: stats?.pongReceived || 0,
|
|
123
|
-
missedPongs: (stats?.pingSent || 0) - (stats?.pongReceived || 0),
|
|
124
|
-
timeoutCount: 0, // Это значение не хранится в PingPongManager, нужно дорабатывать логику
|
|
125
|
-
reconnectAttempts: state.reconnectAttempts,
|
|
126
|
-
lastConnectTime: state.lastConnectTime,
|
|
127
|
-
sessionRecovery: {
|
|
128
|
-
hasSessionToken: !!sessionToken,
|
|
129
|
-
tokenLength: sessionToken?.length || 0,
|
|
130
|
-
wasRecovered: !!sessionToken && (stats?.pongReceived || 0) > 0
|
|
131
|
-
}
|
|
132
|
-
};
|
|
133
|
-
}
|
|
134
|
-
/**
|
|
135
|
-
* Выполняет диагностику всех соединений
|
|
136
|
-
* @returns {Record<string, ConnectionDiagnostics>} Диагностическая информация по всем соединениям
|
|
137
|
-
*/
|
|
138
|
-
diagnoseAllConnections() {
|
|
139
|
-
const result = {};
|
|
140
|
-
// Проверяем каждое зарегистрированное пространство имен
|
|
141
|
-
for (const namespace of this.clients.keys()) {
|
|
142
|
-
result[String(namespace)] = this.diagnoseConnection(namespace);
|
|
143
|
-
}
|
|
144
|
-
return result;
|
|
145
|
-
}
|
|
146
|
-
/**
|
|
147
|
-
* Получает статистику ping/pong для указанного пространства имен
|
|
148
|
-
* @param {WebSocketNamespace} namespace Пространство имен
|
|
149
|
-
* @returns {PingPongStats | null} Статистика ping/pong
|
|
150
|
-
*/
|
|
151
|
-
getPingStats(namespace) {
|
|
152
|
-
return this.pingPongManager.getPingStats(namespace);
|
|
153
|
-
}
|
|
154
|
-
/**
|
|
155
|
-
* Возвращает функцию-обработчик для pong-ответов, которая рассчитывает RTT
|
|
156
|
-
* @returns {(data: any) => void} Функция-обработчик
|
|
157
|
-
*/
|
|
158
|
-
getPongHandler() {
|
|
159
|
-
return (data) => {
|
|
160
|
-
if (data && data.echo) {
|
|
161
|
-
const rtt = Date.now() - data.echo;
|
|
162
|
-
this.logger.debug(`[PONG] RTT: ${rtt}ms, namespace: ${data.namespace || 'unknown'}`);
|
|
163
|
-
return rtt;
|
|
164
|
-
}
|
|
165
|
-
return -1;
|
|
166
|
-
};
|
|
167
|
-
}
|
|
168
|
-
}
|
|
169
|
-
exports.DiagnosticsService = DiagnosticsService;
|
|
170
|
-
//# sourceMappingURL=diagnostics-service.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"diagnostics-service.js","sourceRoot":"","sources":["../../../src/ws/diagnostics-service.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"stats.interfaces.js","sourceRoot":"","sources":["../../../../src/interfaces/websocket/stats.interfaces.ts"],"names":[],"mappings":""}
|