Sha256: e3b2b1160b7566ad60bcca2a5ed8212176a2af91e291fe93f798049a24cda64a

Contents?: true

Size: 1.91 KB

Versions: 3

Compression:

Stored size: 1.91 KB

Contents

unless ENV['BINNACLE_RB_ENVIRONMENT'] == 'test'
  if defined?(::HTTP::Client) and defined?(::HTTP::Connection)
    require 'uri'

    module ::HTTP
      class Client
        alias_method(:orig_make_request, :make_request) unless method_defined?(:orig_make_request)

        def make_request(req, options)
          log_enabled = Binnacle::HttpLogger.allow?(req.uri)

          bm = Benchmark.realtime do
            @response = orig_make_request(req, options)
          end

          if log_enabled
            headers = @response.headers.to_h
            content_type = headers['Content-Type']
            uri = URI(req.uri)
            url_without_query = "#{uri.scheme}://#{uri.host}:#{uri.port}#{uri.path}"

            Binnacle::HttpLogger.signal(url_without_query, req.verb, uri.host, uri.port, uri.path, uri.query, @response.code, bm, headers, @response.body, nil, content_type, req.body)
          end

          @response
        end
      end
    end
  end
end

#
# Adapt the adapter to allow for testing..
#
if ENV['BINNACLE_RB_ENVIRONMENT'] == 'test' #defined?(Webmock) &&
  require 'webmock'
  module HTTP
    class Client
      alias_method :orig_perform, :perform

      def perform(request, options)
        return orig_perform(request, options) unless webmock_enabled?

        log_enabled = Binnacle::HttpLogger.allow?(request.uri)

        bm = Benchmark.realtime do
          @response = WebMockPerform.new(request) { orig_perform(request, options) }.exec
        end

        if log_enabled
          headers = @response.headers.to_h
          uri = URI(request.uri)
          url_without_query = "#{uri.scheme}://#{uri.host}:#{uri.port}#{uri.path}"

          Binnacle::HttpLogger.signal(url_without_query, request.verb, uri.host, uri.port, uri.path, uri.query, @response.code, bm, headers, @response.body, headers['Content-Encoding'], headers['Content-Type'], request.body)
        end

        @response
      end

    end
  end
end

Version data entries

3 entries across 3 versions & 1 rubygems

Version Path
binnacle-0.5.0 lib/binnacle/http_logging/adapters/http.rb
binnacle-0.4.9 lib/binnacle/http_logging/adapters/http.rb
binnacle-0.4.8 lib/binnacle/http_logging/adapters/http.rb