Class: StackifyRubyAPM::Spies::NetHTTPSpy Private

Inherits:
Object
  • Object
show all
Defined in:
lib/stackify_apm/spies/net_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.

Instance Method Summary collapse

Instance Method Details

#installObject

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.



8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
# File 'lib/stackify_apm/spies/net_http.rb', line 8

def install
  Net::HTTP.class_eval do
    alias_method 'request_without_apm', 'request'

    def request(req, body = nil, &block)
      result = nil
      unless StackifyRubyAPM.current_transaction
        request_without_apm(req, body, &block)
      end

      # Data configuration
      #
      host, = req['host'] && req['host'].split(':')
      method = req.method

      host ||= address

      name = "#{method} #{host}"
      type = "ext.net_http.#{method}"

      # Submits HTTP request
      #
      result = request_without_apm(req, body, &block)

      # Builds span context
      #
      ctx = Span::Context.new(
        CATEGORY: 'Web External',
        SUBCATEGORY: 'Execute',
        URL: req.uri.nil? ? host : req.uri,
        STATUS: result.code.to_i,
        METHOD: method
      )

      # Creates new span from HTTP result
      #
      StackifyRubyAPM.span name, type, context: ctx do
        return result
      end
    end
  end
end