@sesamecare-oss/opentelemetry-node-metrics 1.0.0 → 1.1.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.
Files changed (81) hide show
  1. package/.eslintrc.js +1 -1
  2. package/.github/workflows/nodejs.yml +58 -0
  3. package/.prettierrc.js +1 -1
  4. package/CHANGELOG.md +7 -0
  5. package/LICENSE +21 -0
  6. package/README.md +5 -2
  7. package/build/{metrics/util.js → helpers/counterNames.js} +2 -3
  8. package/build/helpers/counterNames.js.map +1 -0
  9. package/build/helpers/processMetricsHelpers.d.ts +2 -0
  10. package/build/helpers/processMetricsHelpers.js +21 -0
  11. package/build/helpers/processMetricsHelpers.js.map +1 -0
  12. package/build/helpers/safeMemoryUsage.d.ts +1 -0
  13. package/build/helpers/safeMemoryUsage.js +12 -0
  14. package/build/helpers/safeMemoryUsage.js.map +1 -0
  15. package/build/index.d.ts +1 -1
  16. package/build/index.js +5 -4
  17. package/build/index.js.map +1 -1
  18. package/build/metrics/eventLoopLag.d.ts +3 -1
  19. package/build/metrics/eventLoopLag.js +10 -11
  20. package/build/metrics/eventLoopLag.js.map +1 -1
  21. package/build/metrics/gc.d.ts +6 -0
  22. package/build/metrics/gc.js +32 -0
  23. package/build/metrics/gc.js.map +1 -0
  24. package/build/metrics/heapSizeAndUsed.d.ts +6 -0
  25. package/build/metrics/heapSizeAndUsed.js +59 -0
  26. package/build/metrics/heapSizeAndUsed.js.map +1 -0
  27. package/build/metrics/heapSpacesSizeAndUsed.d.ts +6 -0
  28. package/build/metrics/heapSpacesSizeAndUsed.js +81 -0
  29. package/build/metrics/heapSpacesSizeAndUsed.js.map +1 -0
  30. package/build/metrics/index.d.ts +7 -0
  31. package/build/metrics/index.js +7 -0
  32. package/build/metrics/index.js.map +1 -1
  33. package/build/metrics/osMemoryHeap.d.ts +6 -0
  34. package/build/metrics/osMemoryHeap.js +27 -0
  35. package/build/metrics/osMemoryHeap.js.map +1 -0
  36. package/build/metrics/osMemoryHeapLinux.d.ts +6 -0
  37. package/build/metrics/osMemoryHeapLinux.js +83 -0
  38. package/build/metrics/osMemoryHeapLinux.js.map +1 -0
  39. package/build/metrics/processCpuTotal.d.ts +6 -0
  40. package/build/metrics/processCpuTotal.js +37 -0
  41. package/build/metrics/processCpuTotal.js.map +1 -0
  42. package/build/metrics/processMaxFileDescriptors.d.ts +3 -0
  43. package/build/metrics/processMaxFileDescriptors.js +38 -0
  44. package/build/metrics/processMaxFileDescriptors.js.map +1 -0
  45. package/build/metrics/processOpenFileDescriptors.d.ts +6 -0
  46. package/build/metrics/processOpenFileDescriptors.js +31 -0
  47. package/build/metrics/processOpenFileDescriptors.js.map +1 -0
  48. package/build/metrics/processResources.d.ts +6 -0
  49. package/build/metrics/processResources.js +36 -0
  50. package/build/metrics/processResources.js.map +1 -0
  51. package/build/metrics/processStartTime.d.ts +3 -0
  52. package/build/metrics/processStartTime.js +4 -4
  53. package/build/metrics/processStartTime.js.map +1 -1
  54. package/build/metrics/version.d.ts +3 -0
  55. package/build/metrics/version.js +4 -4
  56. package/build/metrics/version.js.map +1 -1
  57. package/build/tsconfig.build.tsbuildinfo +1 -1
  58. package/package.json +17 -19
  59. package/src/helpers/processMetricsHelpers.ts +25 -0
  60. package/src/helpers/safeMemoryUsage.ts +7 -0
  61. package/src/index.ts +4 -4
  62. package/src/metrics/eventLoopLag.ts +3 -7
  63. package/src/metrics/gc.ts +39 -0
  64. package/src/metrics/heapSizeAndUsed.ts +64 -0
  65. package/src/metrics/heapSpacesSizeAndUsed.ts +104 -0
  66. package/src/metrics/index.ts +7 -0
  67. package/src/metrics/osMemoryHeap.ts +31 -0
  68. package/src/metrics/osMemoryHeapLinux.ts +92 -0
  69. package/src/metrics/processCpuTotal.ts +47 -0
  70. package/src/metrics/processMaxFileDescriptors.ts +39 -0
  71. package/src/metrics/processOpenFileDescriptors.ts +30 -0
  72. package/src/metrics/processResources.ts +40 -0
  73. package/src/metrics/processStartTime.ts +3 -2
  74. package/src/metrics/version.ts +3 -2
  75. package/tsconfig.json +4 -2
  76. package/vitest.config.ts +1 -1
  77. package/.github/workflows/publish.yml +0 -49
  78. package/.github/workflows/pull_requests.yml +0 -26
  79. package/build/metrics/util.js.map +0 -1
  80. /package/build/{metrics/util.d.ts → helpers/counterNames.d.ts} +0 -0
  81. /package/src/{metrics/util.ts → helpers/counterNames.ts} +0 -0
