UNPKG

btc-rpc-explorer

Version:

Open-source, self-hosted Bitcoin explorer

57 lines (44 loc) 2.16 kB
const os = require("os"); const v8 = require("v8"); const pidusage = require("pidusage"); const statTracker = require("./statTracker.js"); const debugLog = require("debug")("systemMonitor"); try { var eventLoopStats = require("event-loop-stats"); } catch (err) { debugLog("Failed loading event-loop-stats, skipping system monitor"); } const systemMonitorInterval = setInterval(() => { pidusage(process.pid, (err, stat) => { if (err) { debugLog(err); return; } debugLog("pidusage: " + JSON.stringify(stat)); statTracker.trackValue("process.cpu", stat.cpu); statTracker.trackValue("process.mem_mb", stat.memory / 1024 / 1024); statTracker.trackValue("process.ctime", stat.ctime); statTracker.trackValue("process.uptime_s", stat.elapsed / 1000); let loadavg = os.loadavg(); statTracker.trackValue("os.loadavg.1min", loadavg[0]); statTracker.trackValue("os.loadavg.5min", loadavg[1]); statTracker.trackValue("os.loadavg.15min", loadavg[2]); let heapStats = v8.getHeapStatistics(); statTracker.trackValue("mem.heap.total", heapStats.total_heap_size / 1024 / 1024); statTracker.trackValue("mem.heap.total-executable", heapStats.total_heap_size_executable / 1024 / 1024); statTracker.trackValue("mem.heap.total-physical", heapStats.total_physical_size / 1024 / 1024); statTracker.trackValue("mem.heap.total-available", heapStats.total_available_size / 1024 / 1024); statTracker.trackValue("mem.heap.used", heapStats.used_heap_size / 1024 / 1024); statTracker.trackValue("mem.heap.limit", heapStats.heap_size_limit / 1024 / 1024); statTracker.trackValue("mem.malloced", heapStats.malloced_memory / 1024 / 1024); statTracker.trackValue("mem.malloced-peak", heapStats.peak_malloced_memory / 1024 / 1024); if (eventLoopStats) { let loopStats = eventLoopStats.sense(); statTracker.trackValue("eventloop.min", loopStats.min); statTracker.trackValue("eventloop.max", loopStats.max); statTracker.trackValue("eventloop.sum", loopStats.sum); statTracker.trackValue("eventloop.num", loopStats.num); } }); }, process.env.SYSTEM_MONITOR_INTERVAL || 60 * 60 * 1000); systemMonitorInterval.unref();