Skip to content

Instantly share code, notes, and snippets.

@GaetanoPiazzolla
Last active August 11, 2025 03:45
Show Gist options
  • Select an option

  • Save GaetanoPiazzolla/c40e1ebb9f709d091208e89baf9f4e00 to your computer and use it in GitHub Desktop.

Select an option

Save GaetanoPiazzolla/c40e1ebb9f709d091208e89baf9f4e00 to your computer and use it in GitHub Desktop.

Revisions

  1. GaetanoPiazzolla revised this gist Oct 14, 2020. No changes.
  2. GaetanoPiazzolla created this gist Nov 8, 2019.
    75 changes: 75 additions & 0 deletions avgLoad.js
    Original file line number Diff line number Diff line change
    @@ -0,0 +1,75 @@
    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);
    });