httpx 0.19.7 → 0.19.8
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/doc/release_notes/0_19_8.md +5 -0
- data/lib/httpx/adapters/datadog.rb +112 -58
- data/lib/httpx/version.rb +1 -1
- metadata +4 -2
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: 05a379db82c9c86f84a847680f4a784ed62a4cbcb8ce8d09a3d3c29abeb7d5d1
|
|
4
|
+
data.tar.gz: 5046f5d1e86f7d5c523a171b23fd5fb8126b63636a021c204a7c33a4ebf5e319
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: d62d606f0688c485f79a38feed6b94841005fb6a70c5ab934c7b70cb7a7958066b85a496405959a7660da3f12f194d844f10660621ce6fb98c7aa898c38d855c
|
|
7
|
+
data.tar.gz: 42b46c44c4c864222f14235534be31db4eb5155716c542457178be010b227fdb391c095b009759e9c237d6320da7133123334cfc4b3d4dd6940ff58aa6df9f0e
|
|
@@ -1,12 +1,52 @@
|
|
|
1
1
|
# frozen_string_literal: true
|
|
2
2
|
|
|
3
|
-
|
|
4
|
-
require "
|
|
5
|
-
require "
|
|
3
|
+
if defined?(::DDTrace) && ::DDTrace::VERSION::STRING >= "1.0.0"
|
|
4
|
+
require "datadog/tracing/contrib/integration"
|
|
5
|
+
require "datadog/tracing/contrib/configuration/settings"
|
|
6
|
+
require "datadog/tracing/contrib/patcher"
|
|
6
7
|
|
|
7
|
-
|
|
8
|
+
TRACING_MODULE = Datadog::Tracing
|
|
9
|
+
else
|
|
10
|
+
|
|
11
|
+
require "ddtrace/contrib/integration"
|
|
12
|
+
require "ddtrace/contrib/configuration/settings"
|
|
13
|
+
require "ddtrace/contrib/patcher"
|
|
14
|
+
|
|
15
|
+
TRACING_MODULE = Datadog
|
|
16
|
+
end
|
|
17
|
+
|
|
18
|
+
module TRACING_MODULE # rubocop:disable Naming/ClassAndModuleCamelCase
|
|
8
19
|
module Contrib
|
|
9
20
|
module HTTPX
|
|
21
|
+
if defined?(::DDTrace) && ::DDTrace::VERSION::STRING >= "1.0.0"
|
|
22
|
+
METADATA_MODULE = TRACING_MODULE::Metadata
|
|
23
|
+
|
|
24
|
+
TYPE_OUTBOUND = TRACING_MODULE::Metadata::Ext::HTTP::TYPE_OUTBOUND
|
|
25
|
+
|
|
26
|
+
TAG_PEER_SERVICE = TRACING_MODULE::Metadata::Ext::TAG_PEER_SERVICE
|
|
27
|
+
|
|
28
|
+
TAG_URL = TRACING_MODULE::Metadata::Ext::HTTP::TAG_URL
|
|
29
|
+
TAG_METHOD = TRACING_MODULE::Metadata::Ext::HTTP::TAG_METHOD
|
|
30
|
+
TAG_TARGET_HOST = TRACING_MODULE::Metadata::Ext::NET::TAG_TARGET_HOST
|
|
31
|
+
TAG_TARGET_PORT = TRACING_MODULE::Metadata::Ext::NET::TAG_TARGET_PORT
|
|
32
|
+
|
|
33
|
+
TAG_STATUS_CODE = TRACING_MODULE::Metadata::Ext::HTTP::TAG_STATUS_CODE
|
|
34
|
+
|
|
35
|
+
else
|
|
36
|
+
|
|
37
|
+
METADATA_MODULE = Datadog
|
|
38
|
+
|
|
39
|
+
TYPE_OUTBOUND = TRACING_MODULE::Ext::HTTP::TYPE_OUTBOUND
|
|
40
|
+
TAG_PEER_SERVICE = TRACING_MODULE::Ext::Integration::TAG_PEER_SERVICE
|
|
41
|
+
TAG_URL = TRACING_MODULE::Ext::HTTP::URL
|
|
42
|
+
TAG_METHOD = TRACING_MODULE::Ext::HTTP::METHOD
|
|
43
|
+
TAG_TARGET_HOST = TRACING_MODULE::Ext::NET::TARGET_HOST
|
|
44
|
+
TAG_TARGET_PORT = TRACING_MODULE::Ext::NET::TARGET_PORT
|
|
45
|
+
TAG_STATUS_CODE = Datadog::Ext::HTTP::STATUS_CODE
|
|
46
|
+
PROPAGATOR = TRACING_MODULE::HTTPPropagator
|
|
47
|
+
|
|
48
|
+
end
|
|
49
|
+
|
|
10
50
|
# HTTPX Datadog Plugin
|
|
11
51
|
#
|
|
12
52
|
# Enables tracing for httpx requests. A span will be created for each individual requests,
|
|
@@ -15,6 +55,8 @@ module Datadog
|
|
|
15
55
|
#
|
|
16
56
|
module Plugin
|
|
17
57
|
class RequestTracer
|
|
58
|
+
include Contrib::HttpAnnotationHelper
|
|
59
|
+
|
|
18
60
|
SPAN_REQUEST = "httpx.request"
|
|
19
61
|
|
|
20
62
|
def initialize(request)
|
|
@@ -22,43 +64,37 @@ module Datadog
|
|
|
22
64
|
end
|
|
23
65
|
|
|
24
66
|
def call
|
|
25
|
-
return
|
|
67
|
+
return unless tracing_enabled?
|
|
26
68
|
|
|
27
69
|
@request.on(:response, &method(:finish))
|
|
28
70
|
|
|
29
71
|
verb = @request.verb.to_s.upcase
|
|
30
72
|
uri = @request.uri
|
|
31
73
|
|
|
32
|
-
@span =
|
|
33
|
-
service_name = datadog_config[:split_by_domain] ? uri.host : datadog_pin.service_name
|
|
74
|
+
@span = build_span
|
|
34
75
|
|
|
35
|
-
|
|
36
|
-
@span.service = service_name
|
|
37
|
-
@span.span_type = Datadog::Ext::HTTP::TYPE_OUTBOUND
|
|
38
|
-
@span.resource = verb
|
|
76
|
+
@span.resource = verb
|
|
39
77
|
|
|
40
|
-
|
|
78
|
+
# Add additional request specific tags to the span.
|
|
41
79
|
|
|
42
|
-
|
|
80
|
+
@span.set_tag(TAG_URL, @request.path)
|
|
81
|
+
@span.set_tag(TAG_METHOD, verb)
|
|
43
82
|
|
|
44
|
-
|
|
45
|
-
|
|
83
|
+
@span.set_tag(TAG_TARGET_HOST, uri.host)
|
|
84
|
+
@span.set_tag(TAG_TARGET_PORT, uri.port.to_s)
|
|
46
85
|
|
|
47
|
-
|
|
48
|
-
|
|
86
|
+
# Tag as an external peer service
|
|
87
|
+
@span.set_tag(TAG_PEER_SERVICE, @span.service)
|
|
49
88
|
|
|
50
|
-
|
|
51
|
-
@span.set_tag(Datadog::Ext::Integration::TAG_PEER_SERVICE, @span.service)
|
|
89
|
+
propagate_headers if @configuration[:distributed_tracing]
|
|
52
90
|
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
end
|
|
57
|
-
rescue StandardError => e
|
|
58
|
-
Datadog.logger.error("error preparing span for http request: #{e}")
|
|
91
|
+
# Set analytics sample rate
|
|
92
|
+
if Contrib::Analytics.enabled?(@configuration[:analytics_enabled])
|
|
93
|
+
Contrib::Analytics.set_sample_rate(@span, @configuration[:analytics_sample_rate])
|
|
59
94
|
end
|
|
60
95
|
rescue StandardError => e
|
|
61
|
-
Datadog.logger.
|
|
96
|
+
Datadog.logger.error("error preparing span for http request: #{e}")
|
|
97
|
+
Datadog.logger.error(e.backtrace)
|
|
62
98
|
end
|
|
63
99
|
|
|
64
100
|
def finish(response)
|
|
@@ -67,7 +103,7 @@ module Datadog
|
|
|
67
103
|
if response.is_a?(::HTTPX::ErrorResponse)
|
|
68
104
|
@span.set_error(response.error)
|
|
69
105
|
else
|
|
70
|
-
@span.set_tag(
|
|
106
|
+
@span.set_tag(TAG_STATUS_CODE, response.status.to_s)
|
|
71
107
|
|
|
72
108
|
@span.set_error(::HTTPX::HTTPError.new(response)) if response.status >= 400 && response.status <= 599
|
|
73
109
|
end
|
|
@@ -77,40 +113,48 @@ module Datadog
|
|
|
77
113
|
|
|
78
114
|
private
|
|
79
115
|
|
|
80
|
-
|
|
81
|
-
return true if @request.headers.key?(Datadog::Ext::Transport::HTTP::HEADER_META_TRACER_VERSION)
|
|
82
|
-
|
|
83
|
-
return false unless @datadog_pin
|
|
84
|
-
|
|
85
|
-
span = @datadog_pin.tracer.active_span
|
|
116
|
+
if defined?(::DDTrace) && ::DDTrace::VERSION::STRING >= "1.0.0"
|
|
86
117
|
|
|
87
|
-
|
|
118
|
+
def build_span
|
|
119
|
+
TRACING_MODULE.trace(
|
|
120
|
+
SPAN_REQUEST,
|
|
121
|
+
service: service_name(@request.uri.host, configuration, Datadog.configuration_for(self)),
|
|
122
|
+
span_type: TYPE_OUTBOUND
|
|
123
|
+
)
|
|
124
|
+
end
|
|
88
125
|
|
|
89
|
-
|
|
90
|
-
|
|
126
|
+
def propagate_headers
|
|
127
|
+
TRACING_MODULE::Propagation::HTTP.inject!(TRACING_MODULE.active_trace, @request.headers)
|
|
128
|
+
end
|
|
91
129
|
|
|
92
|
-
|
|
93
|
-
|
|
130
|
+
def configuration
|
|
131
|
+
@configuration ||= Datadog.configuration.tracing[:httpx, @request.uri.host]
|
|
132
|
+
end
|
|
94
133
|
|
|
95
|
-
|
|
96
|
-
|
|
134
|
+
def tracing_enabled?
|
|
135
|
+
TRACING_MODULE.enabled?
|
|
136
|
+
end
|
|
137
|
+
else
|
|
138
|
+
def build_span
|
|
139
|
+
service_name = configuration[:split_by_domain] ? @request.uri.host : configuration[:service_name]
|
|
140
|
+
configuration[:tracer].trace(
|
|
141
|
+
SPAN_REQUEST,
|
|
142
|
+
service: service_name,
|
|
143
|
+
span_type: TYPE_OUTBOUND
|
|
144
|
+
)
|
|
145
|
+
end
|
|
97
146
|
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
tracer = datadog_config[:tracer]
|
|
147
|
+
def propagate_headers
|
|
148
|
+
Datadog::HTTPPropagator.inject!(@span.context, @request.headers)
|
|
149
|
+
end
|
|
102
150
|
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
app: "httpx",
|
|
106
|
-
app_type: Datadog::Ext::AppTypes::WEB,
|
|
107
|
-
tracer: -> { tracer }
|
|
108
|
-
)
|
|
151
|
+
def configuration
|
|
152
|
+
@configuration ||= Datadog.configuration[:httpx, @request.uri.host]
|
|
109
153
|
end
|
|
110
|
-
end
|
|
111
154
|
|
|
112
|
-
|
|
113
|
-
|
|
155
|
+
def tracing_enabled?
|
|
156
|
+
configuration[:tracer].enabled
|
|
157
|
+
end
|
|
114
158
|
end
|
|
115
159
|
end
|
|
116
160
|
|
|
@@ -125,7 +169,11 @@ module Datadog
|
|
|
125
169
|
module Configuration
|
|
126
170
|
# Default settings for httpx
|
|
127
171
|
#
|
|
128
|
-
class Settings <
|
|
172
|
+
class Settings < TRACING_MODULE::Contrib::Configuration::Settings
|
|
173
|
+
DEFAULT_ERROR_HANDLER = lambda do |response|
|
|
174
|
+
Datadog::Ext::HTTP::ERROR_RANGE.cover?(response.status)
|
|
175
|
+
end
|
|
176
|
+
|
|
129
177
|
option :service_name, default: "httpx"
|
|
130
178
|
option :distributed_tracing, default: true
|
|
131
179
|
option :split_by_domain, default: false
|
|
@@ -145,14 +193,14 @@ module Datadog
|
|
|
145
193
|
o.lazy
|
|
146
194
|
end
|
|
147
195
|
|
|
148
|
-
option :error_handler, default:
|
|
196
|
+
option :error_handler, default: DEFAULT_ERROR_HANDLER
|
|
149
197
|
end
|
|
150
198
|
end
|
|
151
199
|
|
|
152
200
|
# Patcher enables patching of 'httpx' with datadog components.
|
|
153
201
|
#
|
|
154
202
|
module Patcher
|
|
155
|
-
include
|
|
203
|
+
include TRACING_MODULE::Contrib::Patcher
|
|
156
204
|
|
|
157
205
|
module_function
|
|
158
206
|
|
|
@@ -192,8 +240,14 @@ module Datadog
|
|
|
192
240
|
super && version >= MINIMUM_VERSION
|
|
193
241
|
end
|
|
194
242
|
|
|
195
|
-
|
|
196
|
-
|
|
243
|
+
if defined?(::DDTrace) && ::DDTrace::VERSION::STRING >= "1.0.0"
|
|
244
|
+
def new_configuration
|
|
245
|
+
Configuration::Settings.new
|
|
246
|
+
end
|
|
247
|
+
else
|
|
248
|
+
def default_configuration
|
|
249
|
+
Configuration::Settings.new
|
|
250
|
+
end
|
|
197
251
|
end
|
|
198
252
|
|
|
199
253
|
def patcher
|
data/lib/httpx/version.rb
CHANGED
metadata
CHANGED
|
@@ -1,14 +1,14 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: httpx
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version: 0.19.
|
|
4
|
+
version: 0.19.8
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- Tiago Cardoso
|
|
8
8
|
autorequire:
|
|
9
9
|
bindir: bin
|
|
10
10
|
cert_chain: []
|
|
11
|
-
date: 2022-
|
|
11
|
+
date: 2022-05-06 00:00:00.000000000 Z
|
|
12
12
|
dependencies:
|
|
13
13
|
- !ruby/object:Gem::Dependency
|
|
14
14
|
name: http-2-next
|
|
@@ -78,6 +78,7 @@ extra_rdoc_files:
|
|
|
78
78
|
- doc/release_notes/0_19_5.md
|
|
79
79
|
- doc/release_notes/0_19_6.md
|
|
80
80
|
- doc/release_notes/0_19_7.md
|
|
81
|
+
- doc/release_notes/0_19_8.md
|
|
81
82
|
- doc/release_notes/0_1_0.md
|
|
82
83
|
- doc/release_notes/0_2_0.md
|
|
83
84
|
- doc/release_notes/0_2_1.md
|
|
@@ -149,6 +150,7 @@ files:
|
|
|
149
150
|
- doc/release_notes/0_19_5.md
|
|
150
151
|
- doc/release_notes/0_19_6.md
|
|
151
152
|
- doc/release_notes/0_19_7.md
|
|
153
|
+
- doc/release_notes/0_19_8.md
|
|
152
154
|
- doc/release_notes/0_1_0.md
|
|
153
155
|
- doc/release_notes/0_2_0.md
|
|
154
156
|
- doc/release_notes/0_2_1.md
|