Skip to content

Commit

Permalink
Merge pull request #321 from arb/stop-cleanup
Browse files Browse the repository at this point in the history
Cleaned up stop function
  • Loading branch information
geek committed Apr 2, 2015
2 parents 9e4e405 + 8619d2e commit 7ee3dd8
Showing 1 changed file with 35 additions and 20 deletions.
55 changes: 35 additions & 20 deletions lib/monitor.js
Original file line number Diff line number Diff line change
Expand Up @@ -49,7 +49,10 @@ module.exports = internals.Monitor = function (server, options) {

this.settings = options;
this._reporters = [];
this._state = {};
this._state = {
handlers: {},
extensions: {}
};
this._server = server;

// Options used to create Great Response
Expand Down Expand Up @@ -154,28 +157,29 @@ internals.Monitor.prototype.start = function (callback) {
}

self._state.opsInterval = setInterval(setupOpsMonitoring(), self.settings.opsInterval);

self._state.logHander = self._logHandler.bind(self);
self._state.errorHandler = self._errorHandler.bind(self);
self._state.responseHandler = self._responseHandler.bind(self);
self._state.opsHandler = self._opsHandler.bind(self);
self._state.requestLogHandler = self._requestLogHandler.bind(self);
self._state.wreckHandler = self._wreckHandler.bind(self);

self._state.handlers.log = self._logHandler.bind(self);
self._state.handlers['request-error'] = self._errorHandler.bind(self);
self._state.handlers[self.settings.responseEvent] = self._responseHandler.bind(self);
self._state.handlers.request = self._requestLogHandler.bind(self);

// Initialize Events
self._server.on('log', self._state.logHander);
self._server.on('request-error', self._state.errorHandler);
self._server.on(self.settings.responseEvent, self._state.responseHandler);
internals.iterateOverEventHash(self._state.handlers, function (event, handler) {

self._server.on(event, handler);
});

self.on('ops', self._state.opsHandler);
self._server.on('request', self._state.requestLogHandler);
Wreck.on('response', self._state.wreckHandler);

// Events can not be any of ['log', 'request-error', 'ops', 'request', 'response', 'tail']
for (var i = 0, il = self.settings.extensions.length; i < il; ++i) {
var event = self.settings.extensions[i];

self._state[event] = self._extensionHandler.bind(self, event);
self._server.on(self.settings.extensions[i], self._state[event]);
self._state.extensions[event] = self._extensionHandler.bind(self, event);
self._server.on(self.settings.extensions[i], self._state.extensions[event]);
}

return callback();
Expand All @@ -185,20 +189,22 @@ internals.Monitor.prototype.start = function (callback) {

internals.Monitor.prototype.stop = function () {

var self = this;
var state = this._state;
clearInterval(state.opsInterval);

this._server.removeListener('log', state.logHander);
this._server.removeListener('request-error', state.errorHandler);
this._server.removeListener(this.settings.responseEvent, state.responseHandler);
this.removeListener('ops', state.opsHandler);
this._server.removeListener('request', state.requestLogHandler);
Wreck.removeListener('response', state.wreckHandler);

for (var i = 0, il = this.settings.extensions.length; i < il; ++i) {
var event = this.settings.extensions[i];
this._server.removeListener(event, this._state[event]);
}
internals.iterateOverEventHash(state.handlers, function (event, handler) {

self._server.removeListener(event, handler);
});

internals.iterateOverEventHash(state.extensions, function (event, handler) {

self._server.removeListener(event, handler);
});

for (var j = 0, jl = this._reporters.length; j < jl; ++j) {
var reporter = this._reporters[j];
Expand Down Expand Up @@ -256,3 +262,12 @@ internals.Monitor.prototype._extensionHandler = function (eventName) {
event.event = eventName;
this.emit('report', eventName, Object.freeze(event));
};

internals.iterateOverEventHash = function (hash, predicate) {

var keys = Object.keys(hash);
for (var k = 0, kl = keys.length; k < kl; ++k) {
var key = keys[k];
predicate(key, hash[key]);
}
};

0 comments on commit 7ee3dd8

Please sign in to comment.