@trigger.dev/core 0.0.0-v4-prerelease-20250918151437 → 0.0.0-v4-prerelease-20251008112940
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/dist/commonjs/v3/runEngineWorker/supervisor/http.d.ts +5 -0
- package/dist/commonjs/v3/runEngineWorker/supervisor/schemas.d.ts +31 -0
- package/dist/commonjs/v3/runEngineWorker/workload/http.d.ts +4 -0
- package/dist/commonjs/v3/runEngineWorker/workload/schemas.d.ts +31 -0
- package/dist/commonjs/v3/schemas/api.d.ts +16 -8
- package/dist/commonjs/v3/schemas/api.js +8 -4
- package/dist/commonjs/v3/schemas/api.js.map +1 -1
- package/dist/commonjs/v3/schemas/openTelemetry.d.ts +183 -0
- package/dist/commonjs/v3/schemas/openTelemetry.js +20 -2
- package/dist/commonjs/v3/schemas/openTelemetry.js.map +1 -1
- package/dist/commonjs/v3/schemas/runEngine.d.ts +25 -0
- package/dist/commonjs/v3/schemas/runEngine.js +1 -0
- package/dist/commonjs/v3/schemas/runEngine.js.map +1 -1
- package/dist/commonjs/v3/semanticInternalAttributes.d.ts +3 -0
- package/dist/commonjs/v3/semanticInternalAttributes.js +3 -0
- package/dist/commonjs/v3/semanticInternalAttributes.js.map +1 -1
- package/dist/commonjs/v3/serverOnly/index.d.ts +1 -0
- package/dist/commonjs/v3/serverOnly/index.js +1 -0
- package/dist/commonjs/v3/serverOnly/index.js.map +1 -1
- package/dist/commonjs/v3/serverOnly/resourceMonitor.d.ts +190 -0
- package/dist/commonjs/v3/serverOnly/resourceMonitor.js +596 -0
- package/dist/commonjs/v3/serverOnly/resourceMonitor.js.map +1 -0
- package/dist/commonjs/v3/utils/flattenAttributes.d.ts +1 -1
- package/dist/commonjs/v3/utils/flattenAttributes.js +4 -1
- package/dist/commonjs/v3/utils/flattenAttributes.js.map +1 -1
- package/dist/commonjs/v3/workers/taskExecutor.js +1 -1
- package/dist/commonjs/v3/workers/taskExecutor.js.map +1 -1
- package/dist/commonjs/v3/workers/warmStartClient.d.ts +3 -0
- package/dist/commonjs/v3/workers/warmStartClient.js +67 -28
- package/dist/commonjs/v3/workers/warmStartClient.js.map +1 -1
- package/dist/commonjs/version.js +1 -1
- package/dist/esm/v3/runEngineWorker/supervisor/http.d.ts +5 -0
- package/dist/esm/v3/runEngineWorker/supervisor/schemas.d.ts +31 -0
- package/dist/esm/v3/runEngineWorker/workload/http.d.ts +4 -0
- package/dist/esm/v3/runEngineWorker/workload/schemas.d.ts +31 -0
- package/dist/esm/v3/schemas/api.d.ts +16 -8
- package/dist/esm/v3/schemas/api.js +5 -1
- package/dist/esm/v3/schemas/api.js.map +1 -1
- package/dist/esm/v3/schemas/openTelemetry.d.ts +183 -0
- package/dist/esm/v3/schemas/openTelemetry.js +18 -1
- package/dist/esm/v3/schemas/openTelemetry.js.map +1 -1
- package/dist/esm/v3/schemas/runEngine.d.ts +25 -0
- package/dist/esm/v3/schemas/runEngine.js +1 -0
- package/dist/esm/v3/schemas/runEngine.js.map +1 -1
- package/dist/esm/v3/semanticInternalAttributes.d.ts +3 -0
- package/dist/esm/v3/semanticInternalAttributes.js +3 -0
- package/dist/esm/v3/semanticInternalAttributes.js.map +1 -1
- package/dist/esm/v3/serverOnly/index.d.ts +1 -0
- package/dist/esm/v3/serverOnly/index.js +1 -0
- package/dist/esm/v3/serverOnly/index.js.map +1 -1
- package/dist/esm/v3/serverOnly/resourceMonitor.d.ts +190 -0
- package/dist/esm/v3/serverOnly/resourceMonitor.js +589 -0
- package/dist/esm/v3/serverOnly/resourceMonitor.js.map +1 -0
- package/dist/esm/v3/utils/flattenAttributes.d.ts +1 -1
- package/dist/esm/v3/utils/flattenAttributes.js +4 -1
- package/dist/esm/v3/utils/flattenAttributes.js.map +1 -1
- package/dist/esm/v3/workers/taskExecutor.js +1 -1
- package/dist/esm/v3/workers/taskExecutor.js.map +1 -1
- package/dist/esm/v3/workers/warmStartClient.d.ts +3 -0
- package/dist/esm/v3/workers/warmStartClient.js +67 -28
- package/dist/esm/v3/workers/warmStartClient.js.map +1 -1
- package/dist/esm/version.js +1 -1
- package/package.json +2 -2
|
@@ -0,0 +1,596 @@
|
|
|
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.ResourceMonitor = void 0;
|
|
7
|
+
const node_child_process_1 = require("node:child_process");
|
|
8
|
+
const node_fs_1 = require("node:fs");
|
|
9
|
+
const node_os_1 = __importDefault(require("node:os"));
|
|
10
|
+
const node_perf_hooks_1 = require("node:perf_hooks");
|
|
11
|
+
const node_util_1 = require("node:util");
|
|
12
|
+
const node_v8_1 = require("node:v8");
|
|
13
|
+
const execAsync = (0, node_util_1.promisify)(node_child_process_1.exec);
|
|
14
|
+
// Constants
|
|
15
|
+
const DISK_LIMIT_GB = 10;
|
|
16
|
+
const DISK_LIMIT_BYTES = DISK_LIMIT_GB * 1024 * 1024 * 1024; // 10Gi in bytes
|
|
17
|
+
class ResourceMonitor {
|
|
18
|
+
logInterval = null;
|
|
19
|
+
dirName;
|
|
20
|
+
processName;
|
|
21
|
+
ctx;
|
|
22
|
+
verbose;
|
|
23
|
+
compactLogging;
|
|
24
|
+
gcObserver = null;
|
|
25
|
+
bufferedGcEntries = [];
|
|
26
|
+
constructor(config) {
|
|
27
|
+
this.dirName = config.dirName ?? "/tmp";
|
|
28
|
+
this.processName = config.processName;
|
|
29
|
+
this.ctx = config.ctx;
|
|
30
|
+
this.verbose = config.verbose ?? true;
|
|
31
|
+
this.compactLogging = config.compactLogging ?? false;
|
|
32
|
+
}
|
|
33
|
+
/**
|
|
34
|
+
* Start periodic resource monitoring
|
|
35
|
+
* @param intervalMs Monitoring interval in milliseconds
|
|
36
|
+
*/
|
|
37
|
+
startMonitoring(intervalMs = 10000) {
|
|
38
|
+
if (intervalMs < 1000) {
|
|
39
|
+
intervalMs = 1000;
|
|
40
|
+
console.warn("ResourceMonitor: intervalMs is less than 1000, setting to 1000");
|
|
41
|
+
}
|
|
42
|
+
if (this.logInterval) {
|
|
43
|
+
clearInterval(this.logInterval);
|
|
44
|
+
}
|
|
45
|
+
this.logInterval = setInterval(this.logResources.bind(this), intervalMs);
|
|
46
|
+
this.gcObserver = new node_perf_hooks_1.PerformanceObserver((list) => {
|
|
47
|
+
this.bufferedGcEntries.push(...list.getEntries());
|
|
48
|
+
});
|
|
49
|
+
this.gcObserver.observe({ entryTypes: ["gc"], buffered: true });
|
|
50
|
+
}
|
|
51
|
+
/**
|
|
52
|
+
* Stop resource monitoring
|
|
53
|
+
*/
|
|
54
|
+
stopMonitoring() {
|
|
55
|
+
if (this.logInterval) {
|
|
56
|
+
clearInterval(this.logInterval);
|
|
57
|
+
this.logInterval = null;
|
|
58
|
+
}
|
|
59
|
+
if (this.gcObserver) {
|
|
60
|
+
this.gcObserver.disconnect();
|
|
61
|
+
this.gcObserver = null;
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
async logResources() {
|
|
65
|
+
try {
|
|
66
|
+
await this.logResourceSnapshot("ResourceMonitor");
|
|
67
|
+
}
|
|
68
|
+
catch (error) {
|
|
69
|
+
console.error(`Resource monitoring error: ${error instanceof Error ? error.message : String(error)}`);
|
|
70
|
+
}
|
|
71
|
+
}
|
|
72
|
+
/**
|
|
73
|
+
* Get combined system metrics (disk and memory)
|
|
74
|
+
*/
|
|
75
|
+
async getSystemMetrics() {
|
|
76
|
+
const [disk, memory] = await Promise.all([this.getDiskMetrics(), this.getMemoryMetrics()]);
|
|
77
|
+
return { disk, memory };
|
|
78
|
+
}
|
|
79
|
+
/**
|
|
80
|
+
* Get disk space information
|
|
81
|
+
*/
|
|
82
|
+
async getDiskMetrics() {
|
|
83
|
+
try {
|
|
84
|
+
// Even with permission errors, du will output a total
|
|
85
|
+
const { stdout, stderr } = await execAsync(`du -sb ${this.dirName} || true`);
|
|
86
|
+
// Get the last line of stdout which contains the total
|
|
87
|
+
const lastLine = stdout.split("\n").filter(Boolean).pop() || "";
|
|
88
|
+
const usedBytes = parseInt(lastLine.split("\t")[0] ?? "", 10);
|
|
89
|
+
const effectiveTotal = DISK_LIMIT_BYTES;
|
|
90
|
+
const effectiveUsed = Math.min(usedBytes, DISK_LIMIT_BYTES);
|
|
91
|
+
const effectiveFree = effectiveTotal - effectiveUsed;
|
|
92
|
+
const percentUsed = (effectiveUsed / effectiveTotal) * 100;
|
|
93
|
+
const metrics = {
|
|
94
|
+
total: effectiveTotal,
|
|
95
|
+
used: effectiveUsed,
|
|
96
|
+
free: effectiveFree,
|
|
97
|
+
percentUsed,
|
|
98
|
+
};
|
|
99
|
+
// If we had permission errors, add a warning
|
|
100
|
+
if (stderr.includes("Permission denied") || stderr.includes("cannot access")) {
|
|
101
|
+
metrics.warning = "Some directories were not accessible";
|
|
102
|
+
}
|
|
103
|
+
else if (stderr.includes("No such file or directory")) {
|
|
104
|
+
metrics.warning = "The directory does not exist";
|
|
105
|
+
}
|
|
106
|
+
return metrics;
|
|
107
|
+
}
|
|
108
|
+
catch (error) {
|
|
109
|
+
console.error(`Error getting disk metrics: ${error instanceof Error ? error.message : String(error)}`);
|
|
110
|
+
return {
|
|
111
|
+
free: DISK_LIMIT_BYTES,
|
|
112
|
+
total: DISK_LIMIT_BYTES,
|
|
113
|
+
used: 0,
|
|
114
|
+
percentUsed: 0,
|
|
115
|
+
warning: "Failed to measure disk usage",
|
|
116
|
+
};
|
|
117
|
+
}
|
|
118
|
+
}
|
|
119
|
+
/**
|
|
120
|
+
* Get memory metrics
|
|
121
|
+
*/
|
|
122
|
+
getMemoryMetrics() {
|
|
123
|
+
const total = node_os_1.default.totalmem();
|
|
124
|
+
const free = node_os_1.default.freemem();
|
|
125
|
+
const used = total - free;
|
|
126
|
+
const percentUsed = (used / total) * 100;
|
|
127
|
+
return { total, free, used, percentUsed };
|
|
128
|
+
}
|
|
129
|
+
/**
|
|
130
|
+
* Get process-specific metrics using /proc filesystem
|
|
131
|
+
*/
|
|
132
|
+
async getProcMetrics(pids) {
|
|
133
|
+
return Promise.all(pids.map(async (pid) => {
|
|
134
|
+
try {
|
|
135
|
+
// Read process status
|
|
136
|
+
const status = await node_fs_1.promises.readFile(`/proc/${pid}/status`, "utf8");
|
|
137
|
+
const cmdline = await node_fs_1.promises.readFile(`/proc/${pid}/cmdline`, "utf8");
|
|
138
|
+
const stat = await node_fs_1.promises.readFile(`/proc/${pid}/stat`, "utf8");
|
|
139
|
+
// Parse VmRSS (resident set size) from status
|
|
140
|
+
const rss = parseInt(status.match(/VmRSS:\s+(\d+)/)?.[1] ?? "0", 10);
|
|
141
|
+
// Parse VmSize (virtual memory size) from status
|
|
142
|
+
const vsz = parseInt(status.match(/VmSize:\s+(\d+)/)?.[1] ?? "0", 10);
|
|
143
|
+
// Get process owner
|
|
144
|
+
const user = (await node_fs_1.promises.stat(`/proc/${pid}`)).uid.toString();
|
|
145
|
+
// Parse CPU stats from /proc/[pid]/stat
|
|
146
|
+
const stats = stat.split(" ");
|
|
147
|
+
const utime = parseInt(stats[13] ?? "0", 10);
|
|
148
|
+
const stime = parseInt(stats[14] ?? "0", 10);
|
|
149
|
+
const starttime = parseInt(stats[21] ?? "0", 10);
|
|
150
|
+
// Calculate CPU percentage
|
|
151
|
+
const totalTime = utime + stime;
|
|
152
|
+
const uptime = node_os_1.default.uptime();
|
|
153
|
+
const hertz = 100; // Usually 100 on Linux
|
|
154
|
+
const elapsedTime = uptime - starttime / hertz;
|
|
155
|
+
const cpuUsage = 100 * (totalTime / hertz / elapsedTime);
|
|
156
|
+
// Calculate memory percentage against total system memory
|
|
157
|
+
const totalMem = node_os_1.default.totalmem();
|
|
158
|
+
const memoryPercent = (rss * 1024 * 100) / totalMem;
|
|
159
|
+
return {
|
|
160
|
+
user,
|
|
161
|
+
pid,
|
|
162
|
+
cpu: cpuUsage,
|
|
163
|
+
mem: memoryPercent,
|
|
164
|
+
vsz,
|
|
165
|
+
rss,
|
|
166
|
+
command: cmdline.replace(/\0/g, " ").trim(),
|
|
167
|
+
};
|
|
168
|
+
}
|
|
169
|
+
catch (error) {
|
|
170
|
+
return null;
|
|
171
|
+
}
|
|
172
|
+
})).then((results) => results.filter((r) => r !== null));
|
|
173
|
+
}
|
|
174
|
+
/**
|
|
175
|
+
* Find PIDs for a process name using /proc filesystem
|
|
176
|
+
*/
|
|
177
|
+
async findPidsByName(processName) {
|
|
178
|
+
if (!processName) {
|
|
179
|
+
return [];
|
|
180
|
+
}
|
|
181
|
+
try {
|
|
182
|
+
const pids = [];
|
|
183
|
+
const procDirs = await node_fs_1.promises.readdir("/proc");
|
|
184
|
+
for (const dir of procDirs) {
|
|
185
|
+
if (!/^\d+$/.test(dir))
|
|
186
|
+
continue;
|
|
187
|
+
const processPid = parseInt(dir, 10);
|
|
188
|
+
// Ignore processes that have a lower PID than our own PID
|
|
189
|
+
if (processPid <= process.pid) {
|
|
190
|
+
continue;
|
|
191
|
+
}
|
|
192
|
+
try {
|
|
193
|
+
const cmdline = await node_fs_1.promises.readFile(`/proc/${dir}/cmdline`, "utf8");
|
|
194
|
+
if (cmdline.includes(processName)) {
|
|
195
|
+
pids.push(parseInt(dir, 10));
|
|
196
|
+
}
|
|
197
|
+
}
|
|
198
|
+
catch {
|
|
199
|
+
// Ignore errors reading individual process info
|
|
200
|
+
continue;
|
|
201
|
+
}
|
|
202
|
+
}
|
|
203
|
+
return pids;
|
|
204
|
+
}
|
|
205
|
+
catch {
|
|
206
|
+
return [];
|
|
207
|
+
}
|
|
208
|
+
}
|
|
209
|
+
/**
|
|
210
|
+
* Get process-specific metrics
|
|
211
|
+
*/
|
|
212
|
+
async getProcessMetrics() {
|
|
213
|
+
// Get Node.js process metrics
|
|
214
|
+
const totalMemory = node_os_1.default.totalmem();
|
|
215
|
+
// Convert GB to bytes (machine.memory is in GB)
|
|
216
|
+
const machineMemoryBytes = totalMemory;
|
|
217
|
+
const nodeMemoryUsage = process.memoryUsage();
|
|
218
|
+
// Node process percentage is based on machine memory if available, otherwise system memory
|
|
219
|
+
const nodeMemoryPercent = (nodeMemoryUsage.rss / machineMemoryBytes) * 100;
|
|
220
|
+
const heapStats = (0, node_v8_1.getHeapStatistics)();
|
|
221
|
+
const nodeMetrics = {
|
|
222
|
+
memoryUsage: nodeMemoryUsage.rss,
|
|
223
|
+
memoryUsagePercent: nodeMemoryPercent,
|
|
224
|
+
heapUsed: nodeMemoryUsage.heapUsed,
|
|
225
|
+
heapSizeLimit: heapStats.heap_size_limit,
|
|
226
|
+
heapUsagePercent: (heapStats.used_heap_size / heapStats.heap_size_limit) * 100,
|
|
227
|
+
availableHeap: heapStats.total_available_size,
|
|
228
|
+
isNearHeapLimit: heapStats.used_heap_size / heapStats.heap_size_limit > 0.8,
|
|
229
|
+
};
|
|
230
|
+
let method = "ps";
|
|
231
|
+
try {
|
|
232
|
+
let processes = [];
|
|
233
|
+
// Try ps first, fall back to /proc if it fails
|
|
234
|
+
try {
|
|
235
|
+
const { stdout: psOutput } = await execAsync(`ps aux | grep ${this.processName} | grep -v grep`);
|
|
236
|
+
if (psOutput.trim()) {
|
|
237
|
+
processes = psOutput
|
|
238
|
+
.trim()
|
|
239
|
+
.split("\n")
|
|
240
|
+
.filter((line) => {
|
|
241
|
+
const parts = line.trim().split(/\s+/);
|
|
242
|
+
const pid = parseInt(parts[1] ?? "0", 10);
|
|
243
|
+
// Ignore processes that have a lower PID than our own PID
|
|
244
|
+
return pid > process.pid;
|
|
245
|
+
})
|
|
246
|
+
.map((line) => {
|
|
247
|
+
const parts = line.trim().split(/\s+/);
|
|
248
|
+
return {
|
|
249
|
+
user: parts[0] ?? "",
|
|
250
|
+
pid: parseInt(parts[1] ?? "0", 10),
|
|
251
|
+
cpu: parseFloat(parts[2] ?? "0"),
|
|
252
|
+
mem: parseFloat(parts[3] ?? "0"),
|
|
253
|
+
vsz: parseInt(parts[4] ?? "0", 10),
|
|
254
|
+
rss: parseInt(parts[5] ?? "0", 10),
|
|
255
|
+
command: parts.slice(10).join(" "),
|
|
256
|
+
};
|
|
257
|
+
});
|
|
258
|
+
}
|
|
259
|
+
}
|
|
260
|
+
catch {
|
|
261
|
+
// ps failed, try /proc instead
|
|
262
|
+
method = "proc";
|
|
263
|
+
const pids = await this.findPidsByName(this.processName);
|
|
264
|
+
processes = await this.getProcMetrics(pids);
|
|
265
|
+
}
|
|
266
|
+
if (processes.length === 0) {
|
|
267
|
+
return {
|
|
268
|
+
node: nodeMetrics,
|
|
269
|
+
targetProcess: this.processName
|
|
270
|
+
? {
|
|
271
|
+
method,
|
|
272
|
+
processName: this.processName,
|
|
273
|
+
count: 0,
|
|
274
|
+
processes: [],
|
|
275
|
+
averages: null,
|
|
276
|
+
totals: null,
|
|
277
|
+
}
|
|
278
|
+
: null,
|
|
279
|
+
};
|
|
280
|
+
}
|
|
281
|
+
// For CPU:
|
|
282
|
+
// - ps shows CPU percentage per core (e.g., 100% = 1 core)
|
|
283
|
+
// - machine.cpu is in cores (e.g., 0.5 = half a core)
|
|
284
|
+
// - we want to show percentage of allocated CPU (e.g., 100% = using all allocated CPU)
|
|
285
|
+
const availableCpu = node_os_1.default.cpus().length;
|
|
286
|
+
const cpuNormalizer = availableCpu * 100; // Convert to basis points for better precision with fractional CPUs
|
|
287
|
+
// For Memory:
|
|
288
|
+
// - ps 'mem' is already a percentage of system memory
|
|
289
|
+
// - we need to convert it to a percentage of machine memory
|
|
290
|
+
// - if machine memory is 0.5GB and system has 16GB, we multiply the percentage by 32
|
|
291
|
+
const memoryScaleFactor = this.ctx.machine ? totalMemory / machineMemoryBytes : 1;
|
|
292
|
+
const totals = processes.reduce((acc, proc) => ({
|
|
293
|
+
cpu: acc.cpu + proc.cpu,
|
|
294
|
+
// Scale memory percentage to machine memory
|
|
295
|
+
// TODO: test this
|
|
296
|
+
memory: acc.memory + proc.mem * memoryScaleFactor,
|
|
297
|
+
rss: acc.rss + proc.rss,
|
|
298
|
+
vsz: acc.vsz + proc.vsz,
|
|
299
|
+
}), { cpu: 0, memory: 0, rss: 0, vsz: 0 });
|
|
300
|
+
const count = processes.length;
|
|
301
|
+
const averages = {
|
|
302
|
+
cpu: totals.cpu / (count * cpuNormalizer),
|
|
303
|
+
memory: totals.memory / count,
|
|
304
|
+
rss: totals.rss / count,
|
|
305
|
+
vsz: totals.vsz / count,
|
|
306
|
+
};
|
|
307
|
+
return {
|
|
308
|
+
node: nodeMetrics,
|
|
309
|
+
targetProcess: this.processName
|
|
310
|
+
? {
|
|
311
|
+
method,
|
|
312
|
+
processName: this.processName,
|
|
313
|
+
count,
|
|
314
|
+
processes,
|
|
315
|
+
averages,
|
|
316
|
+
totals: {
|
|
317
|
+
cpu: totals.cpu / cpuNormalizer,
|
|
318
|
+
memory: totals.memory,
|
|
319
|
+
rss: totals.rss,
|
|
320
|
+
vsz: totals.vsz,
|
|
321
|
+
},
|
|
322
|
+
}
|
|
323
|
+
: null,
|
|
324
|
+
};
|
|
325
|
+
}
|
|
326
|
+
catch (error) {
|
|
327
|
+
return {
|
|
328
|
+
node: nodeMetrics,
|
|
329
|
+
targetProcess: this.processName
|
|
330
|
+
? {
|
|
331
|
+
method,
|
|
332
|
+
processName: this.processName,
|
|
333
|
+
count: 0,
|
|
334
|
+
processes: [],
|
|
335
|
+
averages: null,
|
|
336
|
+
totals: null,
|
|
337
|
+
}
|
|
338
|
+
: null,
|
|
339
|
+
};
|
|
340
|
+
}
|
|
341
|
+
}
|
|
342
|
+
/**
|
|
343
|
+
* Log a snapshot of current resource usage
|
|
344
|
+
*/
|
|
345
|
+
async logResourceSnapshot(label = "Resource Snapshot") {
|
|
346
|
+
try {
|
|
347
|
+
const payload = await this.getResourceSnapshotPayload();
|
|
348
|
+
const enhancedLabel = this.compactLogging
|
|
349
|
+
? this.createCompactLabel(payload, label)
|
|
350
|
+
: this.createEnhancedLabel(payload, label);
|
|
351
|
+
if (payload.process.node.isNearHeapLimit) {
|
|
352
|
+
console.warn(`${enhancedLabel}: Node is near heap limit`);
|
|
353
|
+
}
|
|
354
|
+
else {
|
|
355
|
+
console.log(enhancedLabel);
|
|
356
|
+
}
|
|
357
|
+
if (this.verbose) {
|
|
358
|
+
console.dir(payload, { depth: 6 });
|
|
359
|
+
}
|
|
360
|
+
}
|
|
361
|
+
catch (error) {
|
|
362
|
+
console.error(`Error logging resource snapshot: ${error instanceof Error ? error.message : String(error)}`);
|
|
363
|
+
}
|
|
364
|
+
}
|
|
365
|
+
/**
|
|
366
|
+
* Create an enhanced log label with key metrics for quick scanning
|
|
367
|
+
*/
|
|
368
|
+
createEnhancedLabel(payload, baseLabel) {
|
|
369
|
+
const parts = [baseLabel];
|
|
370
|
+
// System resources with text indicators
|
|
371
|
+
const diskPercent = parseFloat(payload.system.disk.percentUsed);
|
|
372
|
+
const memoryPercent = parseFloat(payload.system.memory.percentUsed);
|
|
373
|
+
const diskIndicator = this.getTextIndicator(diskPercent, 80, 90);
|
|
374
|
+
const memIndicator = this.getTextIndicator(memoryPercent, 80, 90);
|
|
375
|
+
parts.push(`Disk:${diskPercent.toFixed(1).padStart(5)}%${diskIndicator}`);
|
|
376
|
+
parts.push(`Mem:${memoryPercent.toFixed(1).padStart(5)}%${memIndicator}`);
|
|
377
|
+
// Node process metrics with text indicators
|
|
378
|
+
const nodeMemPercent = parseFloat(payload.process.node.memoryUsagePercent);
|
|
379
|
+
const heapPercent = parseFloat(payload.process.node.heapUsagePercent);
|
|
380
|
+
const nodeIndicator = this.getTextIndicator(nodeMemPercent, 70, 85);
|
|
381
|
+
const heapIndicator = this.getTextIndicator(heapPercent, 70, 85);
|
|
382
|
+
parts.push(`Node:${nodeMemPercent.toFixed(1).padStart(4)}%${nodeIndicator}`);
|
|
383
|
+
parts.push(`Heap:${heapPercent.toFixed(1).padStart(4)}%${heapIndicator}`);
|
|
384
|
+
// Target process metrics (if available)
|
|
385
|
+
if (payload.process.targetProcess && payload.process.targetProcess.count > 0) {
|
|
386
|
+
const targetCpu = payload.process.targetProcess.totals?.cpuPercent || "0";
|
|
387
|
+
const targetMem = payload.process.targetProcess.totals?.memoryPercent || "0";
|
|
388
|
+
const targetCpuNum = parseFloat(targetCpu);
|
|
389
|
+
const targetMemNum = parseFloat(targetMem);
|
|
390
|
+
const cpuIndicator = this.getTextIndicator(targetCpuNum, 80, 90);
|
|
391
|
+
const memIndicator = this.getTextIndicator(targetMemNum, 80, 90);
|
|
392
|
+
parts.push(`${payload.process.targetProcess.processName}:${targetCpu.padStart(4)}%${cpuIndicator}/${targetMem.padStart(4)}%${memIndicator}`);
|
|
393
|
+
}
|
|
394
|
+
// GC activity with performance indicators
|
|
395
|
+
if (payload.gc && payload.gc.count > 0) {
|
|
396
|
+
const avgDuration = payload.gc.avgDuration;
|
|
397
|
+
const gcIndicator = this.getTextIndicator(avgDuration, 5, 10, true);
|
|
398
|
+
parts.push(`GC:${payload.gc.count.toString().padStart(2)}(${avgDuration
|
|
399
|
+
.toFixed(1)
|
|
400
|
+
.padStart(4)}ms)${gcIndicator}`);
|
|
401
|
+
}
|
|
402
|
+
// Machine constraints
|
|
403
|
+
if (payload.constraints) {
|
|
404
|
+
parts.push(`[${payload.constraints.cpu}CPU/${payload.constraints.memoryGB}GB]`);
|
|
405
|
+
}
|
|
406
|
+
// Warning indicators (only show critical ones in the main label)
|
|
407
|
+
const criticalWarnings = [];
|
|
408
|
+
if (payload.process.node.isNearHeapLimit)
|
|
409
|
+
criticalWarnings.push("HEAP_LIMIT");
|
|
410
|
+
if (diskPercent > 90)
|
|
411
|
+
criticalWarnings.push("DISK_CRITICAL");
|
|
412
|
+
if (memoryPercent > 95)
|
|
413
|
+
criticalWarnings.push("MEM_CRITICAL");
|
|
414
|
+
if (payload.system.disk.warning)
|
|
415
|
+
criticalWarnings.push("DISK_WARN");
|
|
416
|
+
if (criticalWarnings.length > 0) {
|
|
417
|
+
parts.push(`[${criticalWarnings.join(",")}]`);
|
|
418
|
+
}
|
|
419
|
+
return parts.join(" | ");
|
|
420
|
+
}
|
|
421
|
+
/**
|
|
422
|
+
* Get text-based indicator for percentage values
|
|
423
|
+
*/
|
|
424
|
+
getTextIndicator(value, warningThreshold, criticalThreshold, isDuration = false) {
|
|
425
|
+
if (isDuration) {
|
|
426
|
+
// For duration values, higher is worse
|
|
427
|
+
if (value >= criticalThreshold)
|
|
428
|
+
return " [CRIT]";
|
|
429
|
+
if (value >= warningThreshold)
|
|
430
|
+
return " [WARN]";
|
|
431
|
+
return " [OK]";
|
|
432
|
+
}
|
|
433
|
+
else {
|
|
434
|
+
// For percentage values, higher is worse
|
|
435
|
+
if (value >= criticalThreshold)
|
|
436
|
+
return " [CRIT]";
|
|
437
|
+
if (value >= warningThreshold)
|
|
438
|
+
return " [WARN]";
|
|
439
|
+
return " [OK]";
|
|
440
|
+
}
|
|
441
|
+
}
|
|
442
|
+
/**
|
|
443
|
+
* Create a compact version of the enhanced label for high-frequency logging
|
|
444
|
+
*/
|
|
445
|
+
createCompactLabel(payload, baseLabel) {
|
|
446
|
+
const parts = [baseLabel];
|
|
447
|
+
// Only show critical metrics in compact mode
|
|
448
|
+
const diskPercent = parseFloat(payload.system.disk.percentUsed);
|
|
449
|
+
const memoryPercent = parseFloat(payload.system.memory.percentUsed);
|
|
450
|
+
const heapPercent = parseFloat(payload.process.node.heapUsagePercent);
|
|
451
|
+
// Use single character indicators for compactness
|
|
452
|
+
const diskIndicator = diskPercent > 90 ? "!" : diskPercent > 80 ? "?" : ".";
|
|
453
|
+
const memIndicator = memoryPercent > 95 ? "!" : memoryPercent > 80 ? "?" : ".";
|
|
454
|
+
const heapIndicator = heapPercent > 85 ? "!" : heapPercent > 70 ? "?" : ".";
|
|
455
|
+
parts.push(`D:${diskPercent.toFixed(0).padStart(2)}%${diskIndicator}`);
|
|
456
|
+
parts.push(`M:${memoryPercent.toFixed(0).padStart(2)}%${memIndicator}`);
|
|
457
|
+
parts.push(`H:${heapPercent.toFixed(0).padStart(2)}%${heapIndicator}`);
|
|
458
|
+
// GC activity (only if significant)
|
|
459
|
+
if (payload.gc && payload.gc.count > 0 && payload.gc.avgDuration > 2) {
|
|
460
|
+
const gcIndicator = payload.gc.avgDuration > 10 ? "!" : payload.gc.avgDuration > 5 ? "?" : ".";
|
|
461
|
+
parts.push(`GC:${payload.gc.count}${gcIndicator}`);
|
|
462
|
+
}
|
|
463
|
+
return parts.join(" ");
|
|
464
|
+
}
|
|
465
|
+
async getResourceSnapshotPayload() {
|
|
466
|
+
const [systemMetrics, processMetrics] = await Promise.all([
|
|
467
|
+
this.getSystemMetrics(),
|
|
468
|
+
this.getProcessMetrics(),
|
|
469
|
+
]);
|
|
470
|
+
const gcSummary = summarizeGCEntries(this.bufferedGcEntries);
|
|
471
|
+
this.bufferedGcEntries = [];
|
|
472
|
+
const formatBytes = (bytes) => (bytes / (1024 * 1024)).toFixed(2);
|
|
473
|
+
const formatPercent = (value) => value.toFixed(1);
|
|
474
|
+
return {
|
|
475
|
+
system: {
|
|
476
|
+
disk: {
|
|
477
|
+
limitGiB: DISK_LIMIT_GB,
|
|
478
|
+
dirName: this.dirName,
|
|
479
|
+
usedGiB: (systemMetrics.disk.used / (1024 * 1024 * 1024)).toFixed(2),
|
|
480
|
+
freeGiB: (systemMetrics.disk.free / (1024 * 1024 * 1024)).toFixed(2),
|
|
481
|
+
percentUsed: formatPercent(systemMetrics.disk.percentUsed),
|
|
482
|
+
warning: systemMetrics.disk.warning,
|
|
483
|
+
},
|
|
484
|
+
memory: {
|
|
485
|
+
freeGB: (systemMetrics.memory.free / (1024 * 1024 * 1024)).toFixed(2),
|
|
486
|
+
percentUsed: formatPercent(systemMetrics.memory.percentUsed),
|
|
487
|
+
},
|
|
488
|
+
},
|
|
489
|
+
gc: gcSummary,
|
|
490
|
+
constraints: {
|
|
491
|
+
cpu: node_os_1.default.cpus().length,
|
|
492
|
+
memoryGB: Math.floor(node_os_1.default.totalmem() / (1024 * 1024 * 1024)),
|
|
493
|
+
note: "Using system resources (no machine constraints specified)",
|
|
494
|
+
},
|
|
495
|
+
process: {
|
|
496
|
+
node: {
|
|
497
|
+
memoryUsageMB: formatBytes(processMetrics.node.memoryUsage),
|
|
498
|
+
memoryUsagePercent: formatPercent(processMetrics.node.memoryUsagePercent),
|
|
499
|
+
heapUsedMB: formatBytes(processMetrics.node.heapUsed),
|
|
500
|
+
heapSizeLimitMB: formatBytes(processMetrics.node.heapSizeLimit),
|
|
501
|
+
heapUsagePercent: formatPercent(processMetrics.node.heapUsagePercent),
|
|
502
|
+
availableHeapMB: formatBytes(processMetrics.node.availableHeap),
|
|
503
|
+
isNearHeapLimit: processMetrics.node.isNearHeapLimit,
|
|
504
|
+
...(this.verbose
|
|
505
|
+
? {
|
|
506
|
+
heapStats: (0, node_v8_1.getHeapStatistics)(),
|
|
507
|
+
}
|
|
508
|
+
: {}),
|
|
509
|
+
},
|
|
510
|
+
targetProcess: processMetrics.targetProcess
|
|
511
|
+
? {
|
|
512
|
+
method: processMetrics.targetProcess.method,
|
|
513
|
+
processName: processMetrics.targetProcess.processName,
|
|
514
|
+
count: processMetrics.targetProcess.count,
|
|
515
|
+
averages: processMetrics.targetProcess.averages
|
|
516
|
+
? {
|
|
517
|
+
cpuPercent: formatPercent(processMetrics.targetProcess.averages.cpu * 100),
|
|
518
|
+
memoryPercent: formatPercent(processMetrics.targetProcess.averages.memory),
|
|
519
|
+
rssMB: formatBytes(processMetrics.targetProcess.averages.rss * 1024),
|
|
520
|
+
vszMB: formatBytes(processMetrics.targetProcess.averages.vsz * 1024),
|
|
521
|
+
}
|
|
522
|
+
: null,
|
|
523
|
+
totals: processMetrics.targetProcess.totals
|
|
524
|
+
? {
|
|
525
|
+
cpuPercent: formatPercent(processMetrics.targetProcess.totals.cpu * 100),
|
|
526
|
+
memoryPercent: formatPercent(processMetrics.targetProcess.totals.memory),
|
|
527
|
+
rssMB: formatBytes(processMetrics.targetProcess.totals.rss * 1024),
|
|
528
|
+
vszMB: formatBytes(processMetrics.targetProcess.totals.vsz * 1024),
|
|
529
|
+
}
|
|
530
|
+
: null,
|
|
531
|
+
}
|
|
532
|
+
: null,
|
|
533
|
+
},
|
|
534
|
+
timestamp: new Date().toISOString(),
|
|
535
|
+
};
|
|
536
|
+
}
|
|
537
|
+
}
|
|
538
|
+
exports.ResourceMonitor = ResourceMonitor;
|
|
539
|
+
function summarizeGCEntries(entries) {
|
|
540
|
+
if (entries.length === 0) {
|
|
541
|
+
return {
|
|
542
|
+
count: 0,
|
|
543
|
+
totalDuration: 0,
|
|
544
|
+
avgDuration: 0,
|
|
545
|
+
maxDuration: 0,
|
|
546
|
+
kinds: {},
|
|
547
|
+
};
|
|
548
|
+
}
|
|
549
|
+
let totalDuration = 0;
|
|
550
|
+
let maxDuration = 0;
|
|
551
|
+
const kinds = {};
|
|
552
|
+
for (const e of entries) {
|
|
553
|
+
const duration = e.duration;
|
|
554
|
+
totalDuration += duration;
|
|
555
|
+
if (duration > maxDuration)
|
|
556
|
+
maxDuration = duration;
|
|
557
|
+
const kind = kindName(e?.detail?.kind ?? "unknown");
|
|
558
|
+
if (!kinds[kind]) {
|
|
559
|
+
kinds[kind] = { count: 0, totalDuration: 0, maxDuration: 0 };
|
|
560
|
+
}
|
|
561
|
+
kinds[kind].count += 1;
|
|
562
|
+
kinds[kind].totalDuration += duration;
|
|
563
|
+
if (duration > kinds[kind].maxDuration)
|
|
564
|
+
kinds[kind].maxDuration = duration;
|
|
565
|
+
}
|
|
566
|
+
// finalize averages
|
|
567
|
+
const avgDuration = totalDuration / entries.length;
|
|
568
|
+
const kindsWithAvg = {};
|
|
569
|
+
for (const [kind, stats] of Object.entries(kinds)) {
|
|
570
|
+
kindsWithAvg[kind] = {
|
|
571
|
+
count: stats.count,
|
|
572
|
+
totalDuration: stats.totalDuration,
|
|
573
|
+
avgDuration: stats.totalDuration / stats.count,
|
|
574
|
+
maxDuration: stats.maxDuration,
|
|
575
|
+
};
|
|
576
|
+
}
|
|
577
|
+
return {
|
|
578
|
+
count: entries.length,
|
|
579
|
+
totalDuration,
|
|
580
|
+
avgDuration,
|
|
581
|
+
maxDuration,
|
|
582
|
+
kinds: kindsWithAvg,
|
|
583
|
+
};
|
|
584
|
+
}
|
|
585
|
+
const kindName = (k) => {
|
|
586
|
+
if (typeof k === "number") {
|
|
587
|
+
return ({
|
|
588
|
+
[node_perf_hooks_1.constants.NODE_PERFORMANCE_GC_MAJOR]: "major",
|
|
589
|
+
[node_perf_hooks_1.constants.NODE_PERFORMANCE_GC_MINOR]: "minor",
|
|
590
|
+
[node_perf_hooks_1.constants.NODE_PERFORMANCE_GC_INCREMENTAL]: "incremental",
|
|
591
|
+
[node_perf_hooks_1.constants.NODE_PERFORMANCE_GC_WEAKCB]: "weak-cb",
|
|
592
|
+
}[k] ?? `kind:${k}`);
|
|
593
|
+
}
|
|
594
|
+
return k;
|
|
595
|
+
};
|
|
596
|
+
//# sourceMappingURL=resourceMonitor.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"resourceMonitor.js","sourceRoot":"","sources":["../../../../src/v3/serverOnly/resourceMonitor.ts"],"names":[],"mappings":"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"}
|
|
@@ -2,5 +2,5 @@ import { Attributes } from "@opentelemetry/api";
|
|
|
2
2
|
export declare const NULL_SENTINEL = "$@null((";
|
|
3
3
|
export declare const CIRCULAR_REFERENCE_SENTINEL = "$@circular((";
|
|
4
4
|
export declare function flattenAttributes(obj: unknown, prefix?: string, maxAttributeCount?: number): Attributes;
|
|
5
|
-
export declare function unflattenAttributes(obj: Attributes): Record<string, unknown> | string | number | boolean | null | undefined;
|
|
5
|
+
export declare function unflattenAttributes(obj: Attributes, filteredKeys?: string[]): Record<string, unknown> | string | number | boolean | null | undefined;
|
|
6
6
|
export declare function primitiveValueOrflattenedAttributes(obj: Record<string, unknown> | Array<unknown> | string | boolean | number | undefined, prefix: string | undefined): Attributes | string | number | boolean | undefined;
|
|
@@ -208,7 +208,7 @@ class AttributeFlattener {
|
|
|
208
208
|
function isRecord(value) {
|
|
209
209
|
return value !== null && typeof value === "object" && !Array.isArray(value);
|
|
210
210
|
}
|
|
211
|
-
function unflattenAttributes(obj) {
|
|
211
|
+
function unflattenAttributes(obj, filteredKeys) {
|
|
212
212
|
if (typeof obj !== "object" || obj === null || Array.isArray(obj)) {
|
|
213
213
|
return obj;
|
|
214
214
|
}
|
|
@@ -223,6 +223,9 @@ function unflattenAttributes(obj) {
|
|
|
223
223
|
}
|
|
224
224
|
const result = {};
|
|
225
225
|
for (const [key, value] of Object.entries(obj)) {
|
|
226
|
+
if (filteredKeys?.includes(key)) {
|
|
227
|
+
continue;
|
|
228
|
+
}
|
|
226
229
|
const parts = key.split(".").reduce((acc, part) => {
|
|
227
230
|
if (part.startsWith("[") && part.endsWith("]")) {
|
|
228
231
|
// Handle array indices more precisely
|