@trigger.dev/core 4.0.4 → 4.0.5

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