class Logger::HTTP::Base

Public Class Methods

new(base_uri, path, request_source, debug: false) click to toggle source
# File lib/logger-http/base.rb, line 2
def initialize(base_uri, path, request_source, debug: false)
  @base_uri = URI.parse(base_uri)
  @path = path
  @debug_logger = Logger.new('log/logger-http.log') if debug
  @request_source = request_source
  @queue = Queue.new
  dbg "initialized"
end

Public Instance Methods

close() click to toggle source
# File lib/logger-http/base.rb, line 54
def close
  stop
  connection && connection.finish
rescue StandardError => e
  dbg "#{self.class} - #{e.class} - #{e.message}"
end
dbg(message) click to toggle source
# File lib/logger-http/base.rb, line 27
def dbg message
  @debug_logger && @debug_logger.debug(message)
end
request(data) click to toggle source
# File lib/logger-http/base.rb, line 61
def request data
  put = @request_source.new(@path, data)
  connection.request @base_uri + @path, put
end
run() click to toggle source
# File lib/logger-http/base.rb, line 31
def run
  dbg "running loop"

  loop do
    data = @queue.pop
    dbg "popped #{data}"

    unless data
      dbg "no data!"
      sleep 3
      next
    end

    dbg "Sending message"
    request(data)
  end

rescue StandardError
  dbg("Got exception in run loop - #{ $! }")
  @connection = nil
  raise
end
start() click to toggle source
# File lib/logger-http/base.rb, line 21
def start
  @thread ||= Thread.new { run }
  @thread = Thread.new { run } unless @thread.alive?
  dbg "thread is #{@thread.status}"
end
write(message) click to toggle source
# File lib/logger-http/base.rb, line 11
def write(message)
  dbg "queueing message"
  start

  @queue << "#{message}\n"
rescue StandardError => e
  dbg "#{self.class} - #{e.class} - #{e.message}"
  close
end

Private Instance Methods

connection() click to toggle source
# File lib/logger-http/base.rb, line 67
def connection
  @connection ||= Net::HTTP::Persistent.new('logger')
end