class Readme::RequestQueue

Public Class Methods

new(api_key, buffer_length) click to toggle source
# File lib/readme/request_queue.rb, line 5
def initialize(api_key, buffer_length)
  @queue = []
  @buffer_length = buffer_length
  @api_key = api_key
  @lock = Mutex.new
end

Public Instance Methods

length() click to toggle source
# File lib/readme/request_queue.rb, line 23
def length
  @queue.length
end
push(request) click to toggle source
# File lib/readme/request_queue.rb, line 12
def push(request)
  @lock.synchronize do
    @queue << request

    if ready_to_send?
      payloads = @queue.slice!(0, @buffer_length)
      send_payloads(payloads)
    end
  end
end

Private Instance Methods

ready_to_send?() click to toggle source
# File lib/readme/request_queue.rb, line 40
def ready_to_send?
  length >= @buffer_length
end
send_payloads(payloads) click to toggle source
# File lib/readme/request_queue.rb, line 29
def send_payloads(payloads)
  Thread.new do
    HTTParty.post(
      Readme::Metrics::ENDPOINT,
      basic_auth: {username: @api_key, password: ""},
      headers: {"Content-Type" => "application/json"},
      body: to_json(payloads)
    )
  end
end
to_json(payloads) click to toggle source
# File lib/readme/request_queue.rb, line 44
def to_json(payloads)
  "[#{payloads.join(", ")}]"
end