class LogStash::Inputs::Udp

Read messages as events over the network via udp.

Public Class Methods

new(params) click to toggle source
Calls superclass method LogStash::Inputs::Base::new
# File lib/logstash/inputs/udp.rb, line 26
def initialize(params)
  super
  BasicSocket.do_not_reverse_lookup = true
end

Public Instance Methods

register() click to toggle source
# File lib/logstash/inputs/udp.rb, line 32
def register
  @udp = nil
end
run(output_queue) click to toggle source
# File lib/logstash/inputs/udp.rb, line 37
def run(output_queue)
  begin
    # udp server
    udp_listener(output_queue)
  rescue LogStash::ShutdownSignal
    # do nothing, shutdown was requested.
  rescue => e
    @logger.warn("UDP listener died", :exception => e, :backtrace => e.backtrace)
    sleep(5)
    retry
  end # begin
end
teardown() click to toggle source
# File lib/logstash/inputs/udp.rb, line 77
def teardown
  @udp.close if @udp && !@udp.closed?
end

Private Instance Methods

udp_listener(output_queue) click to toggle source
# File lib/logstash/inputs/udp.rb, line 51
def udp_listener(output_queue)
  @logger.info("Starting UDP listener", :address => "#{@host}:#{@port}")

  if @udp && ! @udp.closed?
    @udp.close
  end

  @udp = UDPSocket.new(Socket::AF_INET)
  @udp.bind(@host, @port)

  loop do
    payload, client = @udp.recvfrom(@buffer_size)
    @codec.decode(payload) do |event|
      decorate(event)
      event["host"] = client[3]
      output_queue << event
    end
  end
ensure
  if @udp
    @udp.close_read rescue nil
    @udp.close_write rescue nil
  end
end