I want to get CPU usage information. I used setTimeout
function to get the information.
When I use let result = getCPUUsage()
the console shows
getCPUUsage()>> Promise { <pending> }
so if I make the line like let result = await getCPUUsage()
, then console emitted error and showed
SyntaxError: await is only valid in async function
I want to make that valuable result
as JSON {avg:<0~100>}. Could you please tell me how to get resolved JSON data from Promise, and make result
the resolved JSON?
const os = require("os");
let result = getCPUUsage() // or >> let result = await getCPUUsage()
console.log('getCPUUsage()>>', result)
//Create function to get CPU information
function cpuAverage() {
//Initialise sum of idle and time of cores and fetch CPU info
let totalIdle = 0, totalTick = 0;
let cpus = os.cpus();
//Loop through CPU cores
for(let i = 0, len = cpus.length; i < len; i++) {
//Select CPU core
let 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};
}
// fetch cpu info
function getCPUUsage() {
return new Promise(async (resolve, reject) => {
let data = {avg : 0}
try {
//Grab first CPU Measure
let startMeasure = cpuAverage();
//Set delay for second Measure
const wait = ms => new Promise(resolve => setTimeout(resolve = () =>{
//Grab second Measure
let endMeasure = cpuAverage();
//Calculate the difference in idle and total time between the measures
let idleDifference = endMeasure.idle - startMeasure.idle;
let totalDifference = endMeasure.total - startMeasure.total;
//Calculate the average percentage CPU usage
percentageCPU = 100 - ~~(100 * idleDifference / totalDifference);
}, ms));
await wait(100)
console.log(percentageCPU + "% CPU Usage.");
data.avg = percentageCPU
resolve(data)
}
catch (e) {
console.log('getCPUUsage error:', e);
resolve(false);
}
})
}