module Sniffer::Adapters::EthonAdapter::Operations

overrides perform method

Public Class Methods

included(base) click to toggle source
# File lib/sniffer/adapters/ethon_adapter.rb, line 38
def self.included(base)
  base.class_eval do
    alias_method :perform_without_sniffer, :perform
    alias_method :perform, :perform_with_sniffer
  end
end

Public Instance Methods

perform_with_sniffer() click to toggle source

rubocop:disable Metrics/AbcSize,Metrics/MethodLength

# File lib/sniffer/adapters/ethon_adapter.rb, line 46
def perform_with_sniffer
  bm = Benchmark.realtime do
    @return_code = Ethon::Curl.easy_perform(handle)
  end

  if Sniffer.enabled?
    uri = URI("http://" + @url)
    query = uri.path
    query += "?#{uri.query}" if uri.query
    @data_item.request.query = query

    status = @response_headers.scan(%r{HTTP\/... (\d{3})}).flatten[0].to_i
    hash_headers = @response_headers
                   .split(/\r?\n/)[1..-1]
                   .each_with_object({}) do |item, res|
      k, v = item.split(": ")
      res[k] = v
    end

    @data_item.response = Sniffer::DataItem::Response.new(status: status,
                                                          headers: hash_headers,
                                                          body: @response_body,
                                                          timing: bm)
    Sniffer.notify_response(@data_item)

  end

  Ethon.logger.debug { "ETHON: performed #{log_inspect}" } if Ethon.logger.debug?
  complete

  @return_code
end