class ReplayApi::RequestDeliverer
Attributes
configuration[RW]
connection[RW]
delivery_thread[R]
request_buffer[R]
time_last_write[R]
Public Class Methods
new(configuration=ReplayApi.configuration)
click to toggle source
# File lib/replay_api/request_deliverer.rb, line 11 def initialize(configuration=ReplayApi.configuration) @configuration ||= configuration @time_last_write = Time.now @request_buffer = Queue.new start_delivery_thread end
Public Instance Methods
post(request)
click to toggle source
# File lib/replay_api/request_deliverer.rb, line 19 def post(request) @request_buffer.push(request) end
Private Instance Methods
batch_full?(requests)
click to toggle source
# File lib/replay_api/request_deliverer.rb, line 50 def batch_full?(requests) requests.size >= configuration.max_request_batch_size end
inboundRequests()
click to toggle source
# File lib/replay_api/request_deliverer.rb, line 36 def inboundRequests requests = [request_buffer.pop] requests << request_buffer.pop until (request_buffer.empty? or batch_full?(requests) or max_delay_exceeded?) requests end
max_delay_exceeded?()
click to toggle source
# File lib/replay_api/request_deliverer.rb, line 54 def max_delay_exceeded? time_since_last_write > configuration.max_request_batch_delay end
protocol()
click to toggle source
# File lib/replay_api/request_deliverer.rb, line 71 def protocol return 'http' unless configuration.ssl? 'https' end
sendRequests(requests)
click to toggle source
# File lib/replay_api/request_deliverer.rb, line 42 def sendRequests(requests) connection.in_parallel do requests.each do |request| connection.post request[:uri], request[:payload] end end end
start_delivery_thread()
click to toggle source
# File lib/replay_api/request_deliverer.rb, line 25 def start_delivery_thread return if @delivery_thread @delivery_thread = Thread.new do loop do sendRequests(inboundRequests) @time_last_write = Time.now end end end
time_since_last_write()
click to toggle source
# File lib/replay_api/request_deliverer.rb, line 59 def time_since_last_write Time.now - time_last_write end