lib/sniffer/adapters/eventmachine_adapter.rb in sniffer-0.4.0 vs lib/sniffer/adapters/eventmachine_adapter.rb in sniffer-0.5.0

- old
+ new

@@ -4,60 +4,96 @@ module Adapters # Em-Http-Connection Adapter module EventMachineAdapter # Overrides #send_request, #parse_response, #on_body_data module Client - def self.included(base) - base.class_eval do - alias_method :send_request_without_sniffer, :send_request - alias_method :send_request, :send_request_with_sniffer - alias_method :parse_response_header_without_sniffer, :parse_response_header - alias_method :parse_response_header, :parse_response_header_with_sniffer - alias_method :on_body_data_without_sniffer, :on_body_data - alias_method :on_body_data, :on_body_data_with_sniffer - end - end - - # rubocop:disable Metrics/AbcSize,Metrics/MethodLength def send_request_with_sniffer(head, body) - if Sniffer.enabled? - @data_item = Sniffer::DataItem.new - @data_item.response = Sniffer::DataItem::Response.new - @data_item.request = Sniffer::DataItem::Request.new(host: @req.host, - method: @req.method.to_sym, - query: encode_query(@req.uri, @req.query), - headers: @req.headers, - body: @req.body.to_s, - port: @req.port) - Sniffer.store(@data_item) - - @start_time = Time.now - end - + send_request_sniffer(head, body) send_request_without_sniffer(head, body) end - # rubocop:enable Metrics/AbcSize,Metrics/MethodLength def parse_response_header_with_sniffer(header, version, status) - if Sniffer.enabled? - @data_item.response.timing = Time.now - @start_time - @data_item.response.status = status - @data_item.response.headers = header - end - + parse_response_header_sniffer(header, version, status) parse_response_header_without_sniffer(header, version, status) end def on_body_data_with_sniffer(data) - if Sniffer.enabled? - @data_item.response.body = data - Sniffer.notify_response(@data_item) + on_body_data_sniffer(data) + on_body_data_without_sniffer(data) + end + + private + + # rubocop:disable Metrics/AbcSize, Metrics/MethodLength + def send_request_sniffer(_head, _body) + return unless Sniffer.enabled? + + @data_item = Sniffer::DataItem.new + @data_item.response = Sniffer::DataItem::Response.new + @data_item.request = Sniffer::DataItem::Request.new(host: @req.host, + method: @req.method.to_sym, + query: encode_query(@req.uri, @req.query), + headers: @req.headers, + body: @req.body.to_s, + port: @req.port) + Sniffer.store(@data_item) + + @start_time = Time.now + end + # rubocop:enable Metrics/AbcSize, Metrics/MethodLength + + def parse_response_header_sniffer(header, _version, status) + return unless Sniffer.enabled? + + @data_item.response.timing = Time.now - @start_time + @data_item.response.status = status + @data_item.response.headers = header + end + + def on_body_data_sniffer(data) + return unless Sniffer.enabled? + + @data_item.response.body = data + Sniffer.notify_response(@data_item) + end + + # Only used when prepending, see all_prepend.rb + module Prepend + include Client + + def send_request(head, body) + send_request_sniffer(head, body) + super(head, body) end - on_body_data_without_sniffer(data) + def parse_response_header(header, version, status) + parse_response_header_sniffer(header, version, status) + super(header, version, status) + end + + def on_body_data(data) + on_body_data_sniffer(data) + super(data) + end end end end end end EventMachine::HttpClient.include Sniffer::Adapters::EventMachineAdapter::Client if defined?(::EventMachine::HttpClient) + +if defined?(::EventMachine::HttpClient) + if defined?(Sniffer::Adapters::EventMachineAdapter::PREPEND) + EventMachine::HttpClient.prepend Sniffer::Adapters::EventMachineAdapter::Client::Prepend + else + EventMachine::HttpClient.class_eval do + include Sniffer::Adapters::EventMachineAdapter::Client + alias_method :send_request_without_sniffer, :send_request + alias_method :send_request, :send_request_with_sniffer + alias_method :parse_response_header_without_sniffer, :parse_response_header + alias_method :parse_response_header, :parse_response_header_with_sniffer + alias_method :on_body_data_without_sniffer, :on_body_data + alias_method :on_body_data, :on_body_data_with_sniffer + end + end +end