Sha256: dce63e59732f855e927e1a266bdbb31b85cdb353cf48e7f2b3717a9bdc356593

Contents?: true

Size: 1.34 KB

Versions: 13

Compression:

Stored size: 1.34 KB

Contents

require 'net/http'
require 'uri'

module Gitlab
  module QA
    module Support
      class GetRequest
        attr_reader :uri, :token

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

        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

        private

        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 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
            puts "Received 429 - Too many requests. Waiting for #{wait_seconds} seconds."
            sleep wait_seconds
          end

          response
        end
      end
    end
  end
end

Version data entries

13 entries across 13 versions & 1 rubygems

Version Path
gitlab-qa-7.17.1 lib/gitlab/qa/support/get_request.rb
gitlab-qa-7.17.0 lib/gitlab/qa/support/get_request.rb
gitlab-qa-7.16.1 lib/gitlab/qa/support/get_request.rb
gitlab-qa-7.16.0 lib/gitlab/qa/support/get_request.rb
gitlab-qa-7.15.1 lib/gitlab/qa/support/get_request.rb
gitlab-qa-7.15.0 lib/gitlab/qa/support/get_request.rb
gitlab-qa-7.14.0 lib/gitlab/qa/support/get_request.rb
gitlab-qa-7.13.3 lib/gitlab/qa/support/get_request.rb
gitlab-qa-7.13.2 lib/gitlab/qa/support/get_request.rb
gitlab-qa-7.13.1 lib/gitlab/qa/support/get_request.rb
gitlab-qa-7.13.0 lib/gitlab/qa/support/get_request.rb
gitlab-qa-7.12.0 lib/gitlab/qa/support/get_request.rb
gitlab-qa-7.11.0 lib/gitlab/qa/support/get_request.rb