class Hoss::Spies::NetHTTPSpy
@api private
Constants
- KEY
Public Class Methods
disable_in() { || ... }
click to toggle source
# File lib/hoss/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/hoss/spies/net_http.rb, line 30 def disabled=(disabled) Thread.current[KEY] = disabled end
disabled?()
click to toggle source
# File lib/hoss/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/hoss/spies/net_http.rb, line 50 def install Net::HTTP.class_eval do alias request_without_apm request def request(req, body = nil, &block) result = nil error_in_request = false begin if req['HOSS-SKIP-INSTRUMENTATION'] == 'true' || Hoss::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) Hoss.with_event do |event| # Record request event.request.headers['host'] = uri.hostname req.each_header {|n,v| event.request.headers[n] = v} event.request.method = method event.request.url = uri.to_s event.request.body = req.body event.request.received_at = DateTime.now.strftime('%Q').to_i begin result = request_without_apm(req, body, &block) rescue error_in_request = true 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.code.to_i result.each_header {|n,v| event.response.headers[n] = v} event.response.body = result.body end result end rescue Exception => e raise if error_in_request puts format('Hoss Error: %s %s', e.inspect, e.backtrace) return result unless result.nil? return request_without_apm(req, body, &block) end end end end
request(req, body = nil, &block)
click to toggle source
# File lib/hoss/spies/net_http.rb, line 54 def request(req, body = nil, &block) result = nil error_in_request = false begin if req['HOSS-SKIP-INSTRUMENTATION'] == 'true' || Hoss::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) Hoss.with_event do |event| # Record request event.request.headers['host'] = uri.hostname req.each_header {|n,v| event.request.headers[n] = v} event.request.method = method event.request.url = uri.to_s event.request.body = req.body event.request.received_at = DateTime.now.strftime('%Q').to_i begin result = request_without_apm(req, body, &block) rescue error_in_request = true 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.code.to_i result.each_header {|n,v| event.response.headers[n] = v} event.response.body = result.body end result end rescue Exception => e raise if error_in_request puts format('Hoss Error: %s %s', e.inspect, e.backtrace) return result unless result.nil? return request_without_apm(req, body, &block) end end