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
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
|
# File 'lib/instana/instrumentation/net-http.rb', line 9
def request(*args, &block)
if skip_instrumentation?
do_skip = true
return super(*args, &block)
end
current_span = ::Instana.tracer.start_span(:'net-http')
request = args[0]
t_context = ::Instana.tracer.context
request['X-Instana-L'] = t_context.level.to_s
if t_context.active?
request['X-Instana-T'] = t_context.
request['X-Instana-S'] = t_context.
end
request['Traceparent'] = t_context.
request['Tracestate'] = t_context. unless t_context..empty?
kv_payload = { :http => {} }
kv_payload[:http][:method] = request.method
if request.uri
uri_without_query = request.uri.dup.tap { |r| r.query = nil }
kv_payload[:http][:url] = uri_without_query.to_s.gsub(/\?\z/, '')
kv_payload[:http][:params] = ::Instana.secrets.remove_from_query(request.uri.query)
else
if use_ssl?
kv_payload[:http][:url] = "https://#{@address}:#{@port}#{request.path}"
else
kv_payload[:http][:url] = "http://#{@address}:#{@port}#{request.path}"
end
end
kv_payload[:http][:url] = ::Instana.secrets.remove_from_query(kv_payload[:http][:url]).gsub(/\?\z/, '')
response = super(*args, &block)
kv_payload[:http][:status] = response.code
if response.code.to_i >= 500
current_span.record_exception(nil)
end
response
rescue => e
current_span&.record_exception(e)
raise
ensure
current_span&.set_tags(kv_payload)
current_span&.finish unless do_skip
end
|