lib/metrics/platforms/generic/system-cpu.js (36 lines of code) (raw):

/* * Copyright Elasticsearch B.V. and other contributors where applicable. * Licensed under the BSD 2-Clause License; you may not use this file except in * compliance with the BSD 2-Clause License. */ 'use strict'; const os = require('os'); function cpuAverage() { const times = { user: 0, nice: 0, sys: 0, idle: 0, irq: 0, total: 0, }; const cpus = os.cpus(); for (const cpu of cpus) { for (const type of Object.keys(cpu.times)) { times[type] += cpu.times[type]; times.total += cpu.times[type]; } } // Average over CPU count const averages = {}; for (const type of Object.keys(times)) { averages[type] = times[type] / cpus.length; } return averages; } function cpuPercent(last, next) { const idle = next.idle - last.idle; const total = next.total - last.total; return 1 - idle / total || 0; } let last = cpuAverage(); module.exports = function systemCPUUsage() { const next = cpuAverage(); const result = cpuPercent(last, next); last = next; return result; };