Sha256: a2e994dab2cfd1957f646e14d0fc3a9573f25f55bb5cc09951de61f8ee044b9e

Contents?: true

Size: 1.33 KB

Versions: 2

Compression:

Stored size: 1.33 KB

Contents

# frozen_string_literal: true

module FlowcommerceSpree
  class LoggingHttpClient < ::Io::Flow::V0::HttpClient::DefaultHttpHandlerInstance
    attr_reader :error

    def initialize(base_uri, logger: FlowcommerceSpree.logger)
      super(base_uri)
      @logger = logger
    end

    def execute(request)
      # original_open = client.open_timeout
      # original_read = client.read_timeout

      start_time = Time.now.utc.round(10)
      @logger.info "start #{request.method} #{request.path}"
      @logger.info "body: #{request.instance_variable_get(:@header)}"
      @logger.info "body: #{request.body}"

      if request.path.start_with?('/organizations')
        # Contrived example to show how client settings can be adjusted
        # client.open_timeout = 60
        # client.read_timeout = 60
      end

      begin
        response = super
      rescue Io::Flow::V0::HttpClient::ServerError => e
        @error = { error: e }.to_json
      ensure
        # client.open_timeout = original_open
        # client.read_timeout = original_read

        end_time = Time.now.utc.round(10)
        duration = ((end_time - start_time) * 1000).round(0)
        @logger.info "complete #{request.method} #{request.path} #{duration} ms"
        @logger.info "response: #{response}"
        @logger.info "Error: #{e.inspect}" if e
      end
    end
  end
end

Version data entries

2 entries across 2 versions & 1 rubygems

Version Path
flowcommerce_spree-0.0.2 lib/flowcommerce_spree/logging_http_client.rb
flowcommerce_spree-0.0.1 lib/flowcommerce_spree/logging_http_client.rb