* Builds process metrics object for all users.
()
| 646 | * Builds process metrics object for all users. |
| 647 | */ |
| 648 | function buildProcessMetrics(): ProcessMetrics | undefined { |
| 649 | try { |
| 650 | const mem = process.memoryUsage() |
| 651 | const cpu = process.cpuUsage() |
| 652 | const now = Date.now() |
| 653 | |
| 654 | let cpuPercent: number | undefined |
| 655 | if (prevCpuUsage && prevWallTimeMs) { |
| 656 | const wallDeltaMs = now - prevWallTimeMs |
| 657 | if (wallDeltaMs > 0) { |
| 658 | const userDeltaUs = cpu.user - prevCpuUsage.user |
| 659 | const systemDeltaUs = cpu.system - prevCpuUsage.system |
| 660 | cpuPercent = |
| 661 | ((userDeltaUs + systemDeltaUs) / (wallDeltaMs * 1000)) * 100 |
| 662 | } |
| 663 | } |
| 664 | prevCpuUsage = cpu |
| 665 | prevWallTimeMs = now |
| 666 | |
| 667 | return { |
| 668 | uptime: process.uptime(), |
| 669 | rss: mem.rss, |
| 670 | heapTotal: mem.heapTotal, |
| 671 | heapUsed: mem.heapUsed, |
| 672 | external: mem.external, |
| 673 | arrayBuffers: mem.arrayBuffers, |
| 674 | // eslint-disable-next-line eslint-plugin-n/no-unsupported-features/node-builtins |
| 675 | constrainedMemory: process.constrainedMemory(), |
| 676 | cpuUsage: cpu, |
| 677 | cpuPercent, |
| 678 | } |
| 679 | } catch { |
| 680 | return undefined |
| 681 | } |
| 682 | } |
| 683 | |
| 684 | /** |
| 685 | * Get core event metadata shared across all analytics systems. |