Repository URL to install this package:
|
Version:
1.0.13 ▾
|
var _ = require("lodash"),
Joi = require("joi"),
Usage = require("usage");
module.exports = function(options){
var internals = {
options : {
checkIntervalMs : 2000,
warnDelayMs : 500,
pid : process.pid,
logger : {
info : function(message) {
console.log(JSON.stringify(message));
},
warn : function(message) {
console.log(JSON.stringify(message));
}
}
},
schema : Joi.object().keys({
checkIntervalMs : Joi.number().integer().min(1),
warnDelayMs : Joi.number().integer().min(1),
logger : Joi.object().keys({
info : Joi.func().required(),
warn : Joi.func().required()
})
})
};
validate(options);
internals.options = _.assign(internals.options, options);
function validate(options){
Joi.validate(options, internals.schema, { allowUnknown : true }, function(err){
if(err){
throw err;
}
});
}
setInterval(function(){
var time = Date.now();
setImmediate(function(){
Usage.lookup(internals.options.pid, function(err, result){
var message = {
message : "event loop detector",
status : {
loopLagMs : Math.abs(Date.now() - time),
memory : process.memoryUsage(),
cpu : result.cpu
}
};
if(!err && result.cpu){
message.status.cpu = result.cpu;
}
if(message.status.loopLagMs >= internals.options.warnDelayMs)
internals.options.logger.warn(message);
else
internals.options.logger.info(message);
});
});
}, internals.options.checkIntervalMs);
};