@@ -0,0 +1,83 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.osMemoryHeapLinuxMetric = osMemoryHeapLinuxMetric;
7
+ const fs_1 = __importDefault(require("fs"));
8
+ const counterNames_1 = require("../helpers/counterNames");
9
+ const values = ['VmSize', 'VmRSS', 'VmData'];
10
+ const PROCESS_RESIDENT_MEMORY = 'process_resident_memory_bytes';
11
+ const PROCESS_VIRTUAL_MEMORY = 'process_virtual_memory_bytes';
12
+ const PROCESS_HEAP = 'process_heap_bytes';
13
+ function structureOutput(input) {
14
+ const returnValue = {};
15
+ input
16
+ .split('\n')
17
+ .filter((s) => values.some((value) => s.indexOf(value) === 0))
18
+ .forEach((string) => {
19
+ const split = string.split(':');
20
+ // Get the value
21
+ let value = split[1].trim();
22
+ // Remove trailing ` kb`
23
+ value = value.substring(0, value.length - 3);
24
+ // Make it into a number in bytes bytes
25
+ const numericValue = Number(value) * 1024;
26
+ returnValue[split[0]] = numericValue;
27
+ });
28
+ return returnValue;
29
+ }
30
+ function osMemoryHeapLinuxMetric(meter, config) {
31
+ let stats;
32
+ function getStats() {
33
+ if (stats !== undefined)
34
+ return stats;
35
+ try {
36
+ const stat = fs_1.default.readFileSync('/proc/self/status', 'utf8');
37
+ stats = structureOutput(stat);
38
+ }
39
+ catch {
40
+ stats = false;
41
+ }
42
+ setTimeout(() => {
43
+ stats = undefined;
44
+ }, 1000).unref();
45
+ return stats;
46
+ }
47
+ meter
48
+ .createObservableGauge((0, counterNames_1.prefixedName)(config, PROCESS_RESIDENT_MEMORY), {
49
+ description: 'Resident memory size in bytes.',
50
+ })
51
+ .addCallback((observable) => {
52
+ if (!getStats() || !stats) {
53
+ return;
54
+ }
55
+ observable.observe(stats.VmRSS, config?.labels);
56
+ });
57
+ meter
58
+ .createObservableGauge((0, counterNames_1.prefixedName)(config, PROCESS_VIRTUAL_MEMORY), {
59
+ description: 'Virtual memory size in bytes.',
60
+ })
61
+ .addCallback((observable) => {
62
+ if (!getStats() || !stats) {
63
+ return;
64
+ }
65
+ observable.observe(stats.VmSize, config?.labels);
66
+ });
67
+ meter
68
+ .createObservableGauge((0, counterNames_1.prefixedName)(config, PROCESS_HEAP), {
69
+ description: 'Process heap size in bytes.',
70
+ })
71
+ .addCallback((observable) => {
72
+ if (!getStats() || !stats) {
73
+ return;
74
+ }
75
+ observable.observe(stats.VmData, config?.labels);
76
+ });
77
+ }
78
+ osMemoryHeapLinuxMetric.metricNames = [
79
+ PROCESS_RESIDENT_MEMORY,
80
+ PROCESS_VIRTUAL_MEMORY,
81
+ PROCESS_HEAP,
82
+ ];
83
+ //# sourceMappingURL=osMemoryHeapLinux.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"osMemoryHeapLinux.js","sourceRoot":"","sources":["../../src/metrics/osMemoryHeapLinux.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,6 @@
1
+ import { Meter } from '@opentelemetry/api';
2
+ import { NodeMetricConfig } from '../types';
3
+ export declare function processCpuTotalMetric(meter: Meter, config?: NodeMetricConfig): void;
4
+ export declare namespace processCpuTotalMetric {
5
+ var metricNames: string[];
6
+ }
@@ -0,0 +1,37 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.processCpuTotalMetric = processCpuTotalMetric;
4
+ const counterNames_1 = require("../helpers/counterNames");
5
+ const PROCESS_CPU_USER_SECONDS = 'process_cpu_user_seconds_total';
6
+ const PROCESS_CPU_SYSTEM_SECONDS = 'process_cpu_system_seconds_total';
7
+ const PROCESS_CPU_SECONDS = 'process_cpu_seconds_total';
8
+ function processCpuTotalMetric(meter, config) {
9
+ let lastCpuUsage = process.cpuUsage();
10
+ const cpuUserUsageCounter = meter.createCounter((0, counterNames_1.prefixedName)(config, PROCESS_CPU_USER_SECONDS), {
11
+ description: 'Total user CPU time spent in seconds.',
12
+ });
13
+ const cpuSystemUsageCounter = meter.createCounter((0, counterNames_1.prefixedName)(config, PROCESS_CPU_SYSTEM_SECONDS), {
14
+ description: 'Total system CPU time spent in seconds.',
15
+ });
16
+ meter
17
+ .createObservableCounter((0, counterNames_1.prefixedName)(config, PROCESS_CPU_SECONDS), {
18
+ description: 'Total user and system CPU time spent in seconds.',
19
+ })
20
+ .addCallback((observable) => {
21
+ const cpuUsage = process.cpuUsage();
22
+ const userUsageSecs = (cpuUsage.user - lastCpuUsage.user) / 1e6;
23
+ const systemUsageSecs = (cpuUsage.system - lastCpuUsage.system) / 1e6;
24
+ lastCpuUsage = cpuUsage;
25
+ cpuUserUsageCounter.add(userUsageSecs, config?.labels);
26
+ cpuSystemUsageCounter.add(systemUsageSecs, config?.labels);
27
+ observable.observe((cpuUsage.user + cpuUsage.system) / 1e6, config?.labels);
28
+ });
29
+ cpuUserUsageCounter.add(lastCpuUsage.user / 1e6, config?.labels);
30
+ cpuSystemUsageCounter.add(lastCpuUsage.system / 1e6, config?.labels);
31
+ }
32
+ processCpuTotalMetric.metricNames = [
33
+ PROCESS_CPU_USER_SECONDS,
34
+ PROCESS_CPU_SYSTEM_SECONDS,
35
+ PROCESS_CPU_SECONDS,
36
+ ];
37
+ //# sourceMappingURL=processCpuTotal.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"processCpuTotal.js","sourceRoot":"","sources":["../../src/metrics/processCpuTotal.ts"],"names":[],"mappings":";;AASA,sDA+BC;AArCD,0DAAuD;AAEvD,MAAM,wBAAwB,GAAG,gCAAgC,CAAC;AAClE,MAAM,0BAA0B,GAAG,kCAAkC,CAAC;AACtE,MAAM,mBAAmB,GAAG,2BAA2B,CAAC;AAExD,SAAgB,qBAAqB,CAAC,KAAY,EAAE,MAAyB;IAC3E,IAAI,YAAY,GAAG,OAAO,CAAC,QAAQ,EAAE,CAAC;IAEtC,MAAM,mBAAmB,GAAG,KAAK,CAAC,aAAa,CAAC,IAAA,2BAAY,EAAC,MAAM,EAAE,wBAAwB,CAAC,EAAE;QAC9F,WAAW,EAAE,uCAAuC;KACrD,CAAC,CAAC;IAEH,MAAM,qBAAqB,GAAG,KAAK,CAAC,aAAa,CAC/C,IAAA,2BAAY,EAAC,MAAM,EAAE,0BAA0B,CAAC,EAChD;QACE,WAAW,EAAE,yCAAyC;KACvD,CACF,CAAC;IAEF,KAAK;SACF,uBAAuB,CAAC,IAAA,2BAAY,EAAC,MAAM,EAAE,mBAAmB,CAAC,EAAE;QAClE,WAAW,EAAE,kDAAkD;KAChE,CAAC;SACD,WAAW,CAAC,CAAC,UAAU,EAAE,EAAE;QAC1B,MAAM,QAAQ,GAAG,OAAO,CAAC,QAAQ,EAAE,CAAC;QACpC,MAAM,aAAa,GAAG,CAAC,QAAQ,CAAC,IAAI,GAAG,YAAY,CAAC,IAAI,CAAC,GAAG,GAAG,CAAC;QAChE,MAAM,eAAe,GAAG,CAAC,QAAQ,CAAC,MAAM,GAAG,YAAY,CAAC,MAAM,CAAC,GAAG,GAAG,CAAC;QACtE,YAAY,GAAG,QAAQ,CAAC;QAExB,mBAAmB,CAAC,GAAG,CAAC,aAAa,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC;QACvD,qBAAqB,CAAC,GAAG,CAAC,eAAe,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC;QAC3D,UAAU,CAAC,OAAO,CAAC,CAAC,QAAQ,CAAC,IAAI,GAAG,QAAQ,CAAC,MAAM,CAAC,GAAG,GAAG,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC;IAC9E,CAAC,CAAC,CAAC;IAEL,mBAAmB,CAAC,GAAG,CAAC,YAAY,CAAC,IAAI,GAAG,GAAG,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC;IACjE,qBAAqB,CAAC,GAAG,CAAC,YAAY,CAAC,MAAM,GAAG,GAAG,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC;AACvE,CAAC;AAED,qBAAqB,CAAC,WAAW,GAAG;IAClC,wBAAwB;IACxB,0BAA0B;IAC1B,mBAAmB;CACpB,CAAC"}
@@ -0,0 +1,3 @@
1
+ import { Meter } from '@opentelemetry/api';
2
+ import { NodeMetricConfig } from '../types';
3
+ export declare function processMaxFileDescriptorsMetric(meter: Meter, config?: NodeMetricConfig): void;
@@ -0,0 +1,38 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.processMaxFileDescriptorsMetric = processMaxFileDescriptorsMetric;
7
+ const fs_1 = __importDefault(require("fs"));
8
+ const counterNames_1 = require("../helpers/counterNames");
9
+ const PROCESS_MAX_FDS = 'process_max_fds';
10
+ let maxFds;
11
+ function processMaxFileDescriptorsMetric(meter, config) {
12
+ if (maxFds === undefined) {
13
+ // This will fail if a linux-like procfs is not available.
14
+ try {
15
+ const limits = fs_1.default.readFileSync('/proc/self/limits', 'utf8');
16
+ const lines = limits.split('\n');
17
+ for (const line of lines) {
18
+ if (line.startsWith('Max open files')) {
19
+ const parts = line.split(/ +/);
20
+ maxFds = Number(parts[1]);
21
+ break;
22
+ }
23
+ }
24
+ }
25
+ catch {
26
+ return;
27
+ }
28
+ }
29
+ if (maxFds === undefined) {
30
+ return;
31
+ }
32
+ meter
33
+ .createUpDownCounter((0, counterNames_1.prefixedName)(config, PROCESS_MAX_FDS), {
34
+ description: 'Maximum number of open file descriptors.',
35
+ })
36
+ .add(maxFds, config?.labels);
37
+ }
38
+ //# sourceMappingURL=processMaxFileDescriptors.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"processMaxFileDescriptors.js","sourceRoot":"","sources":["../../src/metrics/processMaxFileDescriptors.ts"],"names":[],"mappings":";;;;;AAWA,0EA2BC;AAtCD,4CAAoB;AAKpB,0DAAuD;AAEvD,MAAM,eAAe,GAAG,iBAAiB,CAAC;AAE1C,IAAI,MAA0B,CAAC;AAE/B,SAAgB,+BAA+B,CAAC,KAAY,EAAE,MAAyB;IACrF,IAAI,MAAM,KAAK,SAAS,EAAE,CAAC;QACzB,0DAA0D;QAC1D,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,YAAE,CAAC,YAAY,CAAC,mBAAmB,EAAE,MAAM,CAAC,CAAC;YAC5D,MAAM,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;YACjC,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;gBACzB,IAAI,IAAI,CAAC,UAAU,CAAC,gBAAgB,CAAC,EAAE,CAAC;oBACtC,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;oBAChC,MAAM,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;oBAC1B,MAAM;gBACR,CAAC;YACH,CAAC;QACH,CAAC;QAAC,MAAM,CAAC;YACP,OAAO;QACT,CAAC;IACH,CAAC;IAED,IAAI,MAAM,KAAK,SAAS,EAAE,CAAC;QACzB,OAAO;IACT,CAAC;IAED,KAAK;SACF,mBAAmB,CAAC,IAAA,2BAAY,EAAC,MAAM,EAAE,eAAe,CAAC,EAAE;QAC1D,WAAW,EAAE,0CAA0C;KACxD,CAAC;SACD,GAAG,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC;AACjC,CAAC"}
@@ -0,0 +1,6 @@
1
+ import { Meter } from '@opentelemetry/api';
2
+ import { NodeMetricConfig } from '../types';
3
+ export declare function processOpenFileDescriptorsMetric(meter: Meter, config?: NodeMetricConfig): void;
4
+ export declare namespace processOpenFileDescriptorsMetric {
5
+ var metricNames: string[];
6
+ }
@@ -0,0 +1,31 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.processOpenFileDescriptorsMetric = processOpenFileDescriptorsMetric;
7
+ const fs_1 = __importDefault(require("fs"));
8
+ const node_process_1 = __importDefault(require("node:process"));
9
+ const counterNames_1 = require("../helpers/counterNames");
10
+ const PROCESS_OPEN_FDS = 'process_open_fds';
11
+ function processOpenFileDescriptorsMetric(meter, config) {
12
+ if (node_process_1.default.platform !== 'linux')
13
+ return;
14
+ meter
15
+ .createObservableGauge((0, counterNames_1.prefixedName)(config, PROCESS_OPEN_FDS), {
16
+ description: 'Number of open file descriptors.',
17
+ })
18
+ .addCallback((observable) => {
19
+ try {
20
+ const fds = fs_1.default.readdirSync('/proc/self/fd');
21
+ // Minus 1 to not count the fd that was used by readdirSync(),
22
+ // it's now closed.
23
+ observable.observe(fds.length - 1, config?.labels);
24
+ }
25
+ catch {
26
+ // noop
27
+ }
28
+ });
29
+ }
30
+ processOpenFileDescriptorsMetric.metricNames = [PROCESS_OPEN_FDS];
31
+ //# sourceMappingURL=processOpenFileDescriptors.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"processOpenFileDescriptors.js","sourceRoot":"","sources":["../../src/metrics/processOpenFileDescriptors.ts"],"names":[],"mappings":";;;;;AAUA,4EAiBC;AA3BD,4CAAoB;AACpB,gEAAmC;AAKnC,0DAAuD;AAEvD,MAAM,gBAAgB,GAAG,kBAAkB,CAAC;AAE5C,SAAgB,gCAAgC,CAAC,KAAY,EAAE,MAAyB;IACtF,IAAI,sBAAO,CAAC,QAAQ,KAAK,OAAO;QAAE,OAAO;IAEzC,KAAK;SACF,qBAAqB,CAAC,IAAA,2BAAY,EAAC,MAAM,EAAE,gBAAgB,CAAC,EAAE;QAC7D,WAAW,EAAE,kCAAkC;KAChD,CAAC;SACD,WAAW,CAAC,CAAC,UAAU,EAAE,EAAE;QAC1B,IAAI,CAAC;YACH,MAAM,GAAG,GAAG,YAAE,CAAC,WAAW,CAAC,eAAe,CAAC,CAAC;YAC5C,8DAA8D;YAC9D,mBAAmB;YACnB,UAAU,CAAC,OAAO,CAAC,GAAG,CAAC,MAAM,GAAG,CAAC,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC;QACrD,CAAC;QAAC,MAAM,CAAC;YACP,OAAO;QACT,CAAC;IACH,CAAC,CAAC,CAAC;AACP,CAAC;AAED,gCAAgC,CAAC,WAAW,GAAG,CAAC,gBAAgB,CAAC,CAAC"}
@@ -0,0 +1,6 @@
1
+ import { Meter } from '@opentelemetry/api';
2
+ import { NodeMetricConfig } from '../types';
3
+ export declare function processHandlesMetric(meter: Meter, config?: NodeMetricConfig): void;
4
+ export declare namespace processHandlesMetric {
5
+ var metricNames: string[];
6
+ }
@@ -0,0 +1,36 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.processHandlesMetric = processHandlesMetric;
7
+ const node_process_1 = __importDefault(require("node:process"));
8
+ const processMetricsHelpers_1 = require("../helpers/processMetricsHelpers");
9
+ const counterNames_1 = require("../helpers/counterNames");
10
+ const NODEJS_ACTIVE_RESOURCES = 'nodejs_active_resources';
11
+ const NODEJS_ACTIVE_RESOURCES_TOTAL = 'nodejs_active_resources_total';
12
+ function processHandlesMetric(meter, config) {
13
+ const { getActiveResourcesInfo } = node_process_1.default;
14
+ // Don't do anything if the function is not available
15
+ if (typeof getActiveResourcesInfo !== 'function') {
16
+ return;
17
+ }
18
+ const aggregateByObjectName = (0, processMetricsHelpers_1.createAggregatorByObjectName)();
19
+ meter
20
+ .createObservableGauge((0, counterNames_1.prefixedName)(config, NODEJS_ACTIVE_RESOURCES), {
21
+ description: 'Number of active libuv handles grouped by handle type. Every handle type is C++ class name.',
22
+ })
23
+ .addCallback((observable) => {
24
+ aggregateByObjectName(observable, config?.labels, getActiveResourcesInfo());
25
+ });
26
+ meter
27
+ .createObservableGauge((0, counterNames_1.prefixedName)(config, NODEJS_ACTIVE_RESOURCES_TOTAL), {
28
+ description: 'Total number of active handles.',
29
+ })
30
+ .addCallback((observable) => {
31
+ const handles = getActiveResourcesInfo();
32
+ observable.observe(handles.length, config?.labels);
33
+ });
34
+ }
35
+ processHandlesMetric.metricNames = [NODEJS_ACTIVE_RESOURCES, NODEJS_ACTIVE_RESOURCES_TOTAL];
36
+ //# sourceMappingURL=processResources.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"processResources.js","sourceRoot":"","sources":["../../src/metrics/processResources.ts"],"names":[],"mappings":";;;;;AAWA,oDA0BC;AArCD,gEAAuC;AAKvC,4EAAgF;AAChF,0DAAuD;AAEvD,MAAM,uBAAuB,GAAG,yBAAyB,CAAC;AAC1D,MAAM,6BAA6B,GAAG,+BAA+B,CAAC;AAEtE,SAAgB,oBAAoB,CAAC,KAAY,EAAE,MAAyB;IAC1E,MAAM,EAAE,sBAAsB,EAAE,GAAG,sBAA0D,CAAC;IAE9F,qDAAqD;IACrD,IAAI,OAAO,sBAAsB,KAAK,UAAU,EAAE,CAAC;QACjD,OAAO;IACT,CAAC;IAED,MAAM,qBAAqB,GAAG,IAAA,oDAA4B,GAAE,CAAC;IAC7D,KAAK;SACF,qBAAqB,CAAC,IAAA,2BAAY,EAAC,MAAM,EAAE,uBAAuB,CAAC,EAAE;QACpE,WAAW,EACT,6FAA6F;KAChG,CAAC;SACD,WAAW,CAAC,CAAC,UAAU,EAAE,EAAE;QAC1B,qBAAqB,CAAC,UAAU,EAAE,MAAM,EAAE,MAAM,EAAE,sBAAsB,EAAE,CAAC,CAAC;IAC9E,CAAC,CAAC,CAAC;IAEL,KAAK;SACF,qBAAqB,CAAC,IAAA,2BAAY,EAAC,MAAM,EAAE,6BAA6B,CAAC,EAAE;QAC1E,WAAW,EAAE,iCAAiC;KAC/C,CAAC;SACD,WAAW,CAAC,CAAC,UAAU,EAAE,EAAE;QAC1B,MAAM,OAAO,GAAG,sBAAsB,EAAE,CAAC;QACzC,UAAU,CAAC,OAAO,CAAC,OAAO,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC;IACrD,CAAC,CAAC,CAAC;AACP,CAAC;AAED,oBAAoB,CAAC,WAAW,GAAG,CAAC,uBAAuB,EAAE,6BAA6B,CAAC,CAAC"}
@@ -1,3 +1,6 @@
1
1
  import { Meter } from '@opentelemetry/api';
