YUKI Hiroshi
null+****@clear*****
Tue Jan 29 17:25:44 JST 2013
YUKI Hiroshi 2013-01-29 17:25:44 +0900 (Tue, 29 Jan 2013) New Revision: 398aca8e3abf09eddd464956d6a77c459cde0265 https://github.com/groonga/express-kotoumi/commit/398aca8e3abf09eddd464956d6a77c459cde0265 Log: Reconnect to the backend by extended version of fluent-logger itself Added files: lib/backend/fluent-logger.js Modified files: lib/backend/connection.js Modified: lib/backend/connection.js (+5 -20) =================================================================== --- lib/backend/connection.js 2013-01-29 16:05:14 +0900 (b31b923) +++ lib/backend/connection.js 2013-01-29 17:25:44 +0900 (53a1df7) @@ -7,7 +7,7 @@ */ var EventEmitter = require('events').EventEmitter; -var fluent = require('fluent-logger'); +var fluent = require('./fluent-logger'); var Receiver = require('./receiver').Receiver; var DEFAULT_FLUENT_TAG = @@ -44,9 +44,10 @@ Connection.prototype._initSender = function(wait) { this._sender = this._params.sender; if (!this._params.sender) { var options = { host: this._params.hostName || DEFAULT_FLUENT_HOST_NAME, - port: this._params.port || DEFAULT_FLUENT_PORT }; + port: this._params.port || DEFAULT_FLUENT_PORT, + reconnect: true }; var sender = fluent.createFluentSender(this._params.tag || DEFAULT_FLUENT_TAG, - options) + options); this._sender = sender; } }; @@ -132,26 +133,10 @@ Connection.prototype.emitMessage = function(type, body, callback, options) { }).bind(this), options.timeout); } } - options.delay = toPositiveInteger(options.delay); - setTimeout((function() { - this._sendEnvelope(envelope); - }).bind(this), options.delay); + this._sender.emit('message', envelope); return envelope; }; -Connection.prototype._sendEnvelope = function(envelope, wait) { - var errorHandler = (function(error) { - wait = wait ? wait * 2 : 1000; - setTimeout((function() { - this._sendEnvelope(envelope, wait); - }).bind(this), wait); - }).bind(this); - this._sender.on('error', errorHandler); - this._sender.emit('message', envelope, (function() { - this._sender.removeListener('error', errorHandler); - }).bind(this)); -}; - Connection.prototype.close = function() { this.removeAllListeners(); Added: lib/backend/fluent-logger.js (+44 -0) 100644 =================================================================== --- /dev/null +++ lib/backend/fluent-logger.js 2013-01-29 17:25:44 +0900 (9a0ba86) @@ -0,0 +1,44 @@ +/** + * fluent-logger-node mod + * "reconnect" option + */ + +var fluent = require('fluent-logger'); + +var OriginalFluentSender = fluent.FluentSender; + +function ExtendedFluentSender(tag, options) { + var sender = new OriginalFluentSender(tag, options); + sender.reconnect = options.reconnect || false; + return sender; +} + +OriginalFluentSender.prototype._connect = function(callback, reconnecting){ + var self = this; + if (self._socket === null) { + self._socket = new net.Socket(); + self._socket.setTimeout(self.timeout); + self._socket.on('error', function(err) { + if (self._socket) { + self._socket.destroy(); + self._socket = null; + if (self.reconnect && !reconnecting) { + self._connect(callback, true); + } else { + self._eventEmitter.emit('error', err); + } + } + }); + self._socket.connect(self.port, self.host, function() { + callback(); + }); + } else { + process.nextTick(function() { + callback(); + }); + } +}; + +fluent.FluentSender = ExtendedFluentSender; + +module.exports = fluent; -------------- next part -------------- HTML����������������������������...下載