simple-stats-server
Version:
dead-simple resource stats for Node.js servers
88 lines (73 loc) • 1.97 kB
JavaScript
(function() {
var add, maxInterval, os, sample, samples, timer, utilization;
os = require('os');
utilization = require('./helper/cpu-calc');
timer = false;
samples = [];
maxInterval = 61;
module.exports = sample = function() {
var cb, doCalc, interval;
if (typeof arguments[0] === 'number') {
interval = arguments[0], cb = arguments[1];
} else {
cb = arguments[0];
}
if (interval == null) {
interval = 1;
}
if (typeof cb !== 'function') {
cb = (function() {});
}
doCalc = function() {
var diffs, final, initial, _i, _ref, _results;
initial = samples.slice(-1 - interval)[0];
final = samples.slice(-1)[0];
diffs = (function() {
_results = [];
for (var _i = 0, _ref = initial.length; 0 <= _ref ? _i < _ref : _i > _ref; 0 <= _ref ? _i++ : _i--){ _results.push(_i); }
return _results;
}).apply(this).map(function(i) {
return utilization(initial[i], final[i]);
});
cb(null, diffs);
return diffs;
};
if (samples.length <= interval) {
if (maxInterval <= interval) {
maxInterval = interval + 1;
}
return setTimeout(doCalc, 1000 * interval - samples.length + 1);
} else {
return doCalc();
}
};
add = function(label, timeout) {
return sample[label] = sample.bind(null, timeout);
};
add('1s', 1);
add('5s', 5);
add('15s', 15);
add('1m', 60);
Object.defineProperty(sample, 'cancel', {
value: function() {
if (!timer) {
return;
}
clearInterval(timer);
return timer = false;
}
});
Object.defineProperty(sample, 'collect', {
value: function() {
if (timer) {
return;
}
return timer = setInterval((function() {
if (samples.length >= maxInterval) {
samples.unshift();
}
return samples.push(os.cpus());
}), 1000);
}
});
}).call(this);