-
-
Save vlrmprjct/6e1f00f1bb14ddf4216dea021b268fc1 to your computer and use it in GitHub Desktop.
% CPU in Node.JS
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
const os = require("os"); | |
//Create function to get CPU information | |
function cpuAverage() { | |
//Initialise sum of idle and time of cores and fetch CPU info | |
var totalIdle = 0, totalTick = 0; | |
var cpus = os.cpus(); | |
//Loop through CPU cores | |
for (var i = 0, len = cpus.length; i < len; i++) { | |
//Select CPU core | |
var cpu = cpus[i]; | |
//Total up the time in the cores tick | |
for (type in cpu.times) { | |
totalTick += cpu.times[type]; | |
} | |
//Total up the idle time of the core | |
totalIdle += cpu.times.idle; | |
} | |
//Return the average Idle and Tick times | |
return {idle: totalIdle / cpus.length, total: totalTick / cpus.length}; | |
} | |
// function to calculate average of array | |
const arrAvg = function (arr) { | |
if (arr && arr.length >= 1) { | |
const sumArr = arr.reduce((a, b) => a + b, 0) | |
return sumArr / arr.length; | |
} | |
}; | |
// load average for the past 1000 milliseconds calculated every 100 | |
function getCPULoadAVG(avgTime = 1000, delay = 100) { | |
return new Promise((resolve, reject) => { | |
const n = ~~(avgTime / delay); | |
if (n <= 1) { | |
reject('Error: interval to small'); | |
} | |
let i = 0; | |
let samples = []; | |
const avg1 = cpuAverage(); | |
let interval = setInterval(() => { | |
console.debug('CPU Interval: ', i); | |
if (i >= n) { | |
clearInterval(interval); | |
resolve(~~((arrAvg(samples) * 100))); | |
} | |
const avg2 = cpuAverage(); | |
const totalDiff = avg2.total - avg1.total; | |
const idleDiff = avg2.idle - avg1.idle; | |
samples[i] = (1 - idleDiff / totalDiff); | |
i++; | |
}, delay); | |
}); | |
} | |
getCPULoadAVG(1000, 100).then((avg) => { | |
console.log(avg); | |
}); |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment