Skip to content

Commit c4fd6f9

Browse files
authored
Capture CPU and memory metrics (#188)
* Capture CPU/memory metrics * Fix
1 parent 69cf0cd commit c4fd6f9

File tree

3 files changed

+41
-0
lines changed

3 files changed

+41
-0
lines changed

src/common/client.ts

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@ import { Logger, getLogger } from "./logging.js";
66
import { isValidClientId, isValidEnv } from "./paramValidation.js";
77
import RequestCounter from "./requestCounter.js";
88
import RequestLogger from "./requestLogger.js";
9+
import { getCpuMemoryUsage } from "./resources.js";
910
import ServerErrorCounter from "./serverErrorCounter.js";
1011
import {
1112
ApitallyConfig,
@@ -225,6 +226,7 @@ export class ApitallyClient {
225226
this.validationErrorCounter.getAndResetValidationErrors(),
226227
server_errors: this.serverErrorCounter.getAndResetServerErrors(),
227228
consumers: this.consumerRegistry.getAndResetUpdatedConsumers(),
229+
resources: getCpuMemoryUsage(),
228230
};
229231
this.syncDataQueue.push(newPayload);
230232

src/common/resources.ts

Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,35 @@
1+
let lastCpuUsage: { user: number; system: number } | null = null;
2+
let lastCpuTime: number | null = null;
3+
4+
export function getCpuMemoryUsage() {
5+
const currentCpuUsage = process.cpuUsage();
6+
const currentTime = performance.now();
7+
const memoryRss = process.memoryUsage().rss;
8+
9+
let cpuPercent = null;
10+
11+
if (lastCpuUsage !== null && lastCpuTime !== null) {
12+
// Calculate elapsed time in microseconds
13+
const elapsedTime = (currentTime - lastCpuTime) * 1000;
14+
15+
// Calculate CPU time used (user + system) in microseconds
16+
const cpuTime =
17+
currentCpuUsage.user -
18+
lastCpuUsage.user +
19+
(currentCpuUsage.system - lastCpuUsage.system);
20+
21+
// Calculate percentage
22+
cpuPercent = (cpuTime / elapsedTime) * 100;
23+
}
24+
25+
// Update last values for next call
26+
lastCpuUsage = currentCpuUsage;
27+
lastCpuTime = currentTime;
28+
29+
return cpuPercent !== null
30+
? {
31+
cpu_percent: cpuPercent,
32+
memory_rss: memoryRss,
33+
}
34+
: null;
35+
}

src/common/types.ts

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -94,4 +94,8 @@ export type SyncPayload = {
9494
validation_errors: Array<ValidationErrorsItem>;
9595
server_errors: Array<ServerErrorsItem>;
9696
consumers: Array<ConsumerItem>;
97+
resources: {
98+
cpu_percent: number;
99+
memory_rss: number;
100+
} | null;
97101
};

0 commit comments

Comments
 (0)