class ConsulSyncer::Wrapper

Constants

BACKOFF

Public Class Methods

new(consul_url, params:, logger:) click to toggle source
# File lib/consul_syncer/wrapper.rb, line 14
def initialize(consul_url, params:, logger:)
  consul_url = "http://#{consul_url}" unless consul_url.include?("://")
  @consul = Faraday.new(consul_url)
  @params = params
  @logger = logger
end

Public Instance Methods

request(method, path, payload = nil) click to toggle source
# File lib/consul_syncer/wrapper.rb, line 21
def request(method, path, payload = nil)
  if @params.any?
    separator = (path.include?("?") ? "&" : "?")
    path += "#{separator}#{URI.encode_www_form(@params)}"
  end
  args = [path]
  args << payload.to_json if payload

  retry_on_error do
    response = @consul.send(method, *args)
    if response.status == 200
      if method == :get
        JSON.parse(response.body)
      else
        true
      end
    else
      raise(
        ConsulError,
        "Failed to request #{response.env.method} #{response.env.url}: #{response.status} -- #{response.body}"
      )
    end
  end
end

Private Instance Methods

retry_on_error() { || ... } click to toggle source
# File lib/consul_syncer/wrapper.rb, line 48
def retry_on_error
  yield
rescue Faraday::Error, ConsulError
  retried ||= 0
  backoff = BACKOFF[retried]
  raise unless backoff
  retried += 1

  @logger.warn "Consul request failed, retrying in #{backoff}s"
  sleep backoff
  retry
end