class Vx::Lib::Logger::LogstashDevice

Public Class Methods

new() click to toggle source
# File lib/vx/lib/logger/logstash_device.rb, line 9
def initialize
  @mutex = Mutex.new
  @queue = Queue.new
end

Public Instance Methods

close() click to toggle source
# File lib/vx/lib/logger/logstash_device.rb, line 30
def close
  @mutex.synchronize do
    begin
      @io && @io.close
    rescue Exception => e
      warn "#{self.class} - #{e.class} - #{e.message}"
    ensure
      @io = nil
    end
  end
end
connected?() click to toggle source
# File lib/vx/lib/logger/logstash_device.rb, line 26
def connected?
  !!@io
end
enabled?() click to toggle source
# File lib/vx/lib/logger/logstash_device.rb, line 22
def enabled?
  !!uri
end
flush() click to toggle source
# File lib/vx/lib/logger/logstash_device.rb, line 49
def flush
  @mutex.synchronize do
    @io && @io.flush
  end
end
logger_thread() click to toggle source
# File lib/vx/lib/logger/logstash_device.rb, line 61
def logger_thread
  @logger_loop ||= Thread.new do
    loop do
      m = @queue.pop
      with_connection do
        @io.write m
      end
    end
  end
end
uri() click to toggle source
# File lib/vx/lib/logger/logstash_device.rb, line 14
def uri
  @uri ||=
    begin
      h = ENV['LOGSTASH_HOST']
      URI("logstash://#{h}") if h
    end
end
wait() click to toggle source
# File lib/vx/lib/logger/logstash_device.rb, line 55
def wait
  while !@queue.empty?
    sleep 0.1
  end
end
write(message) click to toggle source
# File lib/vx/lib/logger/logstash_device.rb, line 42
def write(message)
  if enabled?
    logger_thread
    @queue.push message
  end
end

Private Instance Methods

connect() click to toggle source
# File lib/vx/lib/logger/logstash_device.rb, line 94
def connect
  @io = TCPSocket.new(host, port).tap do |socket|
    socket.sync = true
  end
end
host() click to toggle source
# File lib/vx/lib/logger/logstash_device.rb, line 74
def host
  uri.host
end
port() click to toggle source
# File lib/vx/lib/logger/logstash_device.rb, line 78
def port
  @port ||= uri.port || 514
end
warn(msg) click to toggle source
# File lib/vx/lib/logger/logstash_device.rb, line 82
def warn(msg)
  $stderr.puts "[warn ] #{msg}"
end
with_connection() { || ... } click to toggle source
# File lib/vx/lib/logger/logstash_device.rb, line 86
def with_connection(&block)
  connect unless connected?
  yield
rescue Exception => e
  warn "#{self.class} - #{e.class} - #{e.message}"
  close
end