@tramvai/module-metrics 1.60.2 → 1.63.1
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/lib/request/createRequestWithMetrics.d.ts +2 -10
- package/lib/request/initRequestsMetrics.d.ts +8 -6
- package/lib/request/types.d.ts +28 -0
- package/lib/server.d.ts +2 -0
- package/lib/server.es.js +83 -20
- package/lib/server.js +83 -18
- package/lib/tokens.d.ts +2 -0
- package/package.json +9 -9
|
@@ -1,11 +1,3 @@
|
|
|
1
|
-
|
|
1
|
+
import type { Args, CreateRequestWithMetrics } from './types';
|
|
2
2
|
export declare const getUrlAndOptions: (args: Args) => any[];
|
|
3
|
-
export declare const createRequestWithMetrics:
|
|
4
|
-
metricsInstances: {
|
|
5
|
-
requestsTotal: any;
|
|
6
|
-
requestsErrors: any;
|
|
7
|
-
requestsDuration: any;
|
|
8
|
-
};
|
|
9
|
-
getServiceName: any;
|
|
10
|
-
}) => (originalRequest: any, ...args: Args) => any;
|
|
11
|
-
export {};
|
|
3
|
+
export declare const createRequestWithMetrics: CreateRequestWithMetrics;
|
|
@@ -1,7 +1,9 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
http:
|
|
5
|
-
https:
|
|
6
|
-
createRequestWithMetrics:
|
|
1
|
+
import type { MetricsModule, GetServiceName, CreateRequestWithMetrics, HttpModule, HttpsModule, ModuleConfig } from './types';
|
|
2
|
+
export declare const initRequestsMetrics: ({ metrics, getServiceName, http, https, createRequestWithMetrics, config, }: {
|
|
3
|
+
metrics: MetricsModule;
|
|
4
|
+
http: HttpModule;
|
|
5
|
+
https: HttpsModule;
|
|
6
|
+
createRequestWithMetrics: CreateRequestWithMetrics;
|
|
7
|
+
getServiceName: GetServiceName;
|
|
8
|
+
config: ModuleConfig;
|
|
7
9
|
}) => void;
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
/// <reference types="node" />
|
|
2
|
+
import type { RequestOptions, IncomingMessage, ClientRequest } from 'http';
|
|
3
|
+
import type httpType from 'http';
|
|
4
|
+
import type httpsType from 'https';
|
|
5
|
+
import type { Counter, Histogram } from 'prom-client';
|
|
6
|
+
import type { METRICS_MODULE_TOKEN, METRICS_SERVICES_REGISTRY_TOKEN } from '@tramvai/tokens-metrics';
|
|
7
|
+
export declare type ModuleConfig = {
|
|
8
|
+
enableConnectionResolveMetrics: boolean;
|
|
9
|
+
};
|
|
10
|
+
export declare type MetricsModule = typeof METRICS_MODULE_TOKEN;
|
|
11
|
+
export declare type HttpModule = typeof httpType;
|
|
12
|
+
export declare type HttpsModule = typeof httpsType;
|
|
13
|
+
export declare type OriginalRequest = HttpModule['request'];
|
|
14
|
+
export declare type MetricsInstances = {
|
|
15
|
+
requestsTotal: Counter<'status' | 'method' | 'service'>;
|
|
16
|
+
requestsErrors: Counter<'status' | 'method' | 'service'>;
|
|
17
|
+
requestsDuration: Histogram<'status' | 'method' | 'service'>;
|
|
18
|
+
dnsResolveDuration: Histogram<'service'>;
|
|
19
|
+
tcpConnectDuration: Histogram<'service'>;
|
|
20
|
+
tlsHandshakeDuration: Histogram<'service'>;
|
|
21
|
+
};
|
|
22
|
+
export declare type GetServiceName = typeof METRICS_SERVICES_REGISTRY_TOKEN['getServiceName'];
|
|
23
|
+
export declare type Args = [RequestOptions | string | URL, (res: IncomingMessage) => void] | [string | URL, RequestOptions, (res: IncomingMessage) => void];
|
|
24
|
+
export declare type CreateRequestWithMetrics = (args: {
|
|
25
|
+
metricsInstances: MetricsInstances;
|
|
26
|
+
getServiceName: GetServiceName;
|
|
27
|
+
config: ModuleConfig;
|
|
28
|
+
}) => (originalRequest: HttpModule['request'], ...requestArgs: Args) => ClientRequest;
|
package/lib/server.d.ts
CHANGED
package/lib/server.es.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { __decorate } from 'tslib';
|
|
2
|
-
import { Module, commandLineListTokens, Scope } from '@tramvai/core';
|
|
2
|
+
import { createToken, Module, commandLineListTokens, Scope, provide } from '@tramvai/core';
|
|
3
3
|
import { SERVER_MODULE_PAPI_PUBLIC_ROUTE, WEB_APP_BEFORE_INIT_TOKEN, WEB_APP_TOKEN, SPECIAL_SERVER_PATHS } from '@tramvai/tokens-server';
|
|
4
4
|
import { METRICS_MODULE_TOKEN, METRICS_SERVICES_REGISTRY_TOKEN, REGISTER_INSTANT_METRIC_TOKEN } from '@tramvai/tokens-metrics';
|
|
5
5
|
import { measure } from '@tinkoff/measure-express-requests';
|
|
@@ -68,18 +68,22 @@ const getUrlAndOptions = (args) => {
|
|
|
68
68
|
const urlWOQuery = parsedUrl.origin + parsedUrl.pathname;
|
|
69
69
|
return [urlWOQuery, options || {}];
|
|
70
70
|
};
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
71
|
+
// in seconds
|
|
72
|
+
const getDuration = (current, prev) =>
|
|
73
|
+
// max to avoid negative values and turn that into zero
|
|
74
|
+
prev === 0 ? 0 : Math.max((current - prev) / 1000, 0);
|
|
75
|
+
const createRequestWithMetrics = ({ metricsInstances: { requestsTotal, requestsErrors, requestsDuration, dnsResolveDuration, tcpConnectDuration, tlsHandshakeDuration, }, getServiceName, config, }) => function requestWithMetrics(originalRequest, ...args) {
|
|
74
76
|
const [url, options] = getUrlAndOptions(args);
|
|
75
77
|
const serviceName = getServiceName(url);
|
|
78
|
+
const req = originalRequest.apply(this, args);
|
|
79
|
+
const timerDone = requestsDuration.startTimer();
|
|
76
80
|
const labelsValues = {
|
|
77
81
|
method: options.method || 'unknown',
|
|
78
82
|
service: serviceName || new URL(url).origin || 'unknown',
|
|
79
83
|
status: 'unknown',
|
|
80
84
|
};
|
|
81
85
|
req.on('response', (res) => {
|
|
82
|
-
labelsValues.status = res.statusCode;
|
|
86
|
+
labelsValues.status = res.statusCode.toString();
|
|
83
87
|
if (res.statusCode >= 400) {
|
|
84
88
|
requestsErrors.inc(labelsValues);
|
|
85
89
|
}
|
|
@@ -94,10 +98,34 @@ const createRequestWithMetrics = ({ metricsInstances: { requestsTotal, requestsE
|
|
|
94
98
|
requestsErrors.inc(labelsValues);
|
|
95
99
|
timerDone(labelsValues);
|
|
96
100
|
});
|
|
101
|
+
if (config.enableConnectionResolveMetrics) {
|
|
102
|
+
req.on('socket', (socket) => {
|
|
103
|
+
const timings = {
|
|
104
|
+
start: Date.now(),
|
|
105
|
+
lookupEnd: 0,
|
|
106
|
+
connectEnd: 0,
|
|
107
|
+
secureConnectEnd: 0,
|
|
108
|
+
};
|
|
109
|
+
const { service } = labelsValues;
|
|
110
|
+
socket.on('lookup', () => {
|
|
111
|
+
timings.lookupEnd = Date.now();
|
|
112
|
+
dnsResolveDuration.observe({ service }, getDuration(timings.lookupEnd, timings.start));
|
|
113
|
+
});
|
|
114
|
+
socket.on('connect', () => {
|
|
115
|
+
timings.connectEnd = Date.now();
|
|
116
|
+
tcpConnectDuration.observe({ service }, getDuration(timings.connectEnd, timings.lookupEnd));
|
|
117
|
+
});
|
|
118
|
+
socket.on('secureConnect', () => {
|
|
119
|
+
timings.secureConnectEnd = Date.now();
|
|
120
|
+
tlsHandshakeDuration.observe({ service }, getDuration(timings.secureConnectEnd, timings.connectEnd));
|
|
121
|
+
});
|
|
122
|
+
});
|
|
123
|
+
}
|
|
97
124
|
return req;
|
|
98
125
|
};
|
|
99
126
|
|
|
100
|
-
const
|
|
127
|
+
const DEFAULT_BUCKETS = [0.01, 0.025, 0.05, 0.1, 0.25, 0.5, 1, 2.5, 5, 10, 20, 40, 60];
|
|
128
|
+
const initRequestsMetrics = ({ metrics, getServiceName, http, https, createRequestWithMetrics, config, }) => {
|
|
101
129
|
const metricsInstances = {
|
|
102
130
|
requestsTotal: metrics.counter({
|
|
103
131
|
name: 'http_sent_requests_total',
|
|
@@ -113,17 +141,36 @@ const initRequestsMetrics = ({ metrics, getServiceName, http, https, createReque
|
|
|
113
141
|
name: 'http_sent_requests_duration',
|
|
114
142
|
help: 'Execution time of the sent requests',
|
|
115
143
|
labelNames: ['status', 'method', 'service'],
|
|
144
|
+
buckets: DEFAULT_BUCKETS,
|
|
145
|
+
}),
|
|
146
|
+
dnsResolveDuration: metrics.histogram({
|
|
147
|
+
name: 'dns_resolve_duration',
|
|
148
|
+
help: 'Time for dns resolve of the outhgoing requests',
|
|
149
|
+
labelNames: ['service'],
|
|
150
|
+
buckets: DEFAULT_BUCKETS,
|
|
151
|
+
}),
|
|
152
|
+
tcpConnectDuration: metrics.histogram({
|
|
153
|
+
name: 'tcp_connect_duration',
|
|
154
|
+
help: 'Duration of tcp connect of the outgoing requests',
|
|
155
|
+
labelNames: ['service'],
|
|
156
|
+
buckets: DEFAULT_BUCKETS,
|
|
157
|
+
}),
|
|
158
|
+
tlsHandshakeDuration: metrics.histogram({
|
|
159
|
+
name: 'tls_handshake_duration',
|
|
160
|
+
help: 'Duration of tls handshake of the outgoing requests',
|
|
161
|
+
labelNames: ['service'],
|
|
162
|
+
buckets: DEFAULT_BUCKETS,
|
|
116
163
|
}),
|
|
117
164
|
};
|
|
118
165
|
monkeypatch({
|
|
119
166
|
obj: https,
|
|
120
167
|
method: 'request',
|
|
121
|
-
handler: createRequestWithMetrics({ metricsInstances, getServiceName }),
|
|
168
|
+
handler: createRequestWithMetrics({ metricsInstances, getServiceName, config }),
|
|
122
169
|
});
|
|
123
170
|
monkeypatch({
|
|
124
171
|
obj: http,
|
|
125
172
|
method: 'request',
|
|
126
|
-
handler: createRequestWithMetrics({ metricsInstances, getServiceName }),
|
|
173
|
+
handler: createRequestWithMetrics({ metricsInstances, getServiceName, config }),
|
|
127
174
|
});
|
|
128
175
|
};
|
|
129
176
|
|
|
@@ -226,6 +273,8 @@ class MetricsServicesRegistry {
|
|
|
226
273
|
}
|
|
227
274
|
}
|
|
228
275
|
|
|
276
|
+
const METRICS_MODULE_CONFIG_TOKEN = createToken('metrics-module-config');
|
|
277
|
+
|
|
229
278
|
let RequestModule = class RequestModule {
|
|
230
279
|
};
|
|
231
280
|
RequestModule = __decorate([
|
|
@@ -234,7 +283,7 @@ RequestModule = __decorate([
|
|
|
234
283
|
{
|
|
235
284
|
provide: commandLineListTokens.init,
|
|
236
285
|
multi: true,
|
|
237
|
-
useFactory: ({ metrics, envManager, metricsServicesRegistry }) => {
|
|
286
|
+
useFactory: ({ metrics, envManager, metricsServicesRegistry, metricsModuleConfig, }) => {
|
|
238
287
|
if (!metrics) {
|
|
239
288
|
return noop;
|
|
240
289
|
}
|
|
@@ -242,7 +291,14 @@ RequestModule = __decorate([
|
|
|
242
291
|
const env = envManager.getAll();
|
|
243
292
|
metricsServicesRegistry.registerEnv(env);
|
|
244
293
|
const getServiceName = metricsServicesRegistry.getServiceName.bind(metricsServicesRegistry);
|
|
245
|
-
initRequestsMetrics({
|
|
294
|
+
initRequestsMetrics({
|
|
295
|
+
metrics,
|
|
296
|
+
getServiceName,
|
|
297
|
+
http,
|
|
298
|
+
https,
|
|
299
|
+
createRequestWithMetrics,
|
|
300
|
+
config: metricsModuleConfig,
|
|
301
|
+
});
|
|
246
302
|
};
|
|
247
303
|
},
|
|
248
304
|
deps: {
|
|
@@ -252,6 +308,7 @@ RequestModule = __decorate([
|
|
|
252
308
|
},
|
|
253
309
|
metricsServicesRegistry: METRICS_SERVICES_REGISTRY_TOKEN,
|
|
254
310
|
envManager: ENV_MANAGER_TOKEN,
|
|
311
|
+
metricsModuleConfig: METRICS_MODULE_CONFIG_TOKEN,
|
|
255
312
|
},
|
|
256
313
|
},
|
|
257
314
|
{
|
|
@@ -379,7 +436,7 @@ const eventLoopMetrics = (metrics) => {
|
|
|
379
436
|
const histogram = metrics.histogram({
|
|
380
437
|
name: NODEJS_EVENTLOOP_LAG,
|
|
381
438
|
help: 'Lag of event loop in seconds (setInterval based).',
|
|
382
|
-
buckets: [0.02, 0.1, 0.2, 0.5, 1, 3, 5],
|
|
439
|
+
buckets: [0.02, 0.1, 0.2, 0.5, 1, 3, 5, 7.5, 10],
|
|
383
440
|
});
|
|
384
441
|
startEventLoopLagMeasure(histogram);
|
|
385
442
|
};
|
|
@@ -390,11 +447,17 @@ MetricsModule = __decorate([
|
|
|
390
447
|
Module({
|
|
391
448
|
imports: [RequestModule, InstantMetricsModule],
|
|
392
449
|
providers: [
|
|
393
|
-
{
|
|
450
|
+
provide({
|
|
451
|
+
provide: METRICS_MODULE_CONFIG_TOKEN,
|
|
452
|
+
useValue: {
|
|
453
|
+
enableConnectionResolveMetrics: false,
|
|
454
|
+
},
|
|
455
|
+
}),
|
|
456
|
+
provide({
|
|
394
457
|
provide: 'metricsDefaultRegistry',
|
|
395
458
|
useClass: Registry,
|
|
396
|
-
},
|
|
397
|
-
{
|
|
459
|
+
}),
|
|
460
|
+
provide({
|
|
398
461
|
provide: METRICS_MODULE_TOKEN,
|
|
399
462
|
useFactory: ({ registry }) => {
|
|
400
463
|
collectDefaultMetrics({ register: registry });
|
|
@@ -409,8 +472,8 @@ MetricsModule = __decorate([
|
|
|
409
472
|
deps: {
|
|
410
473
|
registry: 'metricsDefaultRegistry',
|
|
411
474
|
},
|
|
412
|
-
},
|
|
413
|
-
{
|
|
475
|
+
}),
|
|
476
|
+
provide({
|
|
414
477
|
provide: WEB_APP_BEFORE_INIT_TOKEN,
|
|
415
478
|
useFactory: ({ metrics, app, additionalLabelNamesList, getAdditionalLabelValuesList, httpRequestsDurationBuckets, metricsExcludePaths, registry, }) => {
|
|
416
479
|
return () => {
|
|
@@ -456,8 +519,8 @@ MetricsModule = __decorate([
|
|
|
456
519
|
registry: 'metricsDefaultRegistry',
|
|
457
520
|
},
|
|
458
521
|
multi: true,
|
|
459
|
-
},
|
|
460
|
-
{
|
|
522
|
+
}),
|
|
523
|
+
provide({
|
|
461
524
|
provide: WEB_APP_BEFORE_INIT_TOKEN,
|
|
462
525
|
useFactory: ({ metrics }) => {
|
|
463
526
|
return () => {
|
|
@@ -468,9 +531,9 @@ MetricsModule = __decorate([
|
|
|
468
531
|
metrics: METRICS_MODULE_TOKEN,
|
|
469
532
|
},
|
|
470
533
|
multi: true,
|
|
471
|
-
},
|
|
534
|
+
}),
|
|
472
535
|
],
|
|
473
536
|
})
|
|
474
537
|
], MetricsModule);
|
|
475
538
|
|
|
476
|
-
export { MetricsModule };
|
|
539
|
+
export { METRICS_MODULE_CONFIG_TOKEN, MetricsModule };
|
package/lib/server.js
CHANGED
|
@@ -82,18 +82,22 @@ const getUrlAndOptions = (args) => {
|
|
|
82
82
|
const urlWOQuery = parsedUrl.origin + parsedUrl.pathname;
|
|
83
83
|
return [urlWOQuery, options || {}];
|
|
84
84
|
};
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
85
|
+
// in seconds
|
|
86
|
+
const getDuration = (current, prev) =>
|
|
87
|
+
// max to avoid negative values and turn that into zero
|
|
88
|
+
prev === 0 ? 0 : Math.max((current - prev) / 1000, 0);
|
|
89
|
+
const createRequestWithMetrics = ({ metricsInstances: { requestsTotal, requestsErrors, requestsDuration, dnsResolveDuration, tcpConnectDuration, tlsHandshakeDuration, }, getServiceName, config, }) => function requestWithMetrics(originalRequest, ...args) {
|
|
88
90
|
const [url, options] = getUrlAndOptions(args);
|
|
89
91
|
const serviceName = getServiceName(url);
|
|
92
|
+
const req = originalRequest.apply(this, args);
|
|
93
|
+
const timerDone = requestsDuration.startTimer();
|
|
90
94
|
const labelsValues = {
|
|
91
95
|
method: options.method || 'unknown',
|
|
92
96
|
service: serviceName || new URL(url).origin || 'unknown',
|
|
93
97
|
status: 'unknown',
|
|
94
98
|
};
|
|
95
99
|
req.on('response', (res) => {
|
|
96
|
-
labelsValues.status = res.statusCode;
|
|
100
|
+
labelsValues.status = res.statusCode.toString();
|
|
97
101
|
if (res.statusCode >= 400) {
|
|
98
102
|
requestsErrors.inc(labelsValues);
|
|
99
103
|
}
|
|
@@ -108,10 +112,34 @@ const createRequestWithMetrics = ({ metricsInstances: { requestsTotal, requestsE
|
|
|
108
112
|
requestsErrors.inc(labelsValues);
|
|
109
113
|
timerDone(labelsValues);
|
|
110
114
|
});
|
|
115
|
+
if (config.enableConnectionResolveMetrics) {
|
|
116
|
+
req.on('socket', (socket) => {
|
|
117
|
+
const timings = {
|
|
118
|
+
start: Date.now(),
|
|
119
|
+
lookupEnd: 0,
|
|
120
|
+
connectEnd: 0,
|
|
121
|
+
secureConnectEnd: 0,
|
|
122
|
+
};
|
|
123
|
+
const { service } = labelsValues;
|
|
124
|
+
socket.on('lookup', () => {
|
|
125
|
+
timings.lookupEnd = Date.now();
|
|
126
|
+
dnsResolveDuration.observe({ service }, getDuration(timings.lookupEnd, timings.start));
|
|
127
|
+
});
|
|
128
|
+
socket.on('connect', () => {
|
|
129
|
+
timings.connectEnd = Date.now();
|
|
130
|
+
tcpConnectDuration.observe({ service }, getDuration(timings.connectEnd, timings.lookupEnd));
|
|
131
|
+
});
|
|
132
|
+
socket.on('secureConnect', () => {
|
|
133
|
+
timings.secureConnectEnd = Date.now();
|
|
134
|
+
tlsHandshakeDuration.observe({ service }, getDuration(timings.secureConnectEnd, timings.connectEnd));
|
|
135
|
+
});
|
|
136
|
+
});
|
|
137
|
+
}
|
|
111
138
|
return req;
|
|
112
139
|
};
|
|
113
140
|
|
|
114
|
-
const
|
|
141
|
+
const DEFAULT_BUCKETS = [0.01, 0.025, 0.05, 0.1, 0.25, 0.5, 1, 2.5, 5, 10, 20, 40, 60];
|
|
142
|
+
const initRequestsMetrics = ({ metrics, getServiceName, http, https, createRequestWithMetrics, config, }) => {
|
|
115
143
|
const metricsInstances = {
|
|
116
144
|
requestsTotal: metrics.counter({
|
|
117
145
|
name: 'http_sent_requests_total',
|
|
@@ -127,17 +155,36 @@ const initRequestsMetrics = ({ metrics, getServiceName, http, https, createReque
|
|
|
127
155
|
name: 'http_sent_requests_duration',
|
|
128
156
|
help: 'Execution time of the sent requests',
|
|
129
157
|
labelNames: ['status', 'method', 'service'],
|
|
158
|
+
buckets: DEFAULT_BUCKETS,
|
|
159
|
+
}),
|
|
160
|
+
dnsResolveDuration: metrics.histogram({
|
|
161
|
+
name: 'dns_resolve_duration',
|
|
162
|
+
help: 'Time for dns resolve of the outhgoing requests',
|
|
163
|
+
labelNames: ['service'],
|
|
164
|
+
buckets: DEFAULT_BUCKETS,
|
|
165
|
+
}),
|
|
166
|
+
tcpConnectDuration: metrics.histogram({
|
|
167
|
+
name: 'tcp_connect_duration',
|
|
168
|
+
help: 'Duration of tcp connect of the outgoing requests',
|
|
169
|
+
labelNames: ['service'],
|
|
170
|
+
buckets: DEFAULT_BUCKETS,
|
|
171
|
+
}),
|
|
172
|
+
tlsHandshakeDuration: metrics.histogram({
|
|
173
|
+
name: 'tls_handshake_duration',
|
|
174
|
+
help: 'Duration of tls handshake of the outgoing requests',
|
|
175
|
+
labelNames: ['service'],
|
|
176
|
+
buckets: DEFAULT_BUCKETS,
|
|
130
177
|
}),
|
|
131
178
|
};
|
|
132
179
|
monkeypatch__default["default"]({
|
|
133
180
|
obj: https,
|
|
134
181
|
method: 'request',
|
|
135
|
-
handler: createRequestWithMetrics({ metricsInstances, getServiceName }),
|
|
182
|
+
handler: createRequestWithMetrics({ metricsInstances, getServiceName, config }),
|
|
136
183
|
});
|
|
137
184
|
monkeypatch__default["default"]({
|
|
138
185
|
obj: http,
|
|
139
186
|
method: 'request',
|
|
140
|
-
handler: createRequestWithMetrics({ metricsInstances, getServiceName }),
|
|
187
|
+
handler: createRequestWithMetrics({ metricsInstances, getServiceName, config }),
|
|
141
188
|
});
|
|
142
189
|
};
|
|
143
190
|
|
|
@@ -240,6 +287,8 @@ class MetricsServicesRegistry {
|
|
|
240
287
|
}
|
|
241
288
|
}
|
|
242
289
|
|
|
290
|
+
const METRICS_MODULE_CONFIG_TOKEN = core.createToken('metrics-module-config');
|
|
291
|
+
|
|
243
292
|
let RequestModule = class RequestModule {
|
|
244
293
|
};
|
|
245
294
|
RequestModule = tslib.__decorate([
|
|
@@ -248,7 +297,7 @@ RequestModule = tslib.__decorate([
|
|
|
248
297
|
{
|
|
249
298
|
provide: core.commandLineListTokens.init,
|
|
250
299
|
multi: true,
|
|
251
|
-
useFactory: ({ metrics, envManager, metricsServicesRegistry }) => {
|
|
300
|
+
useFactory: ({ metrics, envManager, metricsServicesRegistry, metricsModuleConfig, }) => {
|
|
252
301
|
if (!metrics) {
|
|
253
302
|
return noop__default["default"];
|
|
254
303
|
}
|
|
@@ -256,7 +305,14 @@ RequestModule = tslib.__decorate([
|
|
|
256
305
|
const env = envManager.getAll();
|
|
257
306
|
metricsServicesRegistry.registerEnv(env);
|
|
258
307
|
const getServiceName = metricsServicesRegistry.getServiceName.bind(metricsServicesRegistry);
|
|
259
|
-
initRequestsMetrics({
|
|
308
|
+
initRequestsMetrics({
|
|
309
|
+
metrics,
|
|
310
|
+
getServiceName,
|
|
311
|
+
http: http__default["default"],
|
|
312
|
+
https: https__default["default"],
|
|
313
|
+
createRequestWithMetrics,
|
|
314
|
+
config: metricsModuleConfig,
|
|
315
|
+
});
|
|
260
316
|
};
|
|
261
317
|
},
|
|
262
318
|
deps: {
|
|
@@ -266,6 +322,7 @@ RequestModule = tslib.__decorate([
|
|
|
266
322
|
},
|
|
267
323
|
metricsServicesRegistry: tokensMetrics.METRICS_SERVICES_REGISTRY_TOKEN,
|
|
268
324
|
envManager: moduleCommon.ENV_MANAGER_TOKEN,
|
|
325
|
+
metricsModuleConfig: METRICS_MODULE_CONFIG_TOKEN,
|
|
269
326
|
},
|
|
270
327
|
},
|
|
271
328
|
{
|
|
@@ -393,7 +450,7 @@ const eventLoopMetrics = (metrics) => {
|
|
|
393
450
|
const histogram = metrics.histogram({
|
|
394
451
|
name: NODEJS_EVENTLOOP_LAG,
|
|
395
452
|
help: 'Lag of event loop in seconds (setInterval based).',
|
|
396
|
-
buckets: [0.02, 0.1, 0.2, 0.5, 1, 3, 5],
|
|
453
|
+
buckets: [0.02, 0.1, 0.2, 0.5, 1, 3, 5, 7.5, 10],
|
|
397
454
|
});
|
|
398
455
|
startEventLoopLagMeasure(histogram);
|
|
399
456
|
};
|
|
@@ -404,11 +461,17 @@ exports.MetricsModule = tslib.__decorate([
|
|
|
404
461
|
core.Module({
|
|
405
462
|
imports: [RequestModule, InstantMetricsModule],
|
|
406
463
|
providers: [
|
|
407
|
-
{
|
|
464
|
+
core.provide({
|
|
465
|
+
provide: METRICS_MODULE_CONFIG_TOKEN,
|
|
466
|
+
useValue: {
|
|
467
|
+
enableConnectionResolveMetrics: false,
|
|
468
|
+
},
|
|
469
|
+
}),
|
|
470
|
+
core.provide({
|
|
408
471
|
provide: 'metricsDefaultRegistry',
|
|
409
472
|
useClass: promClient.Registry,
|
|
410
|
-
},
|
|
411
|
-
{
|
|
473
|
+
}),
|
|
474
|
+
core.provide({
|
|
412
475
|
provide: tokensMetrics.METRICS_MODULE_TOKEN,
|
|
413
476
|
useFactory: ({ registry }) => {
|
|
414
477
|
promClient.collectDefaultMetrics({ register: registry });
|
|
@@ -423,8 +486,8 @@ exports.MetricsModule = tslib.__decorate([
|
|
|
423
486
|
deps: {
|
|
424
487
|
registry: 'metricsDefaultRegistry',
|
|
425
488
|
},
|
|
426
|
-
},
|
|
427
|
-
{
|
|
489
|
+
}),
|
|
490
|
+
core.provide({
|
|
428
491
|
provide: tokensServer.WEB_APP_BEFORE_INIT_TOKEN,
|
|
429
492
|
useFactory: ({ metrics, app, additionalLabelNamesList, getAdditionalLabelValuesList, httpRequestsDurationBuckets, metricsExcludePaths, registry, }) => {
|
|
430
493
|
return () => {
|
|
@@ -470,8 +533,8 @@ exports.MetricsModule = tslib.__decorate([
|
|
|
470
533
|
registry: 'metricsDefaultRegistry',
|
|
471
534
|
},
|
|
472
535
|
multi: true,
|
|
473
|
-
},
|
|
474
|
-
{
|
|
536
|
+
}),
|
|
537
|
+
core.provide({
|
|
475
538
|
provide: tokensServer.WEB_APP_BEFORE_INIT_TOKEN,
|
|
476
539
|
useFactory: ({ metrics }) => {
|
|
477
540
|
return () => {
|
|
@@ -482,7 +545,9 @@ exports.MetricsModule = tslib.__decorate([
|
|
|
482
545
|
metrics: tokensMetrics.METRICS_MODULE_TOKEN,
|
|
483
546
|
},
|
|
484
547
|
multi: true,
|
|
485
|
-
},
|
|
548
|
+
}),
|
|
486
549
|
],
|
|
487
550
|
})
|
|
488
551
|
], exports.MetricsModule);
|
|
552
|
+
|
|
553
|
+
exports.METRICS_MODULE_CONFIG_TOKEN = METRICS_MODULE_CONFIG_TOKEN;
|
package/lib/tokens.d.ts
ADDED
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@tramvai/module-metrics",
|
|
3
|
-
"version": "1.
|
|
3
|
+
"version": "1.63.1",
|
|
4
4
|
"description": "",
|
|
5
5
|
"browser": "lib/browser.js",
|
|
6
6
|
"main": "lib/server.js",
|
|
@@ -19,14 +19,14 @@
|
|
|
19
19
|
"build-for-publish": "true"
|
|
20
20
|
},
|
|
21
21
|
"dependencies": {
|
|
22
|
-
"@tramvai/core": "1.
|
|
23
|
-
"@tramvai/tokens-server": "1.
|
|
24
|
-
"@tramvai/tokens-metrics": "1.
|
|
25
|
-
"@tramvai/module-common": "1.
|
|
26
|
-
"@tramvai/tokens-http-client": "1.
|
|
27
|
-
"@tramvai/state": "1.
|
|
28
|
-
"@tramvai/papi": "1.
|
|
29
|
-
"@tinkoff/measure-express-requests": "1.4.
|
|
22
|
+
"@tramvai/core": "1.63.1",
|
|
23
|
+
"@tramvai/tokens-server": "1.63.1",
|
|
24
|
+
"@tramvai/tokens-metrics": "1.63.1",
|
|
25
|
+
"@tramvai/module-common": "1.63.1",
|
|
26
|
+
"@tramvai/tokens-http-client": "1.63.1",
|
|
27
|
+
"@tramvai/state": "1.63.1",
|
|
28
|
+
"@tramvai/papi": "1.63.1",
|
|
29
|
+
"@tinkoff/measure-express-requests": "1.4.3",
|
|
30
30
|
"@tinkoff/monkeypatch": "1.3.3",
|
|
31
31
|
"@tinkoff/url": "0.7.37",
|
|
32
32
|
"@tinkoff/utils": "^2.1.2",
|