@ninenity/neutrun 1.2.0 → 1.9.2
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 +2 -2
- package/dist/CLI/Localize.d.ts +6 -0
- package/dist/CLI/Localize.d.ts.map +1 -1
- package/dist/CLI/Localize.js +63 -14
- package/dist/CLI/Localize.js.map +1 -1
- package/dist/Shared/Client.d.ts +1 -0
- package/dist/Shared/Client.d.ts.map +1 -1
- package/dist/Shared/Client.js +69 -2
- package/dist/Shared/Client.js.map +1 -1
- package/dist/Shared/ComponentRuntime.d.ts.map +1 -1
- package/dist/Shared/ComponentRuntime.js +2 -0
- package/dist/Shared/ComponentRuntime.js.map +1 -1
- package/dist/Shared/Config.js +2 -2
- package/dist/Shared/Config.js.map +1 -1
- package/dist/Shared/Definer.d.ts.map +1 -1
- package/dist/Shared/Definer.js +2 -0
- package/dist/Shared/Definer.js.map +1 -1
- package/dist/Shared/Environment.d.ts +10 -0
- package/dist/Shared/Environment.d.ts.map +1 -0
- package/dist/Shared/Environment.js +18 -0
- package/dist/Shared/Environment.js.map +1 -0
- package/dist/Shared/ExpressApi.d.ts +60 -1
- package/dist/Shared/ExpressApi.d.ts.map +1 -1
- package/dist/Shared/ExpressApi.js +393 -29
- package/dist/Shared/ExpressApi.js.map +1 -1
- package/dist/Shared/InteractionResponse.d.ts +12 -0
- package/dist/Shared/InteractionResponse.d.ts.map +1 -0
- package/dist/Shared/InteractionResponse.js +72 -0
- package/dist/Shared/InteractionResponse.js.map +1 -0
- package/dist/Shared/Neutrun.d.ts +1 -0
- package/dist/Shared/Neutrun.d.ts.map +1 -1
- package/dist/Shared/Neutrun.js +13 -5
- package/dist/Shared/Neutrun.js.map +1 -1
- package/dist/Shared/NinenityApi.d.ts +54 -1
- package/dist/Shared/NinenityApi.d.ts.map +1 -1
- package/dist/Shared/NinenityApi.js +421 -18
- package/dist/Shared/NinenityApi.js.map +1 -1
- package/dist/Shared/Observability.d.ts +59 -0
- package/dist/Shared/Observability.d.ts.map +1 -0
- package/dist/Shared/Observability.js +184 -0
- package/dist/Shared/Observability.js.map +1 -0
- package/dist/Shared/ProcessManager.d.ts +1 -0
- package/dist/Shared/ProcessManager.d.ts.map +1 -1
- package/dist/Shared/ProcessManager.js +21 -6
- package/dist/Shared/ProcessManager.js.map +1 -1
- package/dist/Shared/ServerMetricsService.d.ts +85 -0
- package/dist/Shared/ServerMetricsService.d.ts.map +1 -0
- package/dist/Shared/ServerMetricsService.js +284 -0
- package/dist/Shared/ServerMetricsService.js.map +1 -0
- package/dist/Shared/TelemetryPacket.d.ts +28 -0
- package/dist/Shared/TelemetryPacket.d.ts.map +1 -0
- package/dist/Shared/TelemetryPacket.js +22 -0
- package/dist/Shared/TelemetryPacket.js.map +1 -0
- package/dist/Shared/TelemetryService.d.ts +34 -0
- package/dist/Shared/TelemetryService.d.ts.map +1 -1
- package/dist/Shared/TelemetryService.js +235 -19
- package/dist/Shared/TelemetryService.js.map +1 -1
- package/dist/Shared/WebSocket.d.ts.map +1 -1
- package/dist/Shared/WebSocket.js +39 -9
- package/dist/Shared/WebSocket.js.map +1 -1
- package/dist/api.d.ts +2 -2
- package/dist/api.d.ts.map +1 -1
- package/dist/api.js +4 -1
- package/dist/api.js.map +1 -1
- package/dist/express.d.ts +2 -0
- package/dist/express.d.ts.map +1 -1
- package/dist/express.js +4 -1
- package/dist/express.js.map +1 -1
- package/dist/index.d.ts +12 -4
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +18 -2
- package/dist/index.js.map +1 -1
- package/package.json +10 -2
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ServerMetricsService.js","sourceRoot":"","sources":["../../src/Shared/ServerMetricsService.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
export declare const TELEMETRY_SCHEMA_VERSION: 2;
|
|
2
|
+
export declare const TELEMETRY_PACKET_VERSION: 1;
|
|
3
|
+
export type TelemetryPacketName = 'telemetry_bulk' | 'live_metrics_response' | 'server_metrics_daily';
|
|
4
|
+
export type TelemetryLifecycle = 'always' | 'idle' | 'suspend-resources';
|
|
5
|
+
export interface TelemetryApiStatus {
|
|
6
|
+
configured: boolean;
|
|
7
|
+
enabled: boolean;
|
|
8
|
+
running: boolean;
|
|
9
|
+
suspended: boolean;
|
|
10
|
+
hibernating: boolean;
|
|
11
|
+
lifecycle: TelemetryLifecycle;
|
|
12
|
+
}
|
|
13
|
+
export interface TelemetryPacketMetadata {
|
|
14
|
+
name: TelemetryPacketName;
|
|
15
|
+
version: typeof TELEMETRY_PACKET_VERSION;
|
|
16
|
+
id: string;
|
|
17
|
+
generatedAt: string;
|
|
18
|
+
}
|
|
19
|
+
export type StructuredTelemetryPacket<T extends Record<string, unknown>> = T & {
|
|
20
|
+
schema: typeof TELEMETRY_SCHEMA_VERSION;
|
|
21
|
+
packet: TelemetryPacketMetadata;
|
|
22
|
+
};
|
|
23
|
+
/**
|
|
24
|
+
* Centraliza a estrutura dos pacotes de métricas sem remover os campos de
|
|
25
|
+
* primeiro nível já consumidos pela API central.
|
|
26
|
+
*/
|
|
27
|
+
export declare const structureTelemetryPacket: <T extends Record<string, unknown>>(name: TelemetryPacketName, payload: T) => StructuredTelemetryPacket<T>;
|
|
28
|
+
//# sourceMappingURL=TelemetryPacket.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"TelemetryPacket.d.ts","sourceRoot":"","sources":["../../src/Shared/TelemetryPacket.ts"],"names":[],"mappings":"AAEA,eAAO,MAAM,wBAAwB,EAAG,CAAU,CAAA;AAClD,eAAO,MAAM,wBAAwB,EAAG,CAAU,CAAA;AAElD,MAAM,MAAM,mBAAmB,GAC3B,gBAAgB,GAChB,uBAAuB,GACvB,sBAAsB,CAAA;AAE1B,MAAM,MAAM,kBAAkB,GAAG,QAAQ,GAAG,MAAM,GAAG,mBAAmB,CAAA;AAExE,MAAM,WAAW,kBAAkB;IACjC,UAAU,EAAE,OAAO,CAAA;IACnB,OAAO,EAAE,OAAO,CAAA;IAChB,OAAO,EAAE,OAAO,CAAA;IAChB,SAAS,EAAE,OAAO,CAAA;IAClB,WAAW,EAAE,OAAO,CAAA;IACpB,SAAS,EAAE,kBAAkB,CAAA;CAC9B;AAED,MAAM,WAAW,uBAAuB;IACtC,IAAI,EAAE,mBAAmB,CAAA;IACzB,OAAO,EAAE,OAAO,wBAAwB,CAAA;IACxC,EAAE,EAAE,MAAM,CAAA;IACV,WAAW,EAAE,MAAM,CAAA;CACpB;AAED,MAAM,MAAM,yBAAyB,CAAC,CAAC,SAAS,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,IAAI,CAAC,GAAG;IAC7E,MAAM,EAAE,OAAO,wBAAwB,CAAA;IACvC,MAAM,EAAE,uBAAuB,CAAA;CAChC,CAAA;AAED;;;GAGG;AACH,eAAO,MAAM,wBAAwB,GAAI,CAAC,SAAS,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EACxE,MAAM,mBAAmB,EACzB,SAAS,CAAC,KACT,yBAAyB,CAAC,CAAC,CAS5B,CAAA"}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.structureTelemetryPacket = exports.TELEMETRY_PACKET_VERSION = exports.TELEMETRY_SCHEMA_VERSION = void 0;
|
|
4
|
+
const node_crypto_1 = require("node:crypto");
|
|
5
|
+
exports.TELEMETRY_SCHEMA_VERSION = 2;
|
|
6
|
+
exports.TELEMETRY_PACKET_VERSION = 1;
|
|
7
|
+
/**
|
|
8
|
+
* Centraliza a estrutura dos pacotes de métricas sem remover os campos de
|
|
9
|
+
* primeiro nível já consumidos pela API central.
|
|
10
|
+
*/
|
|
11
|
+
const structureTelemetryPacket = (name, payload) => ({
|
|
12
|
+
...payload,
|
|
13
|
+
schema: exports.TELEMETRY_SCHEMA_VERSION,
|
|
14
|
+
packet: {
|
|
15
|
+
name,
|
|
16
|
+
version: exports.TELEMETRY_PACKET_VERSION,
|
|
17
|
+
id: (0, node_crypto_1.randomUUID)(),
|
|
18
|
+
generatedAt: new Date().toISOString()
|
|
19
|
+
}
|
|
20
|
+
});
|
|
21
|
+
exports.structureTelemetryPacket = structureTelemetryPacket;
|
|
22
|
+
//# sourceMappingURL=TelemetryPacket.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"TelemetryPacket.js","sourceRoot":"","sources":["../../src/Shared/TelemetryPacket.ts"],"names":[],"mappings":";;;AAAA,6CAAwC;AAE3B,QAAA,wBAAwB,GAAG,CAAU,CAAA;AACrC,QAAA,wBAAwB,GAAG,CAAU,CAAA;AA8BlD;;;GAGG;AACI,MAAM,wBAAwB,GAAG,CACtC,IAAyB,EACzB,OAAU,EACoB,EAAE,CAAC,CAAC;IAClC,GAAG,OAAO;IACV,MAAM,EAAE,gCAAwB;IAChC,MAAM,EAAE;QACN,IAAI;QACJ,OAAO,EAAE,gCAAwB;QACjC,EAAE,EAAE,IAAA,wBAAU,GAAE;QAChB,WAAW,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;KACtC;CACF,CAAC,CAAA;AAZW,QAAA,wBAAwB,4BAYnC"}
|
|
@@ -1,4 +1,24 @@
|
|
|
1
1
|
import 'dotenv/config';
|
|
2
|
+
import { Bot } from './Client';
|
|
3
|
+
import { type TelemetryApiStatus } from './TelemetryPacket';
|
|
4
|
+
interface CustomTelemetryBucket {
|
|
5
|
+
namespace: string;
|
|
6
|
+
counters: Map<string, number>;
|
|
7
|
+
gauges: Map<string, number>;
|
|
8
|
+
events: Array<{
|
|
9
|
+
name: string;
|
|
10
|
+
data: unknown;
|
|
11
|
+
timestamp: string;
|
|
12
|
+
}>;
|
|
13
|
+
}
|
|
14
|
+
export declare class CustomTelemetry {
|
|
15
|
+
private readonly bucket;
|
|
16
|
+
constructor(bucket: CustomTelemetryBucket);
|
|
17
|
+
increment(name: string, amount?: number): this;
|
|
18
|
+
set(name: string, value: number): this;
|
|
19
|
+
gauge(name: string, value: number): this;
|
|
20
|
+
record(name: string, data?: unknown): this;
|
|
21
|
+
}
|
|
2
22
|
export declare class TelemetryService {
|
|
3
23
|
private telemetryTimer;
|
|
4
24
|
private isConnected;
|
|
@@ -10,10 +30,21 @@ export declare class TelemetryService {
|
|
|
10
30
|
private readonly actionMap;
|
|
11
31
|
private readonly eventMap;
|
|
12
32
|
private readonly counterMap;
|
|
33
|
+
private readonly customMap;
|
|
13
34
|
private clientReadyAt;
|
|
14
35
|
private queueWriteChain;
|
|
15
36
|
private queueFlushPromise;
|
|
16
37
|
private transportBound;
|
|
38
|
+
private apiStatusProvider;
|
|
39
|
+
private readonly serverMetrics;
|
|
40
|
+
/**
|
|
41
|
+
* Observa somente eventos de engajamento entregues pelo gateway. A coleta
|
|
42
|
+
* diária é independente do intervalo da telemetria operacional.
|
|
43
|
+
*/
|
|
44
|
+
bindServerMetrics(client: Bot): void;
|
|
45
|
+
setApiStatusProvider(provider: (() => TelemetryApiStatus) | null): void;
|
|
46
|
+
getApiStatus(): TelemetryApiStatus;
|
|
47
|
+
create(namespace: string): CustomTelemetry;
|
|
17
48
|
private getTransport;
|
|
18
49
|
private bindTransport;
|
|
19
50
|
/**
|
|
@@ -51,8 +82,11 @@ export declare class TelemetryService {
|
|
|
51
82
|
private calculateCpuUsage;
|
|
52
83
|
private serializeActions;
|
|
53
84
|
private serializeEvents;
|
|
85
|
+
private serializeCustom;
|
|
54
86
|
private fitToFrame;
|
|
55
87
|
sendTelemetryBulk(): Promise<void>;
|
|
88
|
+
private createServerMetricsPackets;
|
|
89
|
+
private sendServerMetricsDaily;
|
|
56
90
|
private readQueue;
|
|
57
91
|
private writeQueue;
|
|
58
92
|
private queueData;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"TelemetryService.d.ts","sourceRoot":"","sources":["../../src/Shared/TelemetryService.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"TelemetryService.d.ts","sourceRoot":"","sources":["../../src/Shared/TelemetryService.ts"],"names":[],"mappings":"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"}
|
|
@@ -3,24 +3,32 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
|
3
3
|
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
4
|
};
|
|
5
5
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
-
exports.Telemetry = exports.TelemetryService = void 0;
|
|
6
|
+
exports.Telemetry = exports.TelemetryService = exports.CustomTelemetry = void 0;
|
|
7
7
|
const os_1 = __importDefault(require("os"));
|
|
8
8
|
const promises_1 = __importDefault(require("fs/promises"));
|
|
9
9
|
const path_1 = __importDefault(require("path"));
|
|
10
|
+
const node_crypto_1 = require("node:crypto");
|
|
10
11
|
require("dotenv/config");
|
|
11
12
|
const Client_1 = require("./Client");
|
|
12
13
|
const ConsoleLog_1 = require("./ConsoleLog");
|
|
13
14
|
const Logger_1 = __importDefault(require("../Logger"));
|
|
14
15
|
const EventBus_1 = __importDefault(require("./EventBus"));
|
|
16
|
+
const Observability_1 = __importDefault(require("./Observability"));
|
|
17
|
+
const TelemetryPacket_1 = require("./TelemetryPacket");
|
|
18
|
+
const ServerMetricsService_1 = __importDefault(require("./ServerMetricsService"));
|
|
15
19
|
const MAX_QUEUE_ITEMS = 100;
|
|
16
20
|
const MAX_QUEUE_BYTES = 2 * 1024 * 1024;
|
|
17
21
|
const MAX_ACTION_GROUPS = 500;
|
|
18
22
|
const MAX_ACTION_ENTRIES = 25;
|
|
19
23
|
const MAX_EVENT_GROUPS = 200;
|
|
20
24
|
const MAX_COUNTER_KEYS = 100;
|
|
25
|
+
const MAX_CUSTOM_NAMESPACES = 50;
|
|
26
|
+
const MAX_CUSTOM_METRICS = 100;
|
|
27
|
+
const MAX_CUSTOM_EVENTS = 50;
|
|
21
28
|
const TELEMETRY_INTERVAL_MS = 60 * 1000;
|
|
22
29
|
const QUEUE_SEND_INTERVAL_MS = 1_100;
|
|
23
30
|
const EVENT_LOOP_SAMPLE_MS = 1_000;
|
|
31
|
+
const SERVER_METRICS_PACKET_TARGET_BYTES = 220 * 1024;
|
|
24
32
|
const queuePath = path_1.default.join(process.cwd(), '.ninenity', 'telemetry_queue.json');
|
|
25
33
|
const safeErrorMessage = (error) => {
|
|
26
34
|
if (error instanceof Error && error.message)
|
|
@@ -68,6 +76,48 @@ const sanitizeValue = (value, depth = 0, seen = new WeakSet()) => {
|
|
|
68
76
|
}
|
|
69
77
|
return output;
|
|
70
78
|
};
|
|
79
|
+
const normalizeTelemetryName = (value, maxLength) => {
|
|
80
|
+
const normalized = String(value || 'unknown').trim().replace(/[^a-zA-Z0-9_.:-]/g, '_');
|
|
81
|
+
return normalized.slice(0, maxLength) || 'unknown';
|
|
82
|
+
};
|
|
83
|
+
class CustomTelemetry {
|
|
84
|
+
bucket;
|
|
85
|
+
constructor(bucket) {
|
|
86
|
+
this.bucket = bucket;
|
|
87
|
+
}
|
|
88
|
+
increment(name, amount = 1) {
|
|
89
|
+
const key = normalizeTelemetryName(name, 100);
|
|
90
|
+
if (!this.bucket.counters.has(key) && this.bucket.counters.size >= MAX_CUSTOM_METRICS)
|
|
91
|
+
return this;
|
|
92
|
+
const value = Number(amount);
|
|
93
|
+
if (!Number.isFinite(value))
|
|
94
|
+
return this;
|
|
95
|
+
this.bucket.counters.set(key, clamp((this.bucket.counters.get(key) || 0) + value, -1_000_000_000, 1_000_000_000));
|
|
96
|
+
return this;
|
|
97
|
+
}
|
|
98
|
+
set(name, value) {
|
|
99
|
+
const key = normalizeTelemetryName(name, 100);
|
|
100
|
+
if (!this.bucket.gauges.has(key) && this.bucket.gauges.size >= MAX_CUSTOM_METRICS)
|
|
101
|
+
return this;
|
|
102
|
+
if (Number.isFinite(value))
|
|
103
|
+
this.bucket.gauges.set(key, clamp(value, -1_000_000_000, 1_000_000_000));
|
|
104
|
+
return this;
|
|
105
|
+
}
|
|
106
|
+
gauge(name, value) {
|
|
107
|
+
return this.set(name, value);
|
|
108
|
+
}
|
|
109
|
+
record(name, data) {
|
|
110
|
+
if (this.bucket.events.length >= MAX_CUSTOM_EVENTS)
|
|
111
|
+
this.bucket.events.shift();
|
|
112
|
+
this.bucket.events.push({
|
|
113
|
+
name: normalizeTelemetryName(name, 120),
|
|
114
|
+
data: sanitizeValue(data),
|
|
115
|
+
timestamp: new Date().toISOString()
|
|
116
|
+
});
|
|
117
|
+
return this;
|
|
118
|
+
}
|
|
119
|
+
}
|
|
120
|
+
exports.CustomTelemetry = CustomTelemetry;
|
|
71
121
|
const getMemoryUsage = () => {
|
|
72
122
|
try {
|
|
73
123
|
const memory = process.memoryUsage();
|
|
@@ -182,10 +232,62 @@ class TelemetryService {
|
|
|
182
232
|
actionMap = new Map();
|
|
183
233
|
eventMap = new Map();
|
|
184
234
|
counterMap = new Map();
|
|
235
|
+
customMap = new Map();
|
|
185
236
|
clientReadyAt = null;
|
|
186
237
|
queueWriteChain = Promise.resolve();
|
|
187
238
|
queueFlushPromise = null;
|
|
188
239
|
transportBound = false;
|
|
240
|
+
apiStatusProvider = null;
|
|
241
|
+
serverMetrics = new ServerMetricsService_1.default();
|
|
242
|
+
/**
|
|
243
|
+
* Observa somente eventos de engajamento entregues pelo gateway. A coleta
|
|
244
|
+
* diária é independente do intervalo da telemetria operacional.
|
|
245
|
+
*/
|
|
246
|
+
bindServerMetrics(client) {
|
|
247
|
+
try {
|
|
248
|
+
this.serverMetrics.bind(client, async (snapshot) => {
|
|
249
|
+
await this.sendServerMetricsDaily(snapshot);
|
|
250
|
+
});
|
|
251
|
+
}
|
|
252
|
+
catch (error) {
|
|
253
|
+
(0, ConsoleLog_1.logWarn)(`Falha ao ativar métricas diárias do servidor: ${safeErrorMessage(error)}`, 'Telemetry');
|
|
254
|
+
}
|
|
255
|
+
}
|
|
256
|
+
setApiStatusProvider(provider) {
|
|
257
|
+
this.apiStatusProvider = provider;
|
|
258
|
+
}
|
|
259
|
+
getApiStatus() {
|
|
260
|
+
const fallback = {
|
|
261
|
+
configured: false,
|
|
262
|
+
enabled: false,
|
|
263
|
+
running: false,
|
|
264
|
+
suspended: false,
|
|
265
|
+
hibernating: false,
|
|
266
|
+
lifecycle: 'always'
|
|
267
|
+
};
|
|
268
|
+
if (!this.apiStatusProvider)
|
|
269
|
+
return fallback;
|
|
270
|
+
try {
|
|
271
|
+
return this.apiStatusProvider();
|
|
272
|
+
}
|
|
273
|
+
catch {
|
|
274
|
+
return fallback;
|
|
275
|
+
}
|
|
276
|
+
}
|
|
277
|
+
create(namespace) {
|
|
278
|
+
const safeNamespace = normalizeTelemetryName(namespace, 80);
|
|
279
|
+
let bucket = this.customMap.get(safeNamespace);
|
|
280
|
+
if (!bucket) {
|
|
281
|
+
if (this.customMap.size >= MAX_CUSTOM_NAMESPACES) {
|
|
282
|
+
const oldest = this.customMap.keys().next().value;
|
|
283
|
+
if (oldest)
|
|
284
|
+
this.customMap.delete(oldest);
|
|
285
|
+
}
|
|
286
|
+
bucket = { namespace: safeNamespace, counters: new Map(), gauges: new Map(), events: [] };
|
|
287
|
+
this.customMap.set(safeNamespace, bucket);
|
|
288
|
+
}
|
|
289
|
+
return new CustomTelemetry(bucket);
|
|
290
|
+
}
|
|
189
291
|
getTransport() {
|
|
190
292
|
return require('./WebSocket');
|
|
191
293
|
}
|
|
@@ -223,6 +325,7 @@ class TelemetryService {
|
|
|
223
325
|
this.started = false;
|
|
224
326
|
this.isConnected = false;
|
|
225
327
|
this.stopTelemetryLoop();
|
|
328
|
+
this.serverMetrics.unbind();
|
|
226
329
|
stopEventLoopSampler();
|
|
227
330
|
}
|
|
228
331
|
async handleConnectionState(connected) {
|
|
@@ -301,13 +404,16 @@ class TelemetryService {
|
|
|
301
404
|
}
|
|
302
405
|
async sendLiveMetrics() {
|
|
303
406
|
try {
|
|
304
|
-
this.send('live_metrics_response', this.fitToFrame({
|
|
407
|
+
this.send('live_metrics_response', this.fitToFrame((0, TelemetryPacket_1.structureTelemetryPacket)('live_metrics_response', {
|
|
305
408
|
system: this.buildSystemPayload(),
|
|
306
409
|
actions: this.serializeActions(),
|
|
307
410
|
events: this.serializeEvents(),
|
|
308
411
|
counters: Object.fromEntries(this.counterMap),
|
|
309
|
-
|
|
310
|
-
|
|
412
|
+
custom: this.serializeCustom(),
|
|
413
|
+
observability: Observability_1.default.snapshot(false),
|
|
414
|
+
runtime: this.getRuntimeSnapshot(),
|
|
415
|
+
api: this.getApiStatus()
|
|
416
|
+
})));
|
|
311
417
|
}
|
|
312
418
|
catch (error) {
|
|
313
419
|
(0, ConsoleLog_1.logWarn)(`Falha ao responder métricas em tempo real: ${safeErrorMessage(error)}`);
|
|
@@ -489,6 +595,16 @@ class TelemetryService {
|
|
|
489
595
|
.sort((left, right) => right.count - left.count)
|
|
490
596
|
.slice(0, MAX_EVENT_GROUPS);
|
|
491
597
|
}
|
|
598
|
+
serializeCustom() {
|
|
599
|
+
return Object.fromEntries(Array.from(this.customMap.values()).map((bucket) => [
|
|
600
|
+
bucket.namespace,
|
|
601
|
+
{
|
|
602
|
+
counters: Object.fromEntries(bucket.counters),
|
|
603
|
+
gauges: Object.fromEntries(bucket.gauges),
|
|
604
|
+
events: bucket.events.slice(-MAX_CUSTOM_EVENTS)
|
|
605
|
+
}
|
|
606
|
+
]));
|
|
607
|
+
}
|
|
492
608
|
// Degradação gradual quando o payload excede o limite de frame do
|
|
493
609
|
// transporte: primeiro descartamos as amostras individuais (mantendo os
|
|
494
610
|
// agregados), depois os eventos. Sem isso, um pico de volume derrubaria o
|
|
@@ -521,12 +637,31 @@ class TelemetryService {
|
|
|
521
637
|
if (!fitsFrame(payload)) {
|
|
522
638
|
payload = { ...payload, events: [] };
|
|
523
639
|
}
|
|
640
|
+
if (!fitsFrame(payload)) {
|
|
641
|
+
const observability = payload.observability;
|
|
642
|
+
payload = {
|
|
643
|
+
...payload,
|
|
644
|
+
observability: observability
|
|
645
|
+
? {
|
|
646
|
+
generatedAt: observability.generatedAt,
|
|
647
|
+
droppedSeries: observability.droppedSeries,
|
|
648
|
+
counters: [],
|
|
649
|
+
gauges: [],
|
|
650
|
+
histograms: []
|
|
651
|
+
}
|
|
652
|
+
: undefined
|
|
653
|
+
};
|
|
654
|
+
}
|
|
524
655
|
if (!fitsFrame(payload)) {
|
|
525
656
|
payload = {
|
|
526
657
|
schema: 2,
|
|
658
|
+
packet: payload.packet,
|
|
527
659
|
system: payload.system,
|
|
528
660
|
counters: payload.counters,
|
|
661
|
+
custom: payload.custom,
|
|
662
|
+
observability: payload.observability,
|
|
529
663
|
runtime: payload.runtime,
|
|
664
|
+
api: payload.api,
|
|
530
665
|
actions: [],
|
|
531
666
|
events: []
|
|
532
667
|
};
|
|
@@ -534,24 +669,84 @@ class TelemetryService {
|
|
|
534
669
|
return payload;
|
|
535
670
|
}
|
|
536
671
|
async sendTelemetryBulk() {
|
|
537
|
-
const payload = this.fitToFrame({
|
|
538
|
-
schema: 2,
|
|
672
|
+
const payload = this.fitToFrame((0, TelemetryPacket_1.structureTelemetryPacket)('telemetry_bulk', {
|
|
539
673
|
system: this.buildSystemPayload(),
|
|
540
674
|
actions: this.serializeActions(),
|
|
541
675
|
events: this.serializeEvents(),
|
|
542
676
|
counters: Object.fromEntries(this.counterMap),
|
|
543
|
-
|
|
544
|
-
|
|
677
|
+
custom: this.serializeCustom(),
|
|
678
|
+
observability: Observability_1.default.snapshot(true),
|
|
679
|
+
runtime: this.getRuntimeSnapshot(),
|
|
680
|
+
api: this.getApiStatus()
|
|
681
|
+
}));
|
|
545
682
|
this.actionMap.clear();
|
|
546
683
|
this.eventMap.clear();
|
|
547
684
|
this.counterMap.clear();
|
|
685
|
+
this.customMap.clear();
|
|
548
686
|
if (!this.isConnected || !this.getTransport().IsConnected()) {
|
|
549
|
-
await this.queueData(payload);
|
|
687
|
+
await this.queueData('telemetry_bulk', payload);
|
|
550
688
|
return;
|
|
551
689
|
}
|
|
552
690
|
await this.sendQueuedData();
|
|
553
691
|
if (!this.send('telemetry_bulk', payload)) {
|
|
554
|
-
await this.queueData(payload);
|
|
692
|
+
await this.queueData('telemetry_bulk', payload);
|
|
693
|
+
}
|
|
694
|
+
}
|
|
695
|
+
createServerMetricsPackets(snapshot) {
|
|
696
|
+
if (snapshot.guilds.length === 0)
|
|
697
|
+
return [];
|
|
698
|
+
const groups = [];
|
|
699
|
+
let current = [];
|
|
700
|
+
for (const guild of snapshot.guilds) {
|
|
701
|
+
const candidate = [...current, guild];
|
|
702
|
+
const estimatedPayload = {
|
|
703
|
+
period: snapshot.period,
|
|
704
|
+
capabilities: snapshot.capabilities,
|
|
705
|
+
collection: snapshot.collection,
|
|
706
|
+
guilds: candidate
|
|
707
|
+
};
|
|
708
|
+
const estimatedBytes = Buffer.byteLength(JSON.stringify(estimatedPayload), 'utf8');
|
|
709
|
+
if (current.length > 0 && estimatedBytes > SERVER_METRICS_PACKET_TARGET_BYTES) {
|
|
710
|
+
groups.push(current);
|
|
711
|
+
current = [guild];
|
|
712
|
+
}
|
|
713
|
+
else {
|
|
714
|
+
current = candidate;
|
|
715
|
+
}
|
|
716
|
+
}
|
|
717
|
+
if (current.length > 0)
|
|
718
|
+
groups.push(current);
|
|
719
|
+
const batchId = (0, node_crypto_1.randomUUID)();
|
|
720
|
+
return groups.map((guilds, index) => (0, TelemetryPacket_1.structureTelemetryPacket)('server_metrics_daily', {
|
|
721
|
+
period: snapshot.period,
|
|
722
|
+
capabilities: snapshot.capabilities,
|
|
723
|
+
collection: snapshot.collection,
|
|
724
|
+
batch: {
|
|
725
|
+
id: batchId,
|
|
726
|
+
index,
|
|
727
|
+
count: groups.length
|
|
728
|
+
},
|
|
729
|
+
guilds
|
|
730
|
+
}));
|
|
731
|
+
}
|
|
732
|
+
async sendServerMetricsDaily(snapshot) {
|
|
733
|
+
const packets = this.createServerMetricsPackets(snapshot);
|
|
734
|
+
if (packets.length === 0)
|
|
735
|
+
return;
|
|
736
|
+
if (!this.isConnected || !this.getTransport().IsConnected()) {
|
|
737
|
+
for (const packet of packets) {
|
|
738
|
+
await this.queueData('server_metrics_daily', packet);
|
|
739
|
+
}
|
|
740
|
+
return;
|
|
741
|
+
}
|
|
742
|
+
await this.sendQueuedData();
|
|
743
|
+
for (let index = 0; index < packets.length; index += 1) {
|
|
744
|
+
const packet = packets[index];
|
|
745
|
+
if (!this.send('server_metrics_daily', packet)) {
|
|
746
|
+
await this.queueData('server_metrics_daily', packet);
|
|
747
|
+
}
|
|
748
|
+
if (index < packets.length - 1)
|
|
749
|
+
await wait(QUEUE_SEND_INTERVAL_MS);
|
|
555
750
|
}
|
|
556
751
|
}
|
|
557
752
|
async readQueue() {
|
|
@@ -561,7 +756,24 @@ class TelemetryService {
|
|
|
561
756
|
return [];
|
|
562
757
|
const raw = await promises_1.default.readFile(queuePath, 'utf8');
|
|
563
758
|
const parsed = JSON.parse(raw);
|
|
564
|
-
|
|
759
|
+
if (!Array.isArray(parsed))
|
|
760
|
+
return [];
|
|
761
|
+
return parsed.slice(-MAX_QUEUE_ITEMS).flatMap((entry) => {
|
|
762
|
+
if (!entry || typeof entry !== 'object' || Array.isArray(entry))
|
|
763
|
+
return [];
|
|
764
|
+
const value = entry;
|
|
765
|
+
if (typeof value.type === 'string' &&
|
|
766
|
+
value.data &&
|
|
767
|
+
typeof value.data === 'object' &&
|
|
768
|
+
!Array.isArray(value.data)) {
|
|
769
|
+
return [{
|
|
770
|
+
type: value.type.slice(0, 100),
|
|
771
|
+
data: value.data
|
|
772
|
+
}];
|
|
773
|
+
}
|
|
774
|
+
// Compatibilidade com a fila local criada antes dos envelopes.
|
|
775
|
+
return [{ type: 'telemetry_bulk', data: value }];
|
|
776
|
+
});
|
|
565
777
|
}
|
|
566
778
|
catch {
|
|
567
779
|
return [];
|
|
@@ -570,23 +782,27 @@ class TelemetryService {
|
|
|
570
782
|
async writeQueue(queue) {
|
|
571
783
|
await promises_1.default.mkdir(path_1.default.dirname(queuePath), { recursive: true });
|
|
572
784
|
const temporaryPath = `${queuePath}.${process.pid}.${Date.now()}.tmp`;
|
|
785
|
+
const boundedQueue = queue.slice(-MAX_QUEUE_ITEMS);
|
|
786
|
+
while (boundedQueue.length > 0 &&
|
|
787
|
+
Buffer.byteLength(JSON.stringify(boundedQueue), 'utf8') > MAX_QUEUE_BYTES) {
|
|
788
|
+
boundedQueue.shift();
|
|
789
|
+
}
|
|
573
790
|
try {
|
|
574
|
-
await promises_1.default.writeFile(temporaryPath, JSON.stringify(
|
|
791
|
+
await promises_1.default.writeFile(temporaryPath, JSON.stringify(boundedQueue), 'utf8');
|
|
575
792
|
await promises_1.default.rename(temporaryPath, queuePath);
|
|
576
793
|
}
|
|
577
794
|
finally {
|
|
578
795
|
await promises_1.default.unlink(temporaryPath).catch(() => { });
|
|
579
796
|
}
|
|
580
797
|
}
|
|
581
|
-
async queueData(data) {
|
|
582
|
-
//
|
|
583
|
-
//
|
|
584
|
-
// descartaria grupos de ações inteiros durante períodos offline.
|
|
798
|
+
async queueData(type, data) {
|
|
799
|
+
// Os produtores já limitam seus pacotes ao frame do transporte.
|
|
800
|
+
// Re-sanitizar aqui removeria grupos inteiros durante períodos offline.
|
|
585
801
|
this.queueWriteChain = this.queueWriteChain
|
|
586
802
|
.catch(() => { })
|
|
587
803
|
.then(async () => {
|
|
588
804
|
const queue = await this.readQueue();
|
|
589
|
-
queue.push(data);
|
|
805
|
+
queue.push({ type, data });
|
|
590
806
|
await this.writeQueue(queue);
|
|
591
807
|
});
|
|
592
808
|
try {
|
|
@@ -604,8 +820,8 @@ class TelemetryService {
|
|
|
604
820
|
await this.queueWriteChain;
|
|
605
821
|
let queue = await this.readQueue();
|
|
606
822
|
while (queue.length > 0 && this.started && this.getTransport().IsConnected()) {
|
|
607
|
-
const
|
|
608
|
-
if (!this.send(
|
|
823
|
+
const item = queue[0];
|
|
824
|
+
if (!this.send(item.type, item.data))
|
|
609
825
|
break;
|
|
610
826
|
queue = queue.slice(1);
|
|
611
827
|
await this.writeQueue(queue);
|