module Datadog::Tracing::Contrib::HTTPX::Plugin::RequestTracer

  1. lib/httpx/adapters/datadog.rb

Constants

SPAN_REQUEST = "httpx.request"  

Public Instance methods

configuration(request)
[show source]
    # File lib/httpx/adapters/datadog.rb
138 def configuration(request)
139   Datadog.configuration.tracing[:httpx, request.uri.host]
140 end
create_span(request, configuration, start_time)
[show source]
    # File lib/httpx/adapters/datadog.rb
147 def create_span(request, configuration, start_time)
148   Datadog::Tracing.trace(
149     SPAN_REQUEST,
150     service: service_name(request.uri.host, configuration),
151     type: TYPE_OUTBOUND,
152     start_time: start_time
153   )
154 end
enabled?(request)
[show source]
   # File lib/httpx/adapters/datadog.rb
50 def enabled?(request)
51   configuration(request).enabled
52 end
finish(request, response)
[show source]
   # File lib/httpx/adapters/datadog.rb
62 def finish(request, response)
63   request.datadog_span ||= initialize_span(request, request.init_time) if request.init_time
64 
65   finish_span(response, request.datadog_span)
66 end
finish_span(response, span)
[show source]
   # File lib/httpx/adapters/datadog.rb
68 def finish_span(response, span)
69   if response.is_a?(::HTTPX::ErrorResponse)
70     span.set_error(response.error)
71   else
72     span.set_tag(TAG_STATUS_CODE, response.status.to_s)
73 
74     span.set_error(::HTTPX::HTTPError.new(response)) if response.status.between?(400, 599)
75 
76     span.set_tags(
77       Datadog.configuration.tracing.header_tags.response_tags(response.headers.to_h)
78     ) if Datadog.configuration.tracing.respond_to?(:header_tags)
79   end
80 
81   span.finish
82 end
initialize_span(request, start_time)

return a span initialized with the +@request+ state.

[show source]
    # File lib/httpx/adapters/datadog.rb
 85   def initialize_span(request, start_time)
 86     verb = request.verb
 87     uri = request.uri
 88 
 89     config = configuration(request)
 90 
 91     span = create_span(request, config, start_time)
 92 
 93     span.resource = verb
 94 
 95     # Tag original global service name if not used
 96     span.set_tag(TAG_BASE_SERVICE, Datadog.configuration.service) if span.service != Datadog.configuration.service
 97 
 98     span.set_tag(TAG_KIND, TAG_CLIENT)
 99 
100     span.set_tag(TAG_COMPONENT, "httpx")
101     span.set_tag(TAG_OPERATION, "request")
102 
103     span.set_tag(TAG_URL, request.path)
104     span.set_tag(TAG_METHOD, verb)
105 
106     span.set_tag(TAG_TARGET_HOST, uri.host)
107     span.set_tag(TAG_TARGET_PORT, uri.port)
108 
109     span.set_tag(TAG_PEER_HOSTNAME, uri.host)
110 
111     # Tag as an external peer service
112     if (peer_service = config[:peer_service])
113       span.set_tag(TAG_PEER_SERVICE, peer_service)
114     end
115 
116     if config[:distributed_tracing]
117       propagate_trace_http(
118         Datadog::Tracing.active_trace,
119         request.headers
120       )
121     end
122 
123     # Set analytics sample rate
124     if Contrib::Analytics.enabled?(config[:analytics_enabled])
125       Contrib::Analytics.set_sample_rate(span, config[:analytics_sample_rate])
126     end
127 
128     span.set_tags(
129       Datadog.configuration.tracing.header_tags.request_tags(request.headers.to_h)
130     ) if Datadog.configuration.tracing.respond_to?(:header_tags)
131 
132     span
133 rescue StandardError => e
134   Datadog.logger.error("error preparing span for http request: #{e}")
135   Datadog.logger.error(e.backtrace)
136   end
propagate_trace_http(trace, headers)
[show source]
    # File lib/httpx/adapters/datadog.rb
143 def propagate_trace_http(trace, headers)
144   Datadog::Tracing::Contrib::HTTP.inject(trace, headers)
145 end
reset(request)
[show source]
   # File lib/httpx/adapters/datadog.rb
58 def reset(request)
59   request.datadog_span = nil
60 end
start(request)
[show source]
   # File lib/httpx/adapters/datadog.rb
54 def start(request)
55   request.datadog_span = initialize_span(request, request.init_time)
56 end