Sha256: f5bb11a02e428d356b078506f4af20fc47e5f5056ea43197034e03fcb0c2ada5
Contents?: true
Size: 1.66 KB
Versions: 1
Compression:
Stored size: 1.66 KB
Contents
module Justlogging class Agent attr_reader :queue, :active, :sleep_time def initialize @sleep_time = 5 @queue = [] @active = true @thread = Thread.new do while true do if (@queue.any? && @active == true) send_queue end sleep @sleep_time end end end def add_to_queue(transaction) Rails.logger.info 'added transaction to queue' @queue << transaction end def uri URI(Justlogging.config[:endpoint]) end def http_client Net::HTTP.new(uri.host, uri.port).tap do |http| if uri.scheme == 'https' http.use_ssl = true http.verify_mode = OpenSSL::SSL::VERIFY_PEER end end end def send_queue json = ActiveSupport::JSON.encode @queue request = Net::HTTP::Post.new(uri.request_uri) request.set_form_data('api_key' => Justlogging.config[:api_key], 'log_entries' => json) begin result = http_client.request(request) code = result.code rescue => error Rails.logger.err "[Justlogging] Error: #{error.message}" code = nil end Rails.logger.info "[Justlogging] Sent queue: #{code}" handle_result(code) end # Empty queue is result is 200 ok. # Throttle connection when result is 403 # Unsubscribe and stop sending all together on any other code. def handle_result(code) if code == '200' @queue = [] elsif code == '403' @sleep_time = @sleep_time * 1.5 else ActiveSupport::Notifications.unsubscribe(Justlogging.subscriber) @active = false end end end end
Version data entries
1 entries across 1 versions & 1 rubygems
Version | Path |
---|---|
justlogging-rails-0.0.4 | lib/justlogging/agent.rb |