@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.
@@ -1,11 +1,3 @@
1
- declare type Args = [Record<string, any> | string | URL, (res: Record<string, any>) => void] | [string | URL, Record<string, any>, (res: Record<string, any>) => void];
1
+ import type { Args, CreateRequestWithMetrics } from './types';
2
2
  export declare const getUrlAndOptions: (args: Args) => any[];
3
- export declare const createRequestWithMetrics: ({ metricsInstances: { requestsTotal, requestsErrors, requestsDuration }, getServiceName, }: {
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
- export declare const initRequestsMetrics: ({ metrics, getServiceName, http, https, createRequestWithMetrics, }: {
2
- metrics: any;
3
- getServiceName: any;
4
- http: any;
5
- https: any;
6
- createRequestWithMetrics: any;
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
@@ -1,2 +1,4 @@
1
+ import { METRICS_MODULE_CONFIG_TOKEN } from './tokens';
1
2
  export declare class MetricsModule {
2
3
  }
4
+ export { METRICS_MODULE_CONFIG_TOKEN };
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
- const createRequestWithMetrics = ({ metricsInstances: { requestsTotal, requestsErrors, requestsDuration }, getServiceName, }) => function requestWithMetrics(originalRequest, ...args) {
72
- const req = originalRequest.apply(this, args);
73
- const timerDone = requestsDuration.startTimer();
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 initRequestsMetrics = ({ metrics, getServiceName, http, https, createRequestWithMetrics, }) => {
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({ metrics, getServiceName, http, https, createRequestWithMetrics });
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
- const createRequestWithMetrics = ({ metricsInstances: { requestsTotal, requestsErrors, requestsDuration }, getServiceName, }) => function requestWithMetrics(originalRequest, ...args) {
86
- const req = originalRequest.apply(this, args);
87
- const timerDone = requestsDuration.startTimer();
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 initRequestsMetrics = ({ metrics, getServiceName, http, https, createRequestWithMetrics, }) => {
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({ metrics, getServiceName, http: http__default["default"], https: https__default["default"], createRequestWithMetrics });
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;
@@ -0,0 +1,2 @@
1
+ import type { ModuleConfig } from './request/types';
2
+ export declare const METRICS_MODULE_CONFIG_TOKEN: ModuleConfig;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@tramvai/module-metrics",
3
- "version": "1.60.2",
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.60.2",
23
- "@tramvai/tokens-server": "1.60.2",
24
- "@tramvai/tokens-metrics": "1.60.2",
25
- "@tramvai/module-common": "1.60.2",
26
- "@tramvai/tokens-http-client": "1.60.2",
27
- "@tramvai/state": "1.60.2",
28
- "@tramvai/papi": "1.60.2",
29
- "@tinkoff/measure-express-requests": "1.4.2",
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",