From 8ec78f9142577f9f6ed73d4dd5ac0a3e5f02a5c6 Mon Sep 17 00:00:00 2001 From: mo khan Date: Mon, 13 Jan 2020 15:46:56 -0700 Subject: Use net/hippie to provider exponential backoff + jitter retries --- Gemfile.lock | 2 ++ lib/license_finder/package_managers/pipenv.rb | 4 ++-- lib/license_finder/package_utils/pypi.rb | 29 +++++---------------------- license-management.gemspec | 3 ++- 4 files changed, 11 insertions(+), 27 deletions(-) diff --git a/Gemfile.lock b/Gemfile.lock index 4978f8d..0a91a04 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -3,6 +3,7 @@ PATH specs: license-management (2.3.1) license_finder (~> 5.11) + net-hippie (~> 0.2) GEM remote: https://rubygems.org/ @@ -15,6 +16,7 @@ GEM toml (= 0.2.0) with_env (= 1.1.0) xml-simple + net-hippie (0.2.7) parslet (1.8.2) rspec (3.9.0) rspec-core (~> 3.9.0) diff --git a/lib/license_finder/package_managers/pipenv.rb b/lib/license_finder/package_managers/pipenv.rb index e35b85d..6af53bf 100644 --- a/lib/license_finder/package_managers/pipenv.rb +++ b/lib/license_finder/package_managers/pipenv.rb @@ -50,11 +50,11 @@ module LicenseFinder end def allowed_groups - %w[default develop] - ignored_groups.to_a + %w[default develop] - ignored_groups end def ignored_groups - @ignored_groups || [] + @ignored_groups.to_a || [] end end end diff --git a/lib/license_finder/package_utils/pypi.rb b/lib/license_finder/package_utils/pypi.rb index fac02ec..30856bd 100644 --- a/lib/license_finder/package_utils/pypi.rb +++ b/lib/license_finder/package_utils/pypi.rb @@ -1,39 +1,20 @@ # frozen_string_literal: true -require 'net/http' -require 'openssl' +require 'net/hippie' module LicenseFinder class PyPI - CONNECTION_ERRORS = [ - EOFError, - Errno::ECONNREFUSED, - Errno::ECONNRESET, - Errno::ECONNRESET, - Errno::EHOSTUNREACH, - Errno::EINVAL, - Net::OpenTimeout, - Net::ProtocolError, - Net::ReadTimeout, - OpenSSL::OpenSSLError, - OpenSSL::SSL::SSLError, - SocketError, - Timeout::Error - ].freeze - class << self def definition(name, version) response = request("https://pypi.org/pypi/#{name}/#{version}/json") response.is_a?(Net::HTTPSuccess) ? JSON.parse(response.body).fetch('info', {}) : {} - rescue *CONNECTION_ERRORS + rescue *Net::Hippie::CONNECTION_ERRORS {} end - def request(location, limit = 10) - uri = URI(location) - http = Net::HTTP.new(uri.host, uri.port) - http.use_ssl = true - response = http.get(uri.request_uri).response + def request(url, limit = 10) + client = Net::Hippie::Client.new + response = client.with_retry { client.get(url) } response.is_a?(Net::HTTPRedirection) && limit.positive? ? request(response['location'], limit - 1) : response end end diff --git a/license-management.gemspec b/license-management.gemspec index c58bbdc..46278f0 100644 --- a/license-management.gemspec +++ b/license-management.gemspec @@ -13,7 +13,7 @@ Gem::Specification.new do |spec| spec.summary = 'License Management job for GitLab CI.' spec.description = 'License Management job for GitLab CI.' spec.homepage = 'https://gitlab.com/gitlab-org/security-products/license-management' - spec.license = 'GitLab EE' + spec.license = 'Nonstandard' spec.metadata['allowed_push_host'] = 'https://example.com' spec.metadata['homepage_uri'] = spec.homepage @@ -28,5 +28,6 @@ Gem::Specification.new do |spec| spec.require_paths = ['lib'] spec.add_dependency 'license_finder', '~> 5.11' + spec.add_dependency 'net-hippie', '~> 0.2' spec.add_development_dependency 'rspec', '~> 3.9' end -- cgit v1.2.3