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