class Atatus::Spies::FaradaySpy
@api private
Constants
- SUBTYPE
- TYPE
Public Class Methods
without_net_http() { || ... }
click to toggle source
# File lib/atatus/spies/faraday.rb, line 28 def self.without_net_http return yield unless defined?(NetHTTPSpy) Atatus::Spies::NetHTTPSpy.disable_in do yield end end
Public Instance Methods
install()
click to toggle source
rubocop:disable Metrics/CyclomaticComplexity
# File lib/atatus/spies/faraday.rb, line 37 def install if defined?(::Faraday) && defined?(::Faraday::Connection) ::Faraday::Connection.class_eval do alias run_request_without_apm run_request def run_request(method, url, body, headers, &block) unless (transaction = Atatus.current_transaction) return run_request_without_apm(method, url, body, headers, &block) end uri = URI(build_url(url)) # If url is set inside block it isn't available until yield, # so we temporarily build the request to yield. This could be a # problem if the block has side effects as it will be yielded twice # ~mikker unless uri.host tmp_request = build_request(method) do |req| yield(req) if block_given? end uri = URI(tmp_request.path) end host = uri.host upcased_method = method.to_s.upcase destination = Atatus::Span::Context::Destination.from_uri(uri) context = Atatus::Span::Context.new( http: { url: uri, method: upcased_method }, destination: destination ) Atatus.with_span( "#{upcased_method} #{host}", TYPE, subtype: SUBTYPE, action: upcased_method, context: context ) do |span| Atatus::Spies::FaradaySpy.without_net_http do trace_context = span&.trace_context || transaction.trace_context result = run_request_without_apm(method, url, body, headers) do |req| trace_context.apply_headers { |k, v| req[k] = v } yield req if block_given? end if (http = span&.context&.http) http.status_code = result.status.to_s end result end end end end end end
run_request(method, url, body, headers) { |req| ... }
click to toggle source
# File lib/atatus/spies/faraday.rb, line 43 def run_request(method, url, body, headers, &block) unless (transaction = Atatus.current_transaction) return run_request_without_apm(method, url, body, headers, &block) end uri = URI(build_url(url)) # If url is set inside block it isn't available until yield, # so we temporarily build the request to yield. This could be a # problem if the block has side effects as it will be yielded twice # ~mikker unless uri.host tmp_request = build_request(method) do |req| yield(req) if block_given? end uri = URI(tmp_request.path) end host = uri.host upcased_method = method.to_s.upcase destination = Atatus::Span::Context::Destination.from_uri(uri) context = Atatus::Span::Context.new( http: { url: uri, method: upcased_method }, destination: destination ) Atatus.with_span( "#{upcased_method} #{host}", TYPE, subtype: SUBTYPE, action: upcased_method, context: context ) do |span| Atatus::Spies::FaradaySpy.without_net_http do trace_context = span&.trace_context || transaction.trace_context result = run_request_without_apm(method, url, body, headers) do |req| trace_context.apply_headers { |k, v| req[k] = v } yield req if block_given? end if (http = span&.context&.http) http.status_code = result.status.to_s end result end end end