lib/pact_broker/badges/service.rb in pact_broker-2.4.2 vs lib/pact_broker/badges/service.rb in pact_broker-2.5.0

- old
+ new

@@ -10,10 +10,11 @@ extend self include PactBroker::Logging SPACE_DASH_UNDERSCORE = /[\s_\-]/ + CACHE = {} def pact_verification_badge pact, label, initials, verification_status return static_svg(pact, verification_status) unless pact title = badge_title pact, label, initials @@ -21,10 +22,14 @@ color = badge_color verification_status dynamic_svg(title, status, color) || static_svg(pact, verification_status) end + def clear_cache + CACHE.clear + end + private def badge_title pact, label, initials title = case (label || '').downcase when 'consumer' then prepare_name(pact.consumer_name, initials) @@ -77,11 +82,11 @@ uri = build_uri(left_text, right_text, color) begin response = do_request(uri) response.code == '200' ? response.body : nil rescue StandardError => e - log_error e, "Error retrieving badge from #{uri}" + logger.error "Error retrieving badge from #{uri} due to #{e.class} - #{e.message}" nil end end def build_uri left_text, right_text, color @@ -93,14 +98,30 @@ def escape_text text text.gsub(" ", "%20").gsub("-", "--").gsub("_", "__") end def do_request(uri) - request = Net::HTTP::Get.new(uri) - Net::HTTP.start(uri.hostname, uri.port, - use_ssl: uri.scheme == 'https', read_timeout: 1000) do |http| - http.request request + with_cache uri do + request = Net::HTTP::Get.new(uri) + Net::HTTP.start(uri.hostname, uri.port, + use_ssl: uri.scheme == 'https', + read_timeout: 3, + open_timeout: 1, + ssl_timeout: 1, + continue_timeout: 1) do |http| + http.request request + end end + end + + def with_cache uri + if !(response = CACHE[uri]) + response = yield + if response.code == '200' + CACHE[uri] = response + end + end + response end def static_svg pact, verification_status file_name = case verification_status when :success then "pact-verified-brightgreen.svg"