Last active
October 28, 2024 22:00
-
-
Save GaetanoPiazzolla/c40e1ebb9f709d091208e89baf9f4e00 to your computer and use it in GitHub Desktop.
% CPU in Node.JS
This file contains 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); | |
}); |
Hey there! Thank you. This was the only one that I found that showed the same values as in htop. I created an NPM package with your code: https://github.com/felipebutcher/node-os-info
sir im used your npm module from your git!
i want to use it in my bot command but it support only callback values.
please help me to use it in a variable that i can pass that into my bot response.
like this:-
Total Memory : ${totalram}GB
Free Memory : ${totalfreeram}GB
Used Memory : ${total_used}GB
I tried different things but your code brings out the most accurate readings. I tried and tested it, Thanks, mate
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
@djmisterjon you came to the gist that the guy kindly shared and commented "bullshit". that's an asshole attitude. am i the one insulting people here? come on.