Methods
Public Instance
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