Skip to content

Commit cb88904

Browse files
committed
added event loop metrics
1 parent f9ea994 commit cb88904

7 files changed

Lines changed: 50 additions & 7 deletions

File tree

lib/node/helpers.ts

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,9 @@ export const getOsPlatform = (): Platform => {
2121
};
2222
};
2323

24+
export const toDecimalNumber = (val: number, decimal: number = 2) =>
25+
Number(val.toFixed(decimal));
26+
2427
// export const sanitizeDsn = (dsn: string) => {
2528
// const [secretKey, rest] = dsn
2629
// .replace("http://", "")

lib/node/metrics.ts

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,8 @@ import { cpu } from "./metrics/cpu-usage";
55
import * as os from "node:os";
66
import { memory } from "./metrics/memory-usage";
77
import { heap } from "./metrics/heap";
8+
import { eventLoop } from "./metrics/event-loop";
9+
import { toDecimalNumber } from "./helpers";
810

911
const DEFAULT_INTERVAL = 30; //seconds
1012

@@ -18,8 +20,9 @@ const collectMetrics = (options: TraceoOptions) => {
1820
const metrics: Metrics = {
1921
cpuUsage: cpu.usage(),
2022
memory: memory.usage(),
21-
loadAvg: Number(os.loadavg()[0].toFixed(2)) || 0,
23+
loadAvg: toDecimalNumber(os.loadavg()[0]),
2224
heap,
25+
eventLoopLag: eventLoop.collect(),
2326
};
2427

2528
const httpModule = new HttpModule("/api/worker/metrics", metrics);

lib/node/metrics/event-loop.ts

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
import * as perf_hooks from "perf_hooks";
2+
import { Metrics } from "../../transport/metrics";
3+
import { toDecimalNumber } from "../helpers";
4+
5+
const histogram = perf_hooks.monitorEventLoopDelay({
6+
resolution: 10,
7+
});
8+
histogram.enable();
9+
10+
const collect = () => {
11+
const data: Metrics["eventLoopLag"] = {
12+
min: toDecimalNumber(histogram.min / 1e6),
13+
max: toDecimalNumber(histogram.max / 1e6),
14+
mean: toDecimalNumber(histogram.mean / 1e6),
15+
stddev: toDecimalNumber(histogram.stddev / 1e6),
16+
p50: toDecimalNumber(histogram.percentile(50) / 1e6),
17+
p90: toDecimalNumber(histogram.percentile(90) / 1e6),
18+
p99: toDecimalNumber(histogram.percentile(99) / 1e6),
19+
};
20+
histogram.reset();
21+
22+
return data;
23+
};
24+
25+
export const eventLoop = { collect };

lib/node/metrics/heap.ts

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,6 @@
11
import * as v8 from "v8";
2+
import { Metrics } from "../../transport/metrics";
3+
import { toDecimalNumber } from "../helpers";
24

35
/**
46
* https://www.geeksforgeeks.org/node-js-v8-getheapstatistics-method/
@@ -14,10 +16,10 @@ const getNumberOfNativeContexts = () =>
1416
const getNumberOfDetachedContexts = () =>
1517
getHeapStatistics().number_of_detached_contexts;
1618

17-
export const heap = {
18-
used: Number((process.memoryUsage().heapUsed / TO_MB).toFixed(2)),
19-
total: Number((process.memoryUsage().heapTotal / TO_MB).toFixed(2)),
20-
rss: Number((process.memoryUsage().rss / TO_MB).toFixed(2)),
19+
export const heap: Metrics['heap'] = {
20+
used: toDecimalNumber(process.memoryUsage().heapUsed / TO_MB),
21+
total: toDecimalNumber(process.memoryUsage().heapTotal / TO_MB),
22+
rss: toDecimalNumber(process.memoryUsage().rss / TO_MB),
2123
nativeContexts: getNumberOfNativeContexts(),
2224
detachedContexts: getNumberOfDetachedContexts(),
2325
};

lib/node/metrics/memory-usage.ts

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,12 @@
11
import * as os from "node:os";
2+
import { toDecimalNumber } from "../helpers";
23

34
const usage = () => {
45
const freeMemory = Math.round(os.freemem() / 1024 / 1024);
56
const totalMemory = Math.round(os.totalmem() / 1024 / 1024);
67

78
const usedMemory = Math.round(totalMemory - freeMemory);
8-
const percentageUsed = Number(((usedMemory / totalMemory) * 100).toFixed(2));
9+
const percentageUsed = toDecimalNumber((usedMemory / totalMemory) * 100);
910

1011
return {
1112
mb: usedMemory,

lib/transport/metrics.ts

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,4 +12,13 @@ export interface Metrics {
1212
nativeContexts: number;
1313
detachedContexts: number;
1414
};
15+
eventLoopLag: {
16+
min: number;
17+
max: number;
18+
mean: number;
19+
stddev: number;
20+
p50: number;
21+
p90: number;
22+
p99: number;
23+
};
1524
}

package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "traceo-sdk",
3-
"version": "0.3.4-beta",
3+
"version": "0.3.6-beta",
44
"license": "MIT",
55
"main": "dist/index.js",
66
"types": "dist/index.d.ts",

0 commit comments

Comments
 (0)