class Gitlab::QA::Support::GetRequest

def build_request

def build_request
  Net::HTTP::Get.new(uri).tap do |req|
    req['PRIVATE-TOKEN'] = token
    req['Cookie'] = ENV['QA_COOKIES'] if ENV['QA_COOKIES']
  end
end

def execute!

def execute!
  response = with_retry_on_too_many_requests do
    Net::HTTP.start(uri.host, uri.port, use_ssl: true) do |http|
      http.request(build_request)
    end
  end
  case response
  when Net::HTTPSuccess
    response
  else
    raise Support::InvalidResponseError.new(uri.to_s, response)
  end
end

def initialize(uri, token)

def initialize(uri, token)
  @uri = uri
  @token = token
end

def with_retry_on_too_many_requests

def with_retry_on_too_many_requests
  response = nil
  retry_count = 0
  while retry_count < 3
    response = yield
    break unless response.is_a?(Net::HTTPTooManyRequests)
    retry_count += 1
    wait_seconds = response["retry-after"].to_i
    Runtime::Logger.debug("Received 429 - Too many requests. Waiting for #{wait_seconds} seconds.")
    sleep wait_seconds
  end
  response
end