class Hoss::Spies::FaradaySpy
@api private
Constants
- SUBTYPE
- TYPE
Public Class Methods
without_net_http() { || ... }
click to toggle source
# File lib/hoss/spies/faraday.rb, line 28 def self.without_net_http return yield unless defined?(NetHTTPSpy) Hoss::Spies::NetHTTPSpy.disable_in do yield end end
Public Instance Methods
install()
click to toggle source
rubocop:disable Metrics/CyclomaticComplexity
# File lib/hoss/spies/faraday.rb, line 37 def install ::Faraday::Connection.class_eval do alias run_request_without_apm run_request def run_request(method, url, body, headers, &block) result = nil error_in_request = false error_in_block = false begin Hoss.with_event do |event| Hoss::Spies::FaradaySpy.without_net_http do uri = URI(build_url(url)) begin result = run_request_without_apm(method, url, body, headers) do |req| if block_given? yield req begin new_path = req.path new_query = URI.encode_www_form(req.params) if uri.path != new_path || uri.query != new_query test_uri = uri test_uri.query = nil begin test_uri.path = new_path rescue Exception => e end # The original url can be set to path if Faraday.get used if test_uri.to_s != uri.to_s uri.path = new_path end uri.query = new_query end rescue error_in_block = true raise end end begin event.request.method = method.to_s.upcase event.request.url = uri.to_s event.request.received_at = DateTime.now.strftime('%Q').to_i event.request.headers['host'] = uri.hostname req.headers.each {|n,v| event.request.headers[n] = v} event.request.url = uri.to_s event.request.body = req.body rescue error_in_block = true raise end end rescue error_in_request = true event.error = Hoss::Event::Error.new(Hoss::Event::Error::ConnectionError) event.error.received_at = DateTime.now.strftime('%Q').to_i raise end if result event.response = Hoss::Event::Response.new event.response.received_at = DateTime.now.strftime('%Q').to_i event.response.status_code = result.status.to_i result.headers.each {|n,v| event.response.headers[n] = v} event.response.body = result.body end result end end rescue Exception => e raise if error_in_request && !error_in_block puts format('Hoss Error: %s %s', e.inspect, e.backtrace) return result unless result.nil? return run_request_without_apm(method, url, body, headers, &block) end end end end
run_request(method, url, body, headers) { |req| ... }
click to toggle source
# File lib/hoss/spies/faraday.rb, line 41 def run_request(method, url, body, headers, &block) result = nil error_in_request = false error_in_block = false begin Hoss.with_event do |event| Hoss::Spies::FaradaySpy.without_net_http do uri = URI(build_url(url)) begin result = run_request_without_apm(method, url, body, headers) do |req| if block_given? yield req begin new_path = req.path new_query = URI.encode_www_form(req.params) if uri.path != new_path || uri.query != new_query test_uri = uri test_uri.query = nil begin test_uri.path = new_path rescue Exception => e end # The original url can be set to path if Faraday.get used if test_uri.to_s != uri.to_s uri.path = new_path end uri.query = new_query end rescue error_in_block = true raise end end begin event.request.method = method.to_s.upcase event.request.url = uri.to_s event.request.received_at = DateTime.now.strftime('%Q').to_i event.request.headers['host'] = uri.hostname req.headers.each {|n,v| event.request.headers[n] = v} event.request.url = uri.to_s event.request.body = req.body rescue error_in_block = true raise end end rescue error_in_request = true event.error = Hoss::Event::Error.new(Hoss::Event::Error::ConnectionError) event.error.received_at = DateTime.now.strftime('%Q').to_i raise end if result event.response = Hoss::Event::Response.new event.response.received_at = DateTime.now.strftime('%Q').to_i event.response.status_code = result.status.to_i result.headers.each {|n,v| event.response.headers[n] = v} event.response.body = result.body end result end end rescue Exception => e raise if error_in_request && !error_in_block puts format('Hoss Error: %s %s', e.inspect, e.backtrace) return result unless result.nil? return run_request_without_apm(method, url, body, headers, &block) end end