class Alephant::Publisher::Request::Connection

Attributes

driver[R]

Public Class Methods

new(driver) click to toggle source
# File lib/alephant/publisher/request/connection.rb, line 12
def initialize(driver)
  @driver = driver
end

Public Instance Methods

get(uri) click to toggle source
# File lib/alephant/publisher/request/connection.rb, line 16
def get(uri)
  ::JSON::parse(request(uri).body, :symbolize_names => true)
rescue Faraday::ConnectionFailed => e
  log_error_with_metric(e, 'Connection#request', uri, "PublisherRequestConnectionConnectionFailed")
  raise ConnectionFailed
rescue InvalidApiStatus => e
  log_error_with_metric(e, 'Connection#request', uri, "PublisherRequestConnectionInvalidStatus#{e.status}")
  raise e
rescue ::JSON::ParserError => e
  log_error_with_metric(e, 'Connection#get', uri, "PublisherRequestConnectionInvalidApiResponse")
  raise InvalidApiResponse, "JSON parsing error: #{response.body}"
rescue StandardError => e
  log_error_with_metric(e, 'Connection#get', uri, "PublisherRequestConnectionApiError")
  raise ApiError, e.message
end

Private Instance Methods

request(uri) click to toggle source
# File lib/alephant/publisher/request/connection.rb, line 34
def request(uri)
  before = Time.new
  logger.info "Publisher::Request::Connection#request: uri: #{uri}"

  driver.get(uri).tap do |response|
    response_time = Time.new - before
    logger.metric("PublisherRequestConnectionRequestHTTPTime", :unit => "Seconds", :value => response_time)
    logger.info "Publisher::Request::Connection#request: API response time: #{response_time}"
    logger.info "Publisher::Request::Connection#request: status returned: #{response.status} for #{uri}"
    raise InvalidApiStatus, response.status unless response.status == 200
  end
end