Methods
Public Instance
Constants
| SPAN_REQUEST | = | "httpx.request" |
Public Instance methods
configuration(request)
[show source]
# File lib/httpx/adapters/datadog.rb 140 def configuration(request) 141 Datadog.configuration.tracing[:httpx, request.uri.host] 142 end
create_span(request, configuration, start_time)
[show source]
# File lib/httpx/adapters/datadog.rb 149 def create_span(request, configuration, start_time) 150 Datadog::Tracing.trace( 151 SPAN_REQUEST, 152 service: service_name(request.uri.host, configuration), 153 type: TYPE_OUTBOUND, 154 start_time: start_time 155 ) 156 end
enabled?(request)
[show source]
# File lib/httpx/adapters/datadog.rb 52 def enabled?(request) 53 configuration(request).enabled 54 end
finish(request, response)
[show source]
# File lib/httpx/adapters/datadog.rb 64 def finish(request, response) 65 request.datadog_span ||= initialize_span(request, request.init_time) if request.init_time 66 67 finish_span(response, request.datadog_span) 68 end
finish_span(response, span)
[show source]
# File lib/httpx/adapters/datadog.rb 70 def finish_span(response, span) 71 if response.is_a?(::HTTPX::ErrorResponse) 72 span.set_error(response.error) 73 else 74 span.set_tag(TAG_STATUS_CODE, response.status.to_s) 75 76 span.set_error(::HTTPX::HTTPError.new(response)) if response.status.between?(400, 599) 77 78 span.set_tags( 79 Datadog.configuration.tracing.header_tags.response_tags(response.headers.to_h) 80 ) if Datadog.configuration.tracing.respond_to?(:header_tags) 81 end 82 83 span.finish 84 end
initialize_span(request, start_time)
return a span initialized with the +@request+ state.
[show source]
# File lib/httpx/adapters/datadog.rb 87 def initialize_span(request, start_time) 88 verb = request.verb 89 uri = request.uri 90 91 config = configuration(request) 92 93 span = create_span(request, config, start_time) 94 95 span.resource = verb 96 97 # Tag original global service name if not used 98 span.set_tag(TAG_BASE_SERVICE, Datadog.configuration.service) if span.service != Datadog.configuration.service 99 100 span.set_tag(TAG_KIND, TAG_CLIENT) 101 102 span.set_tag(TAG_COMPONENT, "httpx") 103 span.set_tag(TAG_OPERATION, "request") 104 105 span.set_tag(TAG_URL, request.path) 106 span.set_tag(TAG_METHOD, verb) 107 108 span.set_tag(TAG_TARGET_HOST, uri.host) 109 span.set_tag(TAG_TARGET_PORT, uri.port) 110 111 span.set_tag(TAG_PEER_HOSTNAME, uri.host) 112 113 # Tag as an external peer service 114 if (peer_service = config[:peer_service]) 115 span.set_tag(TAG_PEER_SERVICE, peer_service) 116 end 117 118 if config[:distributed_tracing] 119 propagate_trace_http( 120 Datadog::Tracing.active_trace, 121 request.headers 122 ) 123 end 124 125 # Set analytics sample rate 126 if Contrib::Analytics.enabled?(config[:analytics_enabled]) 127 Contrib::Analytics.set_sample_rate(span, config[:analytics_sample_rate]) 128 end 129 130 span.set_tags( 131 Datadog.configuration.tracing.header_tags.request_tags(request.headers.to_h) 132 ) if Datadog.configuration.tracing.respond_to?(:header_tags) 133 134 span 135 rescue StandardError => e 136 Datadog.logger.error("error preparing span for http request: #{e}") 137 Datadog.logger.error(e.backtrace) 138 end
propagate_trace_http(trace, headers)
[show source]
# File lib/httpx/adapters/datadog.rb 145 def propagate_trace_http(trace, headers) 146 Datadog::Tracing::Contrib::HTTP.inject(trace, headers) 147 end
reset(request)
[show source]
# File lib/httpx/adapters/datadog.rb 60 def reset(request) 61 request.datadog_span = nil 62 end
start(request)
[show source]
# File lib/httpx/adapters/datadog.rb 56 def start(request) 57 request.datadog_span = initialize_span(request, request.init_time) 58 end