Class: Hoss::Spies::HTTPSpy Private
- Inherits:
-
Object
- Object
- Hoss::Spies::HTTPSpy
- Defined in:
- lib/hoss/spies/http.rb
This class is part of a private API. You should avoid using this class if possible, as it may be removed or be changed in the future.
Constant Summary collapse
- TYPE =
This constant is part of a private API. You should avoid using this constant if possible, as it may be removed or be changed in the future.
'ext'
- SUBTYPE =
This constant is part of a private API. You should avoid using this constant if possible, as it may be removed or be changed in the future.
'http_rb'
Class Method Summary collapse
Instance Method Summary collapse
- #install ⇒ Object private
Class Method Details
.copy_request_body(body) ⇒ Object
This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.
28 29 30 31 32 33 34 35 36 37 |
# 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 |
Instance Method Details
#install ⇒ Object
This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.
39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 |
# File 'lib/hoss/spies/http.rb', line 39 def install ::HTTP::Client.class_eval do alias perform_without_apm perform def perform(req, ) result = nil error_in_request = false begin if req.headers['HOSS-SKIP-INSTRUMENTATION'] == 'true' return perform_without_apm(req, ) 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, ) 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, ) end end end end |