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