@stoplight/moleculer
Version:
Fast & powerful microservices framework for Node.JS
76 lines (70 loc) • 1.85 kB
JavaScript
/*
* moleculer
* Copyright (c) 2018 MoleculerJS (https://github.com/moleculerjs/moleculer)
* MIT Licensed
*/
;
/**
* CPU usage measure.
*
* Based on: https://github.com/icebob/cpu
*/
const os = require("os");
/* istanbul ignore next */
module.exports = function getCpuUsage(sampleTime = 100) {
return new Promise((resolve, reject) => {
try {
const first = os.cpus().map(cpu => cpu.times);
setTimeout(() => {
try {
const second = os.cpus().map(cpu => cpu.times);
setTimeout(() => {
try {
const third = os.cpus().map(cpu => cpu.times);
const usages = [];
for (let i = 0; i < first.length; i++) {
const first_idle = first[i].idle;
const first_total =
first[i].idle +
first[i].user +
first[i].nice +
first[i].sys +
first[i].irq;
const second_idle = second[i].idle;
const second_total =
second[i].idle +
second[i].user +
second[i].nice +
second[i].sys +
second[i].irq;
const third_idle = third[i].idle;
const third_total =
third[i].idle +
third[i].user +
third[i].nice +
third[i].sys +
third[i].irq;
const first_usage =
1 - (second_idle - first_idle) / (second_total - first_total);
const second_usage =
1 - (third_idle - second_idle) / (third_total - second_total);
const per_usage = ((first_usage + second_usage) / 2) * 100;
usages.push(per_usage);
}
resolve({
avg: usages.reduce((a, b) => a + b, 0) / usages.length,
usages
});
} catch (err) {
reject(err);
}
}, sampleTime);
} catch (err) {
reject(err);
}
}, sampleTime);
} catch (err) {
reject(err);
}
});
};