Sha256: 79dfa7eb8daf573efb84bb715735388973cfac7abe129c7cf076cf0c5c49d297

Contents?: true

Size: 1.82 KB

Versions: 5

Compression:

Stored size: 1.82 KB

Contents

module Excon

  class Socket

    def connect_with_logging
      host = @data[:proxy] ? @data[:proxy][:host] : @data[:host]
      port = @data[:proxy] ? @data[:proxy][:port] : @data[:port]
      HttpEventLogger::Event::Connection.new(host, port)
      connect_without_logging
    end

    alias_method_chain :connect, :logging

  end

  class Connection

    def request_with_logging(params, &block)
      request_datum = @data.merge(params)
      request_datum[:headers] = @data[:headers].merge(request_datum[:headers] || {})
      request_event = create_request_event(request_datum)
      result = nil
      time_taken_in_seconds = ::Benchmark.realtime do
        result = request_without_logging(params, &block)
      end
      response = result.is_a?(Excon::Response) ? result : Excon::Response.new(response(result)[:response])
      create_response_event(request_event, time_taken_in_seconds, response)
      result
    end

    alias_method_chain :request, :logging

    private

    def create_request_event(datum)
      HttpEventLogger::Event::Request.new(
        method:  method_from(datum),
        uri:     absolute_url_from(datum),
        headers: datum[:headers],
        body:    datum[:body]
      )
    end

    def method_from(datum)
      datum[:method] ? datum[:method].to_s.upcase : "UNKNOWN"
    end

    def absolute_url_from(datum)
      "#{datum[:scheme]}://#{datum[:host]}:#{datum[:port]}#{datum[:path]}#{datum[:query]}"
    end

    def create_response_event(request_event, time_taken_in_seconds, response)
      HttpEventLogger::Event::Response.new(
        request:               request_event,
        time_taken_in_seconds: time_taken_in_seconds,
        status:                response.status,
        headers:               response.headers,
        body:                  response.body
      )
    end

  end

end if defined?(Excon)

Version data entries

5 entries across 5 versions & 1 rubygems

Version Path
http_event_logger-0.1.0 ./lib/http_event_logger/adapter/excon.rb
http_event_logger-0.1.0.rc4 ./lib/http_event_logger/adapter/excon.rb
http_event_logger-0.1.0.rc3 ./lib/http_event_logger/adapter/excon.rb
http_event_logger-0.1.0.rc2 ./lib/http_event_logger/adapter/excon.rb
http_event_logger-0.1.0.rc1 ./lib/http_event_logger/adapter/excon.rb