Sha256: 4708023f3061ddd7aa81da879cf53a28c141737e04efd3c4e84ab14b1b049496

Contents?: true

Size: 1.39 KB

Versions: 91

Compression:

Stored size: 1.39 KB

Contents

# frozen_string_literal: true

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
            Runtime::Logger.debug("Received 429 - Too many requests. Waiting for #{wait_seconds} seconds.")
            sleep wait_seconds
          end

          response
        end
      end
    end
  end
end

Version data entries

91 entries across 91 versions & 1 rubygems

Version Path
gitlab-qa-15.2.0 lib/gitlab/qa/support/get_request.rb
gitlab-qa-15.1.0 lib/gitlab/qa/support/get_request.rb
gitlab-qa-15.0.0 lib/gitlab/qa/support/get_request.rb
gitlab-qa-14.21.0 lib/gitlab/qa/support/get_request.rb
gitlab-qa-14.20.0 lib/gitlab/qa/support/get_request.rb
gitlab-qa-14.19.2 lib/gitlab/qa/support/get_request.rb
gitlab-qa-14.19.1 lib/gitlab/qa/support/get_request.rb
gitlab-qa-14.19.0 lib/gitlab/qa/support/get_request.rb
gitlab-qa-14.18.0 lib/gitlab/qa/support/get_request.rb
gitlab-qa-14.17.0 lib/gitlab/qa/support/get_request.rb
gitlab-qa-14.16.0 lib/gitlab/qa/support/get_request.rb
gitlab-qa-14.15.0 lib/gitlab/qa/support/get_request.rb
gitlab-qa-14.14.0 lib/gitlab/qa/support/get_request.rb
gitlab-qa-14.13.0 lib/gitlab/qa/support/get_request.rb
gitlab-qa-14.12.0 lib/gitlab/qa/support/get_request.rb
gitlab-qa-14.11.0 lib/gitlab/qa/support/get_request.rb
gitlab-qa-14.9.0 lib/gitlab/qa/support/get_request.rb
gitlab-qa-14.8.1 lib/gitlab/qa/support/get_request.rb
gitlab-qa-14.8.0 lib/gitlab/qa/support/get_request.rb
gitlab-qa-14.7.0 lib/gitlab/qa/support/get_request.rb