Sha256: 869eeae6fc1ba2e17ec3df944e4b70290769b0d806df72761902d041d32ce912

Contents?: true

Size: 1.13 KB

Versions: 3

Compression:

Stored size: 1.13 KB

Contents

require "logstash/outputs/base"
require "em-websocket" # rubygem 'em-websocket'

class LogStash::Outputs::Websocket < LogStash::Outputs::Base
  def initialize(url, config={}, &block)
    super
  end

  def register
    @channel = EventMachine::Channel.new
    @subscribers = 0
    @url.host = (@url.host or "0.0.0.0")
    @url.port = (@url.port or 3232)
    @logger.info("Registering websocket on #{@url}")
    EventMachine::WebSocket.start(:host => @url.host, :port => @url.port) do |ws|
      ws.onopen do
        @subscribers += 1
        @logger.info("New #{self.class.name} connection")
        sid = @channel.subscribe do |msg| 
          ws.send msg
        end
        ws.onclose do
          @channel.unsubscribe(sid)
          @subscribers -= 1
        end # ws.onclose
      end # ws.onopen
    end
  end # def register

  def receive(event)
    # Only publish the event to websockets if there are subscribers
    # TODO(sissel): send a patch to eventmachine to fix this.
    if @subscribers > 0
      @logger.info("Sending event to websocket.")
      @channel.push event.to_json
    end
  end # def event
end # class LogStash::Outputs::Websocket

Version data entries

3 entries across 3 versions & 1 rubygems

Version Path
logstash-lite-0.2.20101222161646 lib/logstash/outputs/websocket.rb
logstash-lite-0.2.20101208111718 lib/logstash/outputs/websocket.rb
logstash-lite-0.2.20101207114354 lib/logstash/outputs/websocket.rb