Sha256: 07ae1f375982344934b8dd503afbd17e2c97e8c7a9f269296e0ae7c9b8c8debb
Contents?: true
Size: 1.01 KB
Versions: 1
Compression:
Stored size: 1.01 KB
Contents
module HydraulicBrake # In-memory, thread-safe storage for notices that haven't yet been sent to # Airbrake class AsyncSender attr_reader :sync_sender attr_reader :thread def initialize(opts={}) @sync_sender = opts[:sync_sender] @q = Queue.new @capacity = opts[:capacity] || 100 @logger = opts @thread = nil end def send_to_airbrake(notice) return will_not_deliver(notice) if @q.length >= @capacity @q.push(notice) return if @thread && @thread.alive? @thread = Thread.new do while n = @q.pop @sync_sender.send_to_airbrake(n) end end end private def will_not_deliver(notice) HydraulicBrake.logger.error( "[HydraulicBrake::AsyncSender has reached its capacity of " \ "#{@capacity} and the following notice will not be delivered " \ "Error: #{notice.error_class} - #{notice.error_message}\n" \ "Backtrace: \n#{notice.backtrace}") end end end
Version data entries
1 entries across 1 versions & 1 rubygems
Version | Path |
---|---|
hydraulic_brake-0.2.0 | lib/hydraulic_brake/async_sender.rb |