@tramvai/module-metrics 1.90.6 → 1.92.0

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 CHANGED
@@ -156,6 +156,25 @@ fetch(url).then(() => {
156
156
  });
157
157
  ```
158
158
 
159
+ ### Use custom port for metrics endpoint
160
+
161
+ It can be done with token `METRICS_MODULE_CONFIG_TOKEN` and its property `port`:
162
+
163
+ ```ts
164
+ import { provide } from '@tramvai/core';
165
+ import { METRICS_MODULE_CONFIG_TOKEN } from '@tramvai/tokens-metrics';
166
+
167
+ const providers = [
168
+ provide({
169
+ provide: METRICS_MODULE_CONFIG_TOKEN,
170
+ useValue: {
171
+ enableConnectionResolveMetrics: true,
172
+ port: 3001,
173
+ },
174
+ }),
175
+ ];
176
+ ```
177
+
159
178
  ## Debug
160
179
 
161
180
  The module uses loggers with the next ids: `metrics:perf`, `metrics:papi`
package/lib/browser.d.ts CHANGED
@@ -1,2 +1,3 @@
1
+ export * from '@tramvai/tokens-metrics';
1
2
  export declare class MetricsModule {
2
3
  }
package/lib/browser.js CHANGED
@@ -2,6 +2,7 @@ import { __decorate } from 'tslib';
2
2
  import { Module, commandLineListTokens, Scope } from '@tramvai/core';
3
3
  import { COMBINE_REDUCERS, CONTEXT_TOKEN, LOGGER_TOKEN } from '@tramvai/module-common';
4
4
  import { METRICS_MODULE_TOKEN } from '@tramvai/tokens-metrics';
5
+ export * from '@tramvai/tokens-metrics';
5
6
  import { browserTimings } from '@tinkoff/browser-timings';
6
7
  import { Histogram, Summary, Gauge, Counter } from '@tinkoff/metrics-noop';
7
8
  import { PAPI_SERVICE } from '@tramvai/tokens-http-client';
@@ -1,4 +1,5 @@
1
- import type { MetricsModule, GetServiceName, CreateRequestWithMetrics, HttpModule, HttpsModule, ModuleConfig } from './types';
1
+ import type { ModuleConfig } from '@tramvai/tokens-metrics';
2
+ import type { MetricsModule, GetServiceName, CreateRequestWithMetrics, HttpModule, HttpsModule } from './types';
2
3
  export declare const initRequestsMetrics: ({ metrics, getServiceName, http, https, createRequestWithMetrics, config, }: {
3
4
  metrics: MetricsModule;
4
5
  http: HttpModule;
@@ -3,10 +3,7 @@ import type { RequestOptions, IncomingMessage, ClientRequest } from 'http';
3
3
  import type httpType from 'http';
4
4
  import type httpsType from 'https';
5
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
- };
6
+ import type { METRICS_MODULE_TOKEN, METRICS_SERVICES_REGISTRY_TOKEN, ModuleConfig } from '@tramvai/tokens-metrics';
10
7
  export declare type MetricsModule = typeof METRICS_MODULE_TOKEN;
11
8
  export declare type HttpModule = typeof httpType;
12
9
  export declare type HttpsModule = typeof httpsType;
package/lib/server.d.ts CHANGED
@@ -1,4 +1,3 @@
1
- import { METRICS_MODULE_CONFIG_TOKEN } from './tokens';
1
+ export * from '@tramvai/tokens-metrics';
2
2
  export declare class MetricsModule {
3
3
  }
4
- export { METRICS_MODULE_CONFIG_TOKEN };
package/lib/server.es.js CHANGED
@@ -1,11 +1,13 @@
1
1
  import { __decorate } from 'tslib';
2
- import { createToken, Module, commandLineListTokens, Scope, provide } from '@tramvai/core';
3
- import { SERVER_MODULE_PAPI_PUBLIC_ROUTE, SPECIAL_SERVER_PATHS } from '@tramvai/tokens-server';
4
- import { WEB_FASTIFY_APP_BEFORE_INIT_TOKEN, WEB_FASTIFY_APP_TOKEN } from '@tramvai/tokens-server-private';
5
- import { METRICS_MODULE_TOKEN, METRICS_SERVICES_REGISTRY_TOKEN, REGISTER_INSTANT_METRIC_TOKEN } from '@tramvai/tokens-metrics';
2
+ import { Module, commandLineListTokens, Scope, createToken, provide } from '@tramvai/core';
3
+ import { SERVER_MODULE_PAPI_PUBLIC_ROUTE, SERVER_TOKEN, SPECIAL_SERVER_PATHS } from '@tramvai/tokens-server';
4
+ import { SERVER_FACTORY_TOKEN, WEB_FASTIFY_APP_TOKEN, WEB_FASTIFY_APP_FACTORY_TOKEN, WEB_FASTIFY_APP_BEFORE_INIT_TOKEN } from '@tramvai/tokens-server-private';
5
+ import { METRICS_MODULE_TOKEN, METRICS_SERVICES_REGISTRY_TOKEN, METRICS_MODULE_CONFIG_TOKEN, REGISTER_INSTANT_METRIC_TOKEN } from '@tramvai/tokens-metrics';
6
+ export * from '@tramvai/tokens-metrics';
6
7
  import { measure } from '@tinkoff/measure-express-requests';
7
8
  import { Registry, collectDefaultMetrics, Counter, Gauge, Histogram, Summary } from 'prom-client';
8
9
  import flatten from '@tinkoff/utils/array/flatten';
10
+ import { ENV_MANAGER_TOKEN as ENV_MANAGER_TOKEN$1, LOGGER_TOKEN as LOGGER_TOKEN$1 } from '@tramvai/tokens-common';
9
11
  import { ENV_MANAGER_TOKEN, COMBINE_REDUCERS, LOGGER_TOKEN, CONTEXT_TOKEN } from '@tramvai/module-common';
10
12
  import noop from '@tinkoff/utils/function/noop';
11
13
  import https from 'https';
@@ -286,8 +288,6 @@ class MetricsServicesRegistry {
286
288
  }
287
289
  }
288
290
 
289
- const METRICS_MODULE_CONFIG_TOKEN = createToken('metrics-module-config');
290
-
291
291
  let RequestModule = class RequestModule {
292
292
  };
293
293
  RequestModule = __decorate([
@@ -454,6 +454,9 @@ const eventLoopMetrics = (metrics) => {
454
454
  startEventLoopLagMeasure(histogram);
455
455
  };
456
456
 
457
+ const METRICS_IS_CUSTOM_SERVER_TOKEN = createToken('metrics isCustomServer');
458
+ const METRICS_SERVER_TOKEN = createToken('metrics server');
459
+ const METRICS_WEB_APP_TOKEN = createToken('metrics webApp');
457
460
  let MetricsModule = class MetricsModule {
458
461
  };
459
462
  MetricsModule = __decorate([
@@ -486,6 +489,76 @@ MetricsModule = __decorate([
486
489
  registry: 'metricsDefaultRegistry',
487
490
  },
488
491
  }),
492
+ provide({
493
+ provide: METRICS_IS_CUSTOM_SERVER_TOKEN,
494
+ useFactory: ({ config, envManager }) => {
495
+ return config.port && +envManager.get('PORT') !== config.port;
496
+ },
497
+ deps: {
498
+ envManager: ENV_MANAGER_TOKEN$1,
499
+ config: METRICS_MODULE_CONFIG_TOKEN,
500
+ },
501
+ }),
502
+ provide({
503
+ provide: METRICS_SERVER_TOKEN,
504
+ scope: Scope.SINGLETON,
505
+ useFactory: ({ isCustomServer, serverFactory, server }) => {
506
+ return isCustomServer ? serverFactory() : server;
507
+ },
508
+ deps: {
509
+ isCustomServer: METRICS_IS_CUSTOM_SERVER_TOKEN,
510
+ server: SERVER_TOKEN,
511
+ serverFactory: SERVER_FACTORY_TOKEN,
512
+ },
513
+ }),
514
+ provide({
515
+ provide: METRICS_WEB_APP_TOKEN,
516
+ scope: Scope.SINGLETON,
517
+ useFactory: ({ isCustomServer, app, appFactory, server }) => {
518
+ return isCustomServer ? appFactory({ server }) : app;
519
+ },
520
+ deps: {
521
+ isCustomServer: METRICS_IS_CUSTOM_SERVER_TOKEN,
522
+ app: WEB_FASTIFY_APP_TOKEN,
523
+ appFactory: WEB_FASTIFY_APP_FACTORY_TOKEN,
524
+ server: METRICS_SERVER_TOKEN,
525
+ },
526
+ }),
527
+ provide({
528
+ provide: commandLineListTokens.listen,
529
+ multi: true,
530
+ scope: Scope.SINGLETON,
531
+ useFactory: ({ logger, isCustomServer, config, app, server }) => {
532
+ return async function metricsServerListen() {
533
+ if (!isCustomServer) {
534
+ return;
535
+ }
536
+ const log = logger('metrics:server');
537
+ const { port = 3001 } = config;
538
+ await app.ready();
539
+ return new Promise((resolve, reject) => {
540
+ server.once('error', (error) => {
541
+ log.error({ event: 'server-listen-port', error });
542
+ reject(error);
543
+ });
544
+ server.listen({
545
+ host: '',
546
+ port,
547
+ }, () => {
548
+ log.warn({ event: 'server-listen-port', message: `Server listen ${port} port` });
549
+ resolve();
550
+ });
551
+ });
552
+ };
553
+ },
554
+ deps: {
555
+ logger: LOGGER_TOKEN$1,
556
+ isCustomServer: METRICS_IS_CUSTOM_SERVER_TOKEN,
557
+ config: METRICS_MODULE_CONFIG_TOKEN,
558
+ app: METRICS_WEB_APP_TOKEN,
559
+ server: METRICS_SERVER_TOKEN,
560
+ },
561
+ }),
489
562
  provide({
490
563
  provide: WEB_FASTIFY_APP_BEFORE_INIT_TOKEN,
491
564
  useFactory: ({ app, metrics, additionalLabelNamesList, getAdditionalLabelValuesList, httpRequestsDurationBuckets, metricsExcludePaths, registry, }) => {
@@ -516,7 +589,7 @@ MetricsModule = __decorate([
516
589
  },
517
590
  deps: {
518
591
  metrics: METRICS_MODULE_TOKEN,
519
- app: WEB_FASTIFY_APP_TOKEN,
592
+ app: METRICS_WEB_APP_TOKEN,
520
593
  additionalLabelNamesList: {
521
594
  token: 'additionalLabelNames',
522
595
  multi: true,
@@ -552,4 +625,4 @@ MetricsModule = __decorate([
552
625
  })
553
626
  ], MetricsModule);
554
627
 
555
- export { METRICS_MODULE_CONFIG_TOKEN, MetricsModule };
628
+ export { MetricsModule };
package/lib/server.js CHANGED
@@ -10,6 +10,7 @@ var tokensMetrics = require('@tramvai/tokens-metrics');
10
10
  var measureExpressRequests = require('@tinkoff/measure-express-requests');
11
11
  var promClient = require('prom-client');
12
12
  var flatten = require('@tinkoff/utils/array/flatten');
13
+ var tokensCommon = require('@tramvai/tokens-common');
13
14
  var moduleCommon = require('@tramvai/module-common');
14
15
  var noop = require('@tinkoff/utils/function/noop');
15
16
  var https = require('https');
@@ -300,8 +301,6 @@ class MetricsServicesRegistry {
300
301
  }
301
302
  }
302
303
 
303
- const METRICS_MODULE_CONFIG_TOKEN = core.createToken('metrics-module-config');
304
-
305
304
  let RequestModule = class RequestModule {
306
305
  };
307
306
  RequestModule = tslib.__decorate([
@@ -335,7 +334,7 @@ RequestModule = tslib.__decorate([
335
334
  },
336
335
  metricsServicesRegistry: tokensMetrics.METRICS_SERVICES_REGISTRY_TOKEN,
337
336
  envManager: moduleCommon.ENV_MANAGER_TOKEN,
338
- metricsModuleConfig: METRICS_MODULE_CONFIG_TOKEN,
337
+ metricsModuleConfig: tokensMetrics.METRICS_MODULE_CONFIG_TOKEN,
339
338
  },
340
339
  },
341
340
  {
@@ -468,6 +467,9 @@ const eventLoopMetrics = (metrics) => {
468
467
  startEventLoopLagMeasure(histogram);
469
468
  };
470
469
 
470
+ const METRICS_IS_CUSTOM_SERVER_TOKEN = core.createToken('metrics isCustomServer');
471
+ const METRICS_SERVER_TOKEN = core.createToken('metrics server');
472
+ const METRICS_WEB_APP_TOKEN = core.createToken('metrics webApp');
471
473
  exports.MetricsModule = class MetricsModule {
472
474
  };
473
475
  exports.MetricsModule = tslib.__decorate([
@@ -475,7 +477,7 @@ exports.MetricsModule = tslib.__decorate([
475
477
  imports: [RequestModule, InstantMetricsModule],
476
478
  providers: [
477
479
  core.provide({
478
- provide: METRICS_MODULE_CONFIG_TOKEN,
480
+ provide: tokensMetrics.METRICS_MODULE_CONFIG_TOKEN,
479
481
  useValue: {
480
482
  enableConnectionResolveMetrics: false,
481
483
  },
@@ -500,6 +502,76 @@ exports.MetricsModule = tslib.__decorate([
500
502
  registry: 'metricsDefaultRegistry',
501
503
  },
502
504
  }),
505
+ core.provide({
506
+ provide: METRICS_IS_CUSTOM_SERVER_TOKEN,
507
+ useFactory: ({ config, envManager }) => {
508
+ return config.port && +envManager.get('PORT') !== config.port;
509
+ },
510
+ deps: {
511
+ envManager: tokensCommon.ENV_MANAGER_TOKEN,
512
+ config: tokensMetrics.METRICS_MODULE_CONFIG_TOKEN,
513
+ },
514
+ }),
515
+ core.provide({
516
+ provide: METRICS_SERVER_TOKEN,
517
+ scope: core.Scope.SINGLETON,
518
+ useFactory: ({ isCustomServer, serverFactory, server }) => {
519
+ return isCustomServer ? serverFactory() : server;
520
+ },
521
+ deps: {
522
+ isCustomServer: METRICS_IS_CUSTOM_SERVER_TOKEN,
523
+ server: tokensServer.SERVER_TOKEN,
524
+ serverFactory: tokensServerPrivate.SERVER_FACTORY_TOKEN,
525
+ },
526
+ }),
527
+ core.provide({
528
+ provide: METRICS_WEB_APP_TOKEN,
529
+ scope: core.Scope.SINGLETON,
530
+ useFactory: ({ isCustomServer, app, appFactory, server }) => {
531
+ return isCustomServer ? appFactory({ server }) : app;
532
+ },
533
+ deps: {
534
+ isCustomServer: METRICS_IS_CUSTOM_SERVER_TOKEN,
535
+ app: tokensServerPrivate.WEB_FASTIFY_APP_TOKEN,
536
+ appFactory: tokensServerPrivate.WEB_FASTIFY_APP_FACTORY_TOKEN,
537
+ server: METRICS_SERVER_TOKEN,
538
+ },
539
+ }),
540
+ core.provide({
541
+ provide: core.commandLineListTokens.listen,
542
+ multi: true,
543
+ scope: core.Scope.SINGLETON,
544
+ useFactory: ({ logger, isCustomServer, config, app, server }) => {
545
+ return async function metricsServerListen() {
546
+ if (!isCustomServer) {
547
+ return;
548
+ }
549
+ const log = logger('metrics:server');
550
+ const { port = 3001 } = config;
551
+ await app.ready();
552
+ return new Promise((resolve, reject) => {
553
+ server.once('error', (error) => {
554
+ log.error({ event: 'server-listen-port', error });
555
+ reject(error);
556
+ });
557
+ server.listen({
558
+ host: '',
559
+ port,
560
+ }, () => {
561
+ log.warn({ event: 'server-listen-port', message: `Server listen ${port} port` });
562
+ resolve();
563
+ });
564
+ });
565
+ };
566
+ },
567
+ deps: {
568
+ logger: tokensCommon.LOGGER_TOKEN,
569
+ isCustomServer: METRICS_IS_CUSTOM_SERVER_TOKEN,
570
+ config: tokensMetrics.METRICS_MODULE_CONFIG_TOKEN,
571
+ app: METRICS_WEB_APP_TOKEN,
572
+ server: METRICS_SERVER_TOKEN,
573
+ },
574
+ }),
503
575
  core.provide({
504
576
  provide: tokensServerPrivate.WEB_FASTIFY_APP_BEFORE_INIT_TOKEN,
505
577
  useFactory: ({ app, metrics, additionalLabelNamesList, getAdditionalLabelValuesList, httpRequestsDurationBuckets, metricsExcludePaths, registry, }) => {
@@ -530,7 +602,7 @@ exports.MetricsModule = tslib.__decorate([
530
602
  },
531
603
  deps: {
532
604
  metrics: tokensMetrics.METRICS_MODULE_TOKEN,
533
- app: tokensServerPrivate.WEB_FASTIFY_APP_TOKEN,
605
+ app: METRICS_WEB_APP_TOKEN,
534
606
  additionalLabelNamesList: {
535
607
  token: 'additionalLabelNames',
536
608
  multi: true,
@@ -566,4 +638,9 @@ exports.MetricsModule = tslib.__decorate([
566
638
  })
567
639
  ], exports.MetricsModule);
568
640
 
569
- exports.METRICS_MODULE_CONFIG_TOKEN = METRICS_MODULE_CONFIG_TOKEN;
641
+ Object.keys(tokensMetrics).forEach(function (k) {
642
+ if (k !== 'default' && !exports.hasOwnProperty(k)) Object.defineProperty(exports, k, {
643
+ enumerable: true,
644
+ get: function () { return tokensMetrics[k]; }
645
+ });
646
+ });
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@tramvai/module-metrics",
3
- "version": "1.90.6",
3
+ "version": "1.92.0",
4
4
  "description": "",
5
5
  "browser": "lib/browser.js",
6
6
  "main": "lib/server.js",
@@ -19,14 +19,15 @@
19
19
  "build-for-publish": "true"
20
20
  },
21
21
  "dependencies": {
22
- "@tramvai/core": "1.90.6",
23
- "@tramvai/tokens-server": "1.90.6",
24
- "@tramvai/tokens-server-private": "1.90.6",
25
- "@tramvai/tokens-metrics": "1.90.6",
26
- "@tramvai/module-common": "1.90.6",
27
- "@tramvai/tokens-http-client": "1.90.6",
28
- "@tramvai/state": "1.90.6",
29
- "@tramvai/papi": "1.90.6",
22
+ "@tramvai/core": "1.92.0",
23
+ "@tramvai/tokens-common": "1.92.0",
24
+ "@tramvai/tokens-server": "1.92.0",
25
+ "@tramvai/tokens-server-private": "1.92.0",
26
+ "@tramvai/tokens-metrics": "1.92.0",
27
+ "@tramvai/module-common": "1.92.0",
28
+ "@tramvai/tokens-http-client": "1.92.0",
29
+ "@tramvai/state": "1.92.0",
30
+ "@tramvai/papi": "1.92.0",
30
31
  "@tinkoff/measure-express-requests": "1.5.1",
31
32
  "@tinkoff/monkeypatch": "1.3.3",
32
33
  "@tinkoff/url": "0.7.37",
package/lib/tokens.d.ts DELETED
@@ -1,2 +0,0 @@
1
- import type { ModuleConfig } from './request/types';
2
- export declare const METRICS_MODULE_CONFIG_TOKEN: ModuleConfig;