class Atatus::Spies::NetHTTPSpy
@api private
Constants
- KEY
- SUBTYPE
- TYPE
Public Class Methods
disable_in() { || ... }
click to toggle source
# File lib/atatus/spies/net_http.rb, line 38 def disable_in self.disabled = true begin yield ensure self.disabled = false end end
disabled=(disabled)
click to toggle source
# File lib/atatus/spies/net_http.rb, line 30 def disabled=(disabled) Thread.current[KEY] = disabled end
disabled?()
click to toggle source
# File lib/atatus/spies/net_http.rb, line 34 def disabled? Thread.current[KEY] ||= false end
Public Instance Methods
install()
click to toggle source
rubocop:disable Metrics/CyclomaticComplexity
# File lib/atatus/spies/net_http.rb, line 50 def install if defined?(::Net) && defined?(::Net::HTTP) Net::HTTP.class_eval do alias request_without_apm request def request(req, body = nil, &block) unless (transaction = Atatus.current_transaction) return request_without_apm(req, body, &block) end if Atatus::Spies::NetHTTPSpy.disabled? return request_without_apm(req, body, &block) end host = req['host']&.split(':')&.first || address method = req.method.to_s.upcase path, query = req.path.split('?') url = use_ssl? ? +'https://' : +'http://' url << host url << ":#{port}" if port url << path url << "?#{query}" if query uri = URI(url) destination = Atatus::Span::Context::Destination.from_uri(uri) context = Atatus::Span::Context.new( http: { url: uri, method: method }, destination: destination ) Atatus.with_span( "#{method} #{host}", TYPE, subtype: SUBTYPE, action: method, context: context ) do |span| trace_context = span&.trace_context || transaction.trace_context trace_context.apply_headers { |key, value| req[key] = value } result = request_without_apm(req, body, &block) if (http = span&.context&.http) http.status_code = result.code end result end end end end end
request(req, body = nil, &block)
click to toggle source
# File lib/atatus/spies/net_http.rb, line 56 def request(req, body = nil, &block) unless (transaction = Atatus.current_transaction) return request_without_apm(req, body, &block) end if Atatus::Spies::NetHTTPSpy.disabled? return request_without_apm(req, body, &block) end host = req['host']&.split(':')&.first || address method = req.method.to_s.upcase path, query = req.path.split('?') url = use_ssl? ? +'https://' : +'http://' url << host url << ":#{port}" if port url << path url << "?#{query}" if query uri = URI(url) destination = Atatus::Span::Context::Destination.from_uri(uri) context = Atatus::Span::Context.new( http: { url: uri, method: method }, destination: destination ) Atatus.with_span( "#{method} #{host}", TYPE, subtype: SUBTYPE, action: method, context: context ) do |span| trace_context = span&.trace_context || transaction.trace_context trace_context.apply_headers { |key, value| req[key] = value } result = request_without_apm(req, body, &block) if (http = span&.context&.http) http.status_code = result.code end result end end