diff --git a/_src/logger.coffee b/_src/logger.coffee index f2450b7..553f7bd 100644 --- a/_src/logger.coffee +++ b/_src/logger.coffee @@ -50,14 +50,16 @@ class NsqLogger extends require( "./basic" ) if not _topicsInst? _topicsInst = new Topics( @config ) return _topicsInst - + @_start() return _start: => if @ready return - + if not @active() + return + @Topics.filter ( testT )=> if not @nsTest( testT ) return false @@ -90,8 +92,32 @@ class NsqLogger extends require( "./basic" ) @Topics.on "remove", @removeReader @ready = true + @connected = true @emit( "ready" ) return + + + return + + connect: => + if not @config.active + return + + @Writer.connect() + @Topics.activate() + + @_start() + return @ + + disconnect: => + @connected = false + @ready = false + @Topics.deactivate() + @Topics.removeListener( "add", @addReader ) + @Topics.removeListener( "remove", @addReader ) + @_destroyReaders => + @emit( "disconnected" ) + return return destroy: ( cb )=> @@ -99,19 +125,10 @@ class NsqLogger extends require( "./basic" ) if not @ready return - _count = Object.keys( @READERS ).length - - @Topics.deactivate() + @disconnect() @Writer.destroy => - @warning "destroy #{_count} readers" - for _name, _reader of @READERS - @READERS[ _name ].destroy => - _count-- - if _count <= 0 - @removeAllListeners() - cb() - return + @_destroyReaders( cb ) return return @@ -164,6 +181,20 @@ class NsqLogger extends require( "./basic" ) @log "error", "write messag to exceeded list", err return return + + _destroyReaders: ( cb )=> + @warning "destroy #{_count} readers" + _count = Object.keys( @READERS ).length + + for _name, _reader of @READERS + @READERS[ _name ].destroy => + _count-- + if _count <= 0 + @removeAllListeners() + cb() + return + return + ERRORS: => return @extend {}, super, diff --git a/_src/test/main.coffee b/_src/test/main.coffee index 38b1677..3983430 100644 --- a/_src/test/main.coffee +++ b/_src/test/main.coffee @@ -159,15 +159,47 @@ describe "----- nsq-logger TESTS -----", -> describe "Active Tests", -> - it "wait for errors", ( done )-> + logger2 = null + + it "wait for errors of deactivated logger", ( done )-> @timeout(4000) - logger = new NsqLogger( extend( {}, CNF, { active: false} ) ) + logger2 = new NsqLogger( extend( {}, CNF, { active: false} ) ) - logger.on "error", ( err )-> + logger2.on "error", ( err )-> throw err return setTimeout( done, 3000 ) return + + it "activate logger", ( done )-> + + @timeout( 10000 ) + _topic = "nsq_logger_test_activate_test" + _data = randoms.obj.string( 13, 666 ) + + logger2.on "message", ( topic, data, cb, msg )-> + cb() + # wait for the previously generated topic + if topic is _topic + msg.attempts.should.be.Number().equal( 1 ) + + topic.should.equal( _topic ) + data.should.eql( _data ) + + logger.removeAllListeners( "message" ) + done() + return + + logger2.on "ready", -> + logger2.Writer.publish( _topic, _data ) + return + + logger2.activate() + + return + + return + return