mirror of https://github.com/embarklabs/embark.git
use eachObject to avoid async issues; support non-recurrent checks
This commit is contained in:
parent
173c571147
commit
4bf31328e2
|
@ -32,7 +32,7 @@ Engine.prototype.init = function(_options) {
|
|||
this.servicesMonitor = new ServicesMonitor({events: this.events, logger: this.logger});
|
||||
this.servicesMonitor.addCheck('embarkVersion', function(cb) {
|
||||
return cb({name: 'Embark ' + self.version, status: 'green'});
|
||||
});
|
||||
}, 0);
|
||||
};
|
||||
|
||||
Engine.prototype.startMonitor = function() {
|
||||
|
@ -160,7 +160,6 @@ Engine.prototype.webServerService = function(options) {
|
|||
Engine.prototype.ipfsService = function(options) {
|
||||
var self = this;
|
||||
self.servicesMonitor.addCheck('IPFS', function(cb) {
|
||||
|
||||
utils.checkIsAvailable('http://localhost:5001', function(available) {
|
||||
if (available) {
|
||||
//Ideally this method should be in an IPFS API JSONRPC wrapper
|
||||
|
|
|
@ -3,6 +3,18 @@ var async = require('async');
|
|||
var http = require('http');
|
||||
var utils = require('./utils.js');
|
||||
|
||||
// TODO: repeated, add this to an async extensions file
|
||||
function asyncEachObject(object, iterator, callback) {
|
||||
async.each(
|
||||
Object.keys(object || {}),
|
||||
function(key, next){
|
||||
iterator(key, object[key], next);
|
||||
},
|
||||
callback
|
||||
);
|
||||
}
|
||||
async.eachObject = asyncEachObject;
|
||||
|
||||
var ServicesMonitor = function(options) {
|
||||
this.events = options.events;
|
||||
this.logger = options.logger;
|
||||
|
@ -12,34 +24,38 @@ var ServicesMonitor = function(options) {
|
|||
};
|
||||
|
||||
ServicesMonitor.prototype.addCheck = function(name, checkFn, time) {
|
||||
this.logger.info('add check');
|
||||
this.logger.info('add check: ' + name);
|
||||
// TODO: check if a service with the same name already exists
|
||||
this.checkList[name] = {fn: checkFn, interval: time || 5000};
|
||||
};
|
||||
|
||||
ServicesMonitor.prototype.startMonitor = function() {
|
||||
this.logger.info('startMonitor');
|
||||
var self = this;
|
||||
var checkName;
|
||||
|
||||
for (checkName in this.checkList) {
|
||||
var check = this.checkList[checkName];
|
||||
|
||||
async.eachObject(this.checkList, function(checkName, check, callback) {
|
||||
self.events.on('check:' + checkName, function(obj) {
|
||||
self.logger.info(JSON.stringify(obj));
|
||||
//self.logger.info('checked ' + checkName);
|
||||
//self.logger.info(JSON.stringify(obj));
|
||||
//self.logger.info(JSON.stringify(self.checkState));
|
||||
self.checkState[checkName] = obj.name[obj.status];
|
||||
self.events.emit("servicesState", self.checkState);
|
||||
});
|
||||
|
||||
this.checkTimers[checkName] = setInterval(function() {
|
||||
if (check.interval !== 0) {
|
||||
self.checkTimers[checkName] = setInterval(function() {
|
||||
check.fn.call(check.fn, function(obj) {
|
||||
self.events.emit('check:' + checkName, obj);
|
||||
});
|
||||
}, check.interval);
|
||||
}
|
||||
|
||||
check.fn.call(check.fn, function(obj) {
|
||||
self.events.emit('check:' + checkName, obj);
|
||||
});
|
||||
}
|
||||
}, function(err) {
|
||||
});
|
||||
this.logger.info(JSON.stringify(this.checkState));
|
||||
};
|
||||
|
||||
// TODO: old checks to be moved
|
||||
|
|
Loading…
Reference in New Issue