@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.
- package/.eslintrc.js +1 -1
- package/.github/workflows/nodejs.yml +58 -0
- package/.prettierrc.js +1 -1
- package/CHANGELOG.md +7 -0
- package/LICENSE +21 -0
- package/README.md +5 -2
- package/build/{metrics/util.js → helpers/counterNames.js} +2 -3
- package/build/helpers/counterNames.js.map +1 -0
- package/build/helpers/processMetricsHelpers.d.ts +2 -0
- package/build/helpers/processMetricsHelpers.js +21 -0
- package/build/helpers/processMetricsHelpers.js.map +1 -0
- package/build/helpers/safeMemoryUsage.d.ts +1 -0
- package/build/helpers/safeMemoryUsage.js +12 -0
- package/build/helpers/safeMemoryUsage.js.map +1 -0
- package/build/index.d.ts +1 -1
- package/build/index.js +5 -4
- package/build/index.js.map +1 -1
- package/build/metrics/eventLoopLag.d.ts +3 -1
- package/build/metrics/eventLoopLag.js +10 -11
- package/build/metrics/eventLoopLag.js.map +1 -1
- package/build/metrics/gc.d.ts +6 -0
- package/build/metrics/gc.js +32 -0
- package/build/metrics/gc.js.map +1 -0
- package/build/metrics/heapSizeAndUsed.d.ts +6 -0
- package/build/metrics/heapSizeAndUsed.js +59 -0
- package/build/metrics/heapSizeAndUsed.js.map +1 -0
- package/build/metrics/heapSpacesSizeAndUsed.d.ts +6 -0
- package/build/metrics/heapSpacesSizeAndUsed.js +81 -0
- package/build/metrics/heapSpacesSizeAndUsed.js.map +1 -0
- package/build/metrics/index.d.ts +7 -0
- package/build/metrics/index.js +7 -0
- package/build/metrics/index.js.map +1 -1
- package/build/metrics/osMemoryHeap.d.ts +6 -0
- package/build/metrics/osMemoryHeap.js +27 -0
- package/build/metrics/osMemoryHeap.js.map +1 -0
- package/build/metrics/osMemoryHeapLinux.d.ts +6 -0
- package/build/metrics/osMemoryHeapLinux.js +83 -0
- package/build/metrics/osMemoryHeapLinux.js.map +1 -0
- package/build/metrics/processCpuTotal.d.ts +6 -0
- package/build/metrics/processCpuTotal.js +37 -0
- package/build/metrics/processCpuTotal.js.map +1 -0
- package/build/metrics/processMaxFileDescriptors.d.ts +3 -0
- package/build/metrics/processMaxFileDescriptors.js +38 -0
- package/build/metrics/processMaxFileDescriptors.js.map +1 -0
- package/build/metrics/processOpenFileDescriptors.d.ts +6 -0
- package/build/metrics/processOpenFileDescriptors.js +31 -0
- package/build/metrics/processOpenFileDescriptors.js.map +1 -0
- package/build/metrics/processResources.d.ts +6 -0
- package/build/metrics/processResources.js +36 -0
- package/build/metrics/processResources.js.map +1 -0
- package/build/metrics/processStartTime.d.ts +3 -0
- package/build/metrics/processStartTime.js +4 -4
- package/build/metrics/processStartTime.js.map +1 -1
- package/build/metrics/version.d.ts +3 -0
- package/build/metrics/version.js +4 -4
- package/build/metrics/version.js.map +1 -1
- package/build/tsconfig.build.tsbuildinfo +1 -1
- package/package.json +17 -19
- package/src/helpers/processMetricsHelpers.ts +25 -0
- package/src/helpers/safeMemoryUsage.ts +7 -0
- package/src/index.ts +4 -4
- package/src/metrics/eventLoopLag.ts +3 -7
- package/src/metrics/gc.ts +39 -0
- package/src/metrics/heapSizeAndUsed.ts +64 -0
- package/src/metrics/heapSpacesSizeAndUsed.ts +104 -0
- package/src/metrics/index.ts +7 -0
- package/src/metrics/osMemoryHeap.ts +31 -0
- package/src/metrics/osMemoryHeapLinux.ts +92 -0
- package/src/metrics/processCpuTotal.ts +47 -0
- package/src/metrics/processMaxFileDescriptors.ts +39 -0
- package/src/metrics/processOpenFileDescriptors.ts +30 -0
- package/src/metrics/processResources.ts +40 -0
- package/src/metrics/processStartTime.ts +3 -2
- package/src/metrics/version.ts +3 -2
- package/tsconfig.json +4 -2
- package/vitest.config.ts +1 -1
- package/.github/workflows/publish.yml +0 -49
- package/.github/workflows/pull_requests.yml +0 -26
- package/build/metrics/util.js.map +0 -1
- /package/build/{metrics/util.d.ts → helpers/counterNames.d.ts} +0 -0
- /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,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,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 =
|
|
4
|
-
const
|
|
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,
|
|
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
|
-
|
|
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":"
|
|
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"}
|
package/build/metrics/version.js
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.versionMetric =
|
|
4
|
-
const
|
|
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,
|
|
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
|
-
|
|
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":"
|
|
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"}
|