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"