2
2
  import { NodeMetricConfig } from '../types';
3
3
  export declare function processStartTimeMetric(meter: Meter, config?: NodeMetricConfig): void;
4
+ export declare namespace processStartTimeMetric {
5
+ var metricNames: string[];
6
+ }
@@ -1,15 +1,15 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.processStartTimeMetric = void 0;
4
- const util_1 = require("./util");
3
+ exports.processStartTimeMetric = processStartTimeMetric;
4
+ const counterNames_1 = require("../helpers/counterNames");
5
5
  const startInSeconds = Math.round(Date.now() / 1000 - process.uptime());
6
6
  const PROCESS_START_TIME = 'process_start_time_seconds';
7
7
  function processStartTimeMetric(meter, config) {
8
8
  meter
9
- .createUpDownCounter((0, util_1.prefixedName)(config, PROCESS_START_TIME), {
9
+ .createUpDownCounter((0, counterNames_1.prefixedName)(config, PROCESS_START_TIME), {
10
10
  description: 'Start time of the process since unix epoch in seconds.',
11
11
  })
12
12
  .add(startInSeconds, config?.labels);
13
13
  }
14
- exports.processStartTimeMetric = processStartTimeMetric;
14
+ processStartTimeMetric.metricNames = [PROCESS_START_TIME];
15
15
  //# sourceMappingURL=processStartTime.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"processStartTime.js","sourceRoot":"","sources":["../../src/metrics/processStartTime.ts"],"names":[],"mappings":";;;AAIA,iCAAsC;AAEtC,MAAM,cAAc,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC;AACxE,MAAM,kBAAkB,GAAG,4BAA4B,CAAC;AAExD,SAAgB,sBAAsB,CAAC,KAAY,EAAE,MAAyB;IAC5E,KAAK;SACF,mBAAmB,CAAC,IAAA,mBAAY,EAAC,MAAM,EAAE,kBAAkB,CAAC,EAAE;QAC7D,WAAW,EAAE,wDAAwD;KACtE,CAAC;SACD,GAAG,CAAC,cAAc,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC;AACzC,CAAC;AAND,wDAMC"}
1
+ {"version":3,"file":"processStartTime.js","sourceRoot":"","sources":["../../src/metrics/processStartTime.ts"],"names":[],"mappings":";;AAQA,wDAMC;AAXD,0DAAuD;AAEvD,MAAM,cAAc,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC;AACxE,MAAM,kBAAkB,GAAG,4BAA4B,CAAC;AAExD,SAAgB,sBAAsB,CAAC,KAAY,EAAE,MAAyB;IAC5E,KAAK;SACF,mBAAmB,CAAC,IAAA,2BAAY,EAAC,MAAM,EAAE,kBAAkB,CAAC,EAAE;QAC7D,WAAW,EAAE,wDAAwD;KACtE,CAAC;SACD,GAAG,CAAC,cAAc,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC;AACzC,CAAC;AAED,sBAAsB,CAAC,WAAW,GAAG,CAAC,kBAAkB,CAAC,CAAC"}
@@ -1,3 +1,6 @@
1
1
  import { Meter } from '@opentelemetry/api';
2
2
  import { NodeMetricConfig } from '../types';
3
3
  export declare function versionMetric(meter: Meter, config?: NodeMetricConfig): void;
4
+ export declare namespace versionMetric {
5
+ var metricNames: string[];
6
+ }
@@ -1,7 +1,7 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.versionMetric = void 0;
4
- const util_1 = require("./util");
3
+ exports.versionMetric = versionMetric;
4
+ const counterNames_1 = require("../helpers/counterNames");
5
5
  const NODE_VERSION_INFO = 'nodejs_version_info';
6
6
  function versionMetric(meter, config) {
7
7
  const versionSegments = process.version.slice(1).split('.').map(Number);
@@ -13,10 +13,10 @@ function versionMetric(meter, config) {
13
13
  patch: versionSegments[2],
14
14
  };
15
15
  meter
16
- .createUpDownCounter((0, util_1.prefixedName)(config, NODE_VERSION_INFO), {
16
+ .createUpDownCounter((0, counterNames_1.prefixedName)(config, NODE_VERSION_INFO), {
17
17
  description: 'Node.js version info',
18
18
  })
19
19
  .add(1, version);
20
20
  }
21
- exports.versionMetric = versionMetric;
21
+ versionMetric.metricNames = [NODE_VERSION_INFO];
22
22
  //# sourceMappingURL=version.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"version.js","sourceRoot":"","sources":["../../src/metrics/version.ts"],"names":[],"mappings":";;;AAIA,iCAAsC;AAEtC,MAAM,iBAAiB,GAAG,qBAAqB,CAAC;AAEhD,SAAgB,aAAa,CAAC,KAAY,EAAE,MAAyB;IACnE,MAAM,eAAe,GAAG,OAAO,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;IACxE,MAAM,OAAO,GAAG;QACd,GAAG,MAAM,EAAE,MAAM;QACjB,OAAO,EAAE,OAAO,CAAC,OAAO;QACxB,KAAK,EAAE,eAAe,CAAC,CAAC,CAAC;QACzB,KAAK,EAAE,eAAe,CAAC,CAAC,CAAC;QACzB,KAAK,EAAE,eAAe,CAAC,CAAC,CAAC;KAC1B,CAAC;IACF,KAAK;SACF,mBAAmB,CAAC,IAAA,mBAAY,EAAC,MAAM,EAAE,iBAAiB,CAAC,EAAE;QAC5D,WAAW,EAAE,sBAAsB;KACpC,CAAC;SACD,GAAG,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC;AACrB,CAAC;AAdD,sCAcC"}
1
+ {"version":3,"file":"version.js","sourceRoot":"","sources":["../../src/metrics/version.ts"],"names":[],"mappings":";;AAOA,sCAcC;AAlBD,0DAAuD;AAEvD,MAAM,iBAAiB,GAAG,qBAAqB,CAAC;AAEhD,SAAgB,aAAa,CAAC,KAAY,EAAE,MAAyB;IACnE,MAAM,eAAe,GAAG,OAAO,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;IACxE,MAAM,OAAO,GAAG;QACd,GAAG,MAAM,EAAE,MAAM;QACjB,OAAO,EAAE,OAAO,CAAC,OAAO;QACxB,KAAK,EAAE,eAAe,CAAC,CAAC,CAAC;QACzB,KAAK,EAAE,eAAe,CAAC,CAAC,CAAC;QACzB,KAAK,EAAE,eAAe,CAAC,CAAC,CAAC;KAC1B,CAAC;IACF,KAAK;SACF,mBAAmB,CAAC,IAAA,2BAAY,EAAC,MAAM,EAAE,iBAAiB,CAAC,EAAE;QAC5D,WAAW,EAAE,sBAAsB;KACpC,CAAC;SACD,GAAG,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC;AACrB,CAAC;AAED,aAAa,CAAC,WAAW,GAAG,CAAC,iBAAiB,CAAC,CAAC"}