@tramvai/module-metrics 2.111.1 → 2.117.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.
@@ -1,20 +1,22 @@
1
1
  const NODEJS_EVENTLOOP_LAG = 'nodejs_eventloop_setinterval_lag_seconds';
2
+ const RESOLUTION = 100;
2
3
  function startEventLoopLagMeasure(histogram) {
3
4
  let start = process.hrtime();
4
- const interval = 100;
5
- setInterval(() => {
5
+ const measure = () => {
6
6
  const delta = process.hrtime(start);
7
7
  const nanosec = delta[0] * 1e9 + delta[1];
8
8
  const ms = nanosec / 1e6;
9
- const lag = ms - interval;
9
+ const lag = ms - RESOLUTION;
10
10
  histogram.observe(lag / 1e3);
11
11
  start = process.hrtime();
12
- }, interval).unref();
12
+ setTimeout(measure, RESOLUTION).unref();
13
+ };
14
+ setTimeout(measure, RESOLUTION).unref();
13
15
  }
14
16
  const eventLoopMetrics = (metrics) => {
15
17
  const histogram = metrics.histogram({
16
18
  name: NODEJS_EVENTLOOP_LAG,
17
- help: 'Lag of event loop in seconds (setInterval based).',
19
+ help: 'Lag of event loop in seconds (setTimeout based).',
18
20
  buckets: [0.01, 0.02, 0.1, 0.2, 0.5, 1, 3, 5, 7.5, 10],
19
21
  });
20
22
  startEventLoopLagMeasure(histogram);
@@ -3,22 +3,24 @@
3
3
  Object.defineProperty(exports, '__esModule', { value: true });
4
4
 
5
5
  const NODEJS_EVENTLOOP_LAG = 'nodejs_eventloop_setinterval_lag_seconds';
6
+ const RESOLUTION = 100;
6
7
  function startEventLoopLagMeasure(histogram) {
7
8
  let start = process.hrtime();
8
- const interval = 100;
9
- setInterval(() => {
9
+ const measure = () => {
10
10
  const delta = process.hrtime(start);
11
11
  const nanosec = delta[0] * 1e9 + delta[1];
12
12
  const ms = nanosec / 1e6;
13
- const lag = ms - interval;
13
+ const lag = ms - RESOLUTION;
14
14
  histogram.observe(lag / 1e3);
15
15
  start = process.hrtime();
16
- }, interval).unref();
16
+ setTimeout(measure, RESOLUTION).unref();
17
+ };
18
+ setTimeout(measure, RESOLUTION).unref();
17
19
  }
18
20
  const eventLoopMetrics = (metrics) => {
19
21
  const histogram = metrics.histogram({
20
22
  name: NODEJS_EVENTLOOP_LAG,
21
- help: 'Lag of event loop in seconds (setInterval based).',
23
+ help: 'Lag of event loop in seconds (setTimeout based).',
22
24
  buckets: [0.01, 0.02, 0.1, 0.2, 0.5, 1, 3, 5, 7.5, 10],
23
25
  });
24
26
  startEventLoopLagMeasure(histogram);
@@ -5,7 +5,7 @@ import { uniqueId } from './uniqueId.browser.js';
5
5
 
6
6
  function startMeasurePerformance(name, startLabels = {}) {
7
7
  if (!supportsUserTiming) {
8
- return () => { };
8
+ return () => 0;
9
9
  }
10
10
  const endMeasure = startMeasure(name, uniqueId());
11
11
  return (endLabels = {}) => {
@@ -13,7 +13,7 @@ function startMeasurePerformance(name, startLabels = {}) {
13
13
  const labelsNames = Object.keys(labels)
14
14
  .map((key) => `${key}="${labels[key]}"`)
15
15
  .join(',');
16
- endMeasure(labelsNames && `${name}{${labelsNames}}`);
16
+ return endMeasure(labelsNames && `${name}{${labelsNames}}`);
17
17
  };
18
18
  }
19
19
  class PerfHistogram extends Histogram {
@@ -24,9 +24,13 @@ class PerfHistogram extends Histogram {
24
24
  startTimer(startLabels) {
25
25
  const endMeasure = startMeasurePerformance(this.name, startLabels);
26
26
  return (endLabels) => {
27
- endMeasure(endLabels);
27
+ return endMeasure(endLabels);
28
28
  };
29
29
  }
30
+ zero(labels) {
31
+ // need to set metric for labels to 0
32
+ this.startTimer(labels)();
33
+ }
30
34
  }
31
35
  class PerfSummary extends Summary {
32
36
  constructor(configurator) {
@@ -36,7 +40,7 @@ class PerfSummary extends Summary {
36
40
  startTimer() {
37
41
  const endMeasure = startMeasurePerformance(this.name);
38
42
  return (endLabels) => {
39
- endMeasure(endLabels);
43
+ return endMeasure(endLabels);
40
44
  };
41
45
  }
42
46
  }
@@ -48,7 +52,7 @@ class PerfGauge extends Gauge {
48
52
  startTimer(startLabels) {
49
53
  const endMeasure = startMeasurePerformance(this.name, startLabels);
50
54
  return (endLabels) => {
51
- endMeasure(endLabels);
55
+ return endMeasure(endLabels);
52
56
  };
53
57
  }
54
58
  }
@@ -1,6 +1,6 @@
1
1
  import { Gauge, Histogram, Summary } from '@tinkoff/metrics-noop';
2
2
  type Labels<T extends string> = Record<T, string | number>;
3
- export declare function startMeasurePerformance<T extends string>(name: string, startLabels?: Labels<T>): (endLabels?: Labels<T>) => void;
3
+ export declare function startMeasurePerformance<T extends string>(name: string, startLabels?: Labels<T>): (endLabels?: Labels<T>) => number;
4
4
  interface PerfMetricConfigurator {
5
5
  name: string;
6
6
  [key: string]: unknown;
@@ -8,16 +8,17 @@ interface PerfMetricConfigurator {
8
8
  export declare class PerfHistogram extends Histogram {
9
9
  name: string;
10
10
  constructor(configurator: PerfMetricConfigurator);
11
- startTimer(startLabels?: Labels<string>): (endLabels?: Labels<string>) => void;
11
+ startTimer(startLabels?: Labels<string>): (endLabels?: Labels<string>) => number;
12
+ zero(labels?: Labels<string>): void;
12
13
  }
13
14
  export declare class PerfSummary extends Summary {
14
15
  name: string;
15
16
  constructor(configurator: PerfMetricConfigurator);
16
- startTimer(): (endLabels?: Labels<string>) => void;
17
+ startTimer(): (endLabels?: Labels<string>) => number;
17
18
  }
18
19
  export declare class PerfGauge extends Gauge {
19
20
  name: string;
20
21
  constructor(configurator: PerfMetricConfigurator);
21
- startTimer(startLabels?: Labels<string>): (endLabels?: Labels<string>) => void;
22
+ startTimer(startLabels?: Labels<string>): (endLabels?: Labels<string>) => number;
22
23
  }
23
24
  export {};
@@ -2,11 +2,13 @@ function startMeasure(markName, uniqueMarkId) {
2
2
  const uniqueMarkName = `${markName}:${uniqueMarkId}`;
3
3
  performance.mark(uniqueMarkName);
4
4
  function endMeasure(measureName) {
5
+ let duration = 0;
5
6
  try {
6
- performance.measure(measureName || markName, uniqueMarkName);
7
+ duration = performance.measure(measureName || markName, uniqueMarkName).duration;
7
8
  }
8
9
  catch (e) { }
9
10
  performance.clearMarks(uniqueMarkName);
11
+ return duration;
10
12
  }
11
13
  return endMeasure;
12
14
  }
@@ -1,2 +1,2 @@
1
- declare function startMeasure(markName: string, uniqueMarkId: number): (measureName?: string) => void;
1
+ declare function startMeasure(markName: string, uniqueMarkId: number): (measureName?: string) => number;
2
2
  export { startMeasure };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@tramvai/module-metrics",
3
- "version": "2.111.1",
3
+ "version": "2.117.0",
4
4
  "description": "",
5
5
  "browser": "lib/browser.js",
6
6
  "main": "lib/server.js",
@@ -18,23 +18,23 @@
18
18
  "watch": "tsc -w"
19
19
  },
20
20
  "dependencies": {
21
- "@tramvai/core": "2.111.1",
22
- "@tramvai/tokens-common": "2.111.1",
23
- "@tramvai/tokens-core-private": "2.111.1",
24
- "@tramvai/tokens-server": "2.111.1",
25
- "@tramvai/tokens-server-private": "2.111.1",
26
- "@tramvai/tokens-metrics": "2.111.1",
27
- "@tramvai/tokens-router": "2.111.1",
28
- "@tramvai/tokens-http-client": "2.111.1",
29
- "@tramvai/state": "2.111.1",
30
- "@tramvai/papi": "2.111.1",
31
- "@tinkoff/measure-fastify-requests": "0.1.8",
21
+ "@tramvai/core": "2.117.0",
22
+ "@tramvai/tokens-common": "2.117.0",
23
+ "@tramvai/tokens-core-private": "2.117.0",
24
+ "@tramvai/tokens-server": "2.117.0",
25
+ "@tramvai/tokens-server-private": "2.117.0",
26
+ "@tramvai/tokens-metrics": "2.117.0",
27
+ "@tramvai/tokens-router": "2.117.0",
28
+ "@tramvai/tokens-http-client": "2.117.0",
29
+ "@tramvai/state": "2.117.0",
30
+ "@tramvai/papi": "2.117.0",
31
+ "@tinkoff/measure-fastify-requests": "0.1.9",
32
32
  "@tinkoff/monkeypatch": "2.0.5",
33
33
  "@tinkoff/url": "0.8.6",
34
34
  "@tinkoff/utils": "^2.1.2",
35
- "prom-client": "^12.0.0",
35
+ "prom-client": "^14.2.0",
36
36
  "@tinkoff/logger": "0.10.63",
37
- "@tinkoff/metrics-noop": "2.0.6",
37
+ "@tinkoff/metrics-noop": "2.1.0",
38
38
  "@tinkoff/browser-timings": "0.10.6"
39
39
  },
40
40
  "peerDependencies": {