Sha256: 4789779ee33b77a37251637dbc7ec173195c3407f5e2fa9fdeb0f37526c75a99

Contents?: true

Size: 1.51 KB

Versions: 1

Compression:

Stored size: 1.51 KB

Contents

require 'alephant/logger'
require 'json'

module Alephant
  module Publisher
    module Request
      class DataMapper
        include Logger

        attr_reader :connection, :context

        def initialize(connection, context = {})
          @connection = connection
          @context    = context
        end

        def data
          raise NotImplementedError
        end

        protected

        def get(uri)
          before = Time.new
          response = connection.get(uri)
          logger.metric(:name => "PublisherRequestDataMapperRequestHTTPTime", :unit => 'Seconds', :value => Time.new - before)
          raise InvalidApiStatus, response.status unless response.status == 200
          JSON::parse(response.body, :symbolize_names => true)
        rescue Faraday::ConnectionFailed
          logger.metric(:name => "PublisherRequestDataMapperConnectionFailed", :unit => "Count", :value => 1)
          raise ConnectionFailed
        rescue JSON::ParserError
          logger.metric(:name => "PublisherRequestDataMapperInvalidApiResponse", :unit => "Count", :value => 1)
          raise InvalidApiResponse, "JSON parsing error: #{response.body}"
        rescue InvalidApiStatus => e
          logger.metric(:name => "PublisherRequestDataMapperInvalidStatus#{e.status}", :unit => "Count", :value => 1)
          raise e
        rescue StandardError => e
          logger.metric(:name => "PublisherRequestDataMapperApiError", :unit => "Count", :value => 1)
          raise ApiError, e.message
        end
      end
    end
  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
alephant-publisher-request-0.1.2 lib/alephant/publisher/request/data_mapper.rb