class Hoss::Spies::HTTPSpy
@api private
Constants
- SUBTYPE
- TYPE
Public Class Methods
copy_request_body(body)
click to toggle source
# File lib/hoss/spies/http.rb, line 28 def self.copy_request_body(body) case body.source when String body.source when nil nil else "" end end
Public Instance Methods
install()
click to toggle source
# File lib/hoss/spies/http.rb, line 39 def install ::HTTP::Client.class_eval do alias perform_without_apm perform def perform(req, options) result = nil error_in_request = false begin if req.headers['HOSS-SKIP-INSTRUMENTATION'] == 'true' return perform_without_apm(req, options) end Hoss.with_event do |event| event.request.headers['host'] = req.uri.host req.headers.each {|n,v| event.request.headers[n] = v} event.request.method = req.verb.to_s.upcase event.request.url = req.uri.to_s event.request.body = Hoss::Spies::HTTPSpy::copy_request_body(req.body) event.request.received_at = DateTime.now.strftime('%Q').to_i begin result = perform_without_apm(req, options) rescue HTTP::TimeoutError => e error_in_request = true event.error = Hoss::Event::Error.new(Hoss::Event::Error::ConnectionTimeout) event.error.received_at = DateTime.now.strftime('%Q').to_i raise rescue Exception => e 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.code.to_i result.headers.each {|n,v| event.response.headers[n] = v} event.response.body = result.body.to_s 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 perform_without_apm(req, options) end end end end
perform(req, options)
click to toggle source
# File lib/hoss/spies/http.rb, line 43 def perform(req, options) result = nil error_in_request = false begin if req.headers['HOSS-SKIP-INSTRUMENTATION'] == 'true' return perform_without_apm(req, options) end Hoss.with_event do |event| event.request.headers['host'] = req.uri.host req.headers.each {|n,v| event.request.headers[n] = v} event.request.method = req.verb.to_s.upcase event.request.url = req.uri.to_s event.request.body = Hoss::Spies::HTTPSpy::copy_request_body(req.body) event.request.received_at = DateTime.now.strftime('%Q').to_i begin result = perform_without_apm(req, options) rescue HTTP::TimeoutError => e error_in_request = true event.error = Hoss::Event::Error.new(Hoss::Event::Error::ConnectionTimeout) event.error.received_at = DateTime.now.strftime('%Q').to_i raise rescue Exception => e 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.code.to_i result.headers.each {|n,v| event.response.headers[n] = v} event.response.body = result.body.to_s 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 perform_without_apm(req, options) end end