opentelemetry-instrumentation-restclient 0.22.8 → 0.24.0

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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 7bbec18631527503b850369b0b9ead85ba6c0be8e894527989c17cadb194a463
4
- data.tar.gz: 38795078ca0e89512c27b5b63d75a8aee6d0d728eb7aa32f71ff9b5db08881f8
3
+ metadata.gz: 77f13b11d744dff44b6318f31d9050257a8370795de144109f56920d758a9390
4
+ data.tar.gz: 11aac6fc8d85c10dd73363dd639e43db7036fffb768d6f65a2f05e99114f66b4
5
5
  SHA512:
6
- metadata.gz: 31cbd3b56f73852315e0cf7eab8e867ca77219f1a6a77c93c8958f89c9819d1ee600b9692bd6c6da96f09ddab564d6ea584c1d7fd41875fd85bb7dd0da8e2924
7
- data.tar.gz: 74527d3708e0224e13fb489558de897d1296f863894f68dd5b392bcf71525ce926887745c19ad813d091e697bb412af770662c0570ebc1a23ec0ce8db3767f17
6
+ metadata.gz: 870e801a2f6be4feabcff349b1847e4182412ab678b43ced933ce68d52dc5fd399dd415a931b2d25a948523110c6c7b85283ca4b540e84a90fb8868b7be05c35
7
+ data.tar.gz: 86f78f016494e2bd5d588e730056c44071fda4c37f775d4bcfafbc5d4a6c38b28293fc75f13f383cf2b69ef0e186bbf4119d00a51ad3cba458c03f20540ac432
data/CHANGELOG.md CHANGED
@@ -1,5 +1,15 @@
1
1
  # Release History: opentelemetry-instrumentation-restclient
2
2
 
3
+ ### v0.24.0 / 2025-07-29
4
+
5
+ * ADDED: Add REST Client `OTEL_SEMCONV_STABILITY_OPT_IN` environment variable [#1568](https://github.com/open-telemetry/opentelemetry-ruby-contrib/pull/1568)
6
+
7
+ ### v0.23.0 / 2025-01-16
8
+
9
+ * BREAKING CHANGE: Set minimum supported version to Ruby 3.1
10
+
11
+ * ADDED: Set minimum supported version to Ruby 3.1
12
+
3
13
  ### v0.22.8 / 2024-11-26
4
14
 
5
15
  * CHANGED: Performance Freeze all range objects #1222
data/README.md CHANGED
@@ -48,3 +48,19 @@ Apache 2.0 license. See [LICENSE][license-github] for more information.
48
48
  [community-meetings]: https://github.com/open-telemetry/community#community-meetings
49
49
  [slack-channel]: https://cloud-native.slack.com/archives/C01NWKKMKMY
50
50
  [discussions-url]: https://github.com/open-telemetry/opentelemetry-ruby/discussions
51
+
52
+ ## HTTP semantic convention stability
53
+
54
+ In the OpenTelemetry ecosystem, HTTP semantic conventions have now reached a stable state. However, the initial Faraday instrumentation was introduced before this stability was achieved, which resulted in HTTP attributes being based on an older version of the semantic conventions.
55
+
56
+ To facilitate the migration to stable semantic conventions, you can use the `OTEL_SEMCONV_STABILITY_OPT_IN` environment variable. This variable allows you to opt-in to the new stable conventions, ensuring compatibility and future-proofing your instrumentation.
57
+
58
+ When setting the value for `OTEL_SEMCONV_STABILITY_OPT_IN`, you can specify which conventions you wish to adopt:
59
+
60
+ - `http` - Emits the stable HTTP and networking conventions and ceases emitting the old conventions previously emitted by the instrumentation.
61
+ - `http/dup` - Emits both the old and stable HTTP and networking conventions, enabling a phased rollout of the stable semantic conventions.
62
+ - Default behavior (in the absence of either value) is to continue emitting the old HTTP and networking conventions the instrumentation previously emitted.
63
+
64
+ During the transition from old to stable conventions, RestClient instrumentation code comes in three patch versions: `dup`, `old`, and `stable`. These versions are identical except for the attributes they send. Any changes to RestClient instrumentation should consider all three patches.
65
+
66
+ For additional information on migration, please refer to our [documentation](https://opentelemetry.io/docs/specs/semconv/non-normative/http-migration/).
@@ -11,8 +11,9 @@ module OpenTelemetry
11
11
  # instrumentation
12
12
  class Instrumentation < OpenTelemetry::Instrumentation::Base
13
13
  install do |_config|
14
- require_dependencies
15
- patch_request
14
+ patch_type = determine_semconv
15
+ send(:"require_dependencies_#{patch_type}")
16
+ send(:"patch_request_#{patch_type}")
16
17
  end
17
18
 
18
19
  present do
@@ -23,12 +24,41 @@ module OpenTelemetry
23
24
 
24
25
  private
25
26
 
26
- def require_dependencies
27
- require_relative 'patches/request'
27
+ def determine_semconv
28
+ stability_opt_in = ENV.fetch('OTEL_SEMCONV_STABILITY_OPT_IN', '')
29
+ values = stability_opt_in.split(',').map(&:strip)
30
+
31
+ if values.include?('http/dup')
32
+ 'dup'
33
+ elsif values.include?('http')
34
+ 'stable'
35
+ else
36
+ 'old'
37
+ end
38
+ end
39
+
40
+ def require_dependencies_dup
41
+ require_relative 'patches/dup/request'
42
+ end
43
+
44
+ def require_dependencies_stable
45
+ require_relative 'patches/stable/request'
46
+ end
47
+
48
+ def require_dependencies_old
49
+ require_relative 'patches/old/request'
50
+ end
51
+
52
+ def patch_request_dup
53
+ ::RestClient::Request.prepend(Patches::Dup::Request)
54
+ end
55
+
56
+ def patch_request_stable
57
+ ::RestClient::Request.prepend(Patches::Stable::Request)
28
58
  end
29
59
 
30
- def patch_request
31
- ::RestClient::Request.prepend(Patches::Request)
60
+ def patch_request_old
61
+ ::RestClient::Request.prepend(Patches::Old::Request)
32
62
  end
33
63
  end
34
64
  end
@@ -0,0 +1,79 @@
1
+ # frozen_string_literal: true
2
+
3
+ # Copyright The OpenTelemetry Authors
4
+ #
5
+ # SPDX-License-Identifier: Apache-2.0
6
+
7
+ module OpenTelemetry
8
+ module Instrumentation
9
+ module RestClient
10
+ module Patches
11
+ module Dup
12
+ # Module to prepend to RestClient::Request for instrumentation
13
+ module Request
14
+ # Constant for the HTTP status range
15
+ HTTP_STATUS_SUCCESS_RANGE = (100..399)
16
+
17
+ def execute(&)
18
+ trace_request do |_span|
19
+ super
20
+ end
21
+ end
22
+
23
+ private
24
+
25
+ def create_request_span
26
+ http_method = method.upcase
27
+ instrumentation_attrs = {
28
+ 'http.method' => http_method.to_s,
29
+ 'http.request.method' => http_method.to_s,
30
+ 'http.url' => OpenTelemetry::Common::Utilities.cleanse_url(url),
31
+ 'url.full' => OpenTelemetry::Common::Utilities.cleanse_url(url)
32
+ }
33
+ instrumentation_config = RestClient::Instrumentation.instance.config
34
+ instrumentation_attrs['peer.service'] = instrumentation_config[:peer_service] if instrumentation_config[:peer_service]
35
+ span = tracer.start_span(
36
+ http_method.to_s,
37
+ attributes: instrumentation_attrs.merge(
38
+ OpenTelemetry::Common::HTTP::ClientContext.attributes
39
+ ),
40
+ kind: :client
41
+ )
42
+
43
+ OpenTelemetry::Trace.with_span(span) do
44
+ OpenTelemetry.propagation.inject(processed_headers)
45
+ end
46
+
47
+ span
48
+ end
49
+
50
+ def trace_request
51
+ span = create_request_span
52
+
53
+ yield(span).tap do |response|
54
+ # Verify return value is a response.
55
+ # If so, add additional attributes.
56
+ if response.is_a?(::RestClient::Response)
57
+ span.set_attribute('http.status_code', response.code)
58
+ span.set_attribute('http.response.status_code', response.code)
59
+ span.status = OpenTelemetry::Trace::Status.error unless HTTP_STATUS_SUCCESS_RANGE.cover?(response.code.to_i)
60
+ end
61
+ end
62
+ rescue ::RestClient::ExceptionWithResponse => e
63
+ span.set_attribute('http.status_code', e.http_code)
64
+ span.set_attribute('http.response.status_code', e.http_code)
65
+ span.status = OpenTelemetry::Trace::Status.error unless HTTP_STATUS_SUCCESS_RANGE.cover?(e.http_code.to_i)
66
+ raise e
67
+ ensure
68
+ span.finish
69
+ end
70
+
71
+ def tracer
72
+ RestClient::Instrumentation.instance.tracer
73
+ end
74
+ end
75
+ end
76
+ end
77
+ end
78
+ end
79
+ end
@@ -0,0 +1,75 @@
1
+ # frozen_string_literal: true
2
+
3
+ # Copyright The OpenTelemetry Authors
4
+ #
5
+ # SPDX-License-Identifier: Apache-2.0
6
+
7
+ module OpenTelemetry
8
+ module Instrumentation
9
+ module RestClient
10
+ module Patches
11
+ module Old
12
+ # Module to prepend to RestClient::Request for instrumentation
13
+ module Request
14
+ # Constant for the HTTP status range
15
+ HTTP_STATUS_SUCCESS_RANGE = (100..399)
16
+
17
+ def execute(&)
18
+ trace_request do |_span|
19
+ super
20
+ end
21
+ end
22
+
23
+ private
24
+
25
+ def create_request_span
26
+ http_method = method.upcase
27
+ instrumentation_attrs = {
28
+ 'http.method' => http_method.to_s,
29
+ 'http.url' => OpenTelemetry::Common::Utilities.cleanse_url(url)
30
+ }
31
+ instrumentation_config = RestClient::Instrumentation.instance.config
32
+ instrumentation_attrs['peer.service'] = instrumentation_config[:peer_service] if instrumentation_config[:peer_service]
33
+ span = tracer.start_span(
34
+ "HTTP #{http_method}",
35
+ attributes: instrumentation_attrs.merge(
36
+ OpenTelemetry::Common::HTTP::ClientContext.attributes
37
+ ),
38
+ kind: :client
39
+ )
40
+
41
+ OpenTelemetry::Trace.with_span(span) do
42
+ OpenTelemetry.propagation.inject(processed_headers)
43
+ end
44
+
45
+ span
46
+ end
47
+
48
+ def trace_request
49
+ span = create_request_span
50
+
51
+ yield(span).tap do |response|
52
+ # Verify return value is a response.
53
+ # If so, add additional attributes.
54
+ if response.is_a?(::RestClient::Response)
55
+ span.set_attribute('http.status_code', response.code)
56
+ span.status = OpenTelemetry::Trace::Status.error unless HTTP_STATUS_SUCCESS_RANGE.cover?(response.code.to_i)
57
+ end
58
+ end
59
+ rescue ::RestClient::ExceptionWithResponse => e
60
+ span.set_attribute('http.status_code', e.http_code)
61
+ span.status = OpenTelemetry::Trace::Status.error unless HTTP_STATUS_SUCCESS_RANGE.cover?(e.http_code.to_i)
62
+ raise e
63
+ ensure
64
+ span.finish
65
+ end
66
+
67
+ def tracer
68
+ RestClient::Instrumentation.instance.tracer
69
+ end
70
+ end
71
+ end
72
+ end
73
+ end
74
+ end
75
+ end
@@ -0,0 +1,75 @@
1
+ # frozen_string_literal: true
2
+
3
+ # Copyright The OpenTelemetry Authors
4
+ #
5
+ # SPDX-License-Identifier: Apache-2.0
6
+
7
+ module OpenTelemetry
8
+ module Instrumentation
9
+ module RestClient
10
+ module Patches
11
+ module Stable
12
+ # Module to prepend to RestClient::Request for instrumentation
13
+ module Request
14
+ # Constant for the HTTP status range
15
+ HTTP_STATUS_SUCCESS_RANGE = (100..399)
16
+
17
+ def execute(&)
18
+ trace_request do |_span|
19
+ super
20
+ end
21
+ end
22
+
23
+ private
24
+
25
+ def create_request_span
26
+ http_method = method.upcase
27
+ instrumentation_attrs = {
28
+ 'http.request.method' => http_method.to_s,
29
+ 'url.full' => OpenTelemetry::Common::Utilities.cleanse_url(url)
30
+ }
31
+ instrumentation_config = RestClient::Instrumentation.instance.config
32
+ instrumentation_attrs['peer.service'] = instrumentation_config[:peer_service] if instrumentation_config[:peer_service]
33
+ span = tracer.start_span(
34
+ http_method.to_s,
35
+ attributes: instrumentation_attrs.merge(
36
+ OpenTelemetry::Common::HTTP::ClientContext.attributes
37
+ ),
38
+ kind: :client
39
+ )
40
+
41
+ OpenTelemetry::Trace.with_span(span) do
42
+ OpenTelemetry.propagation.inject(processed_headers)
43
+ end
44
+
45
+ span
46
+ end
47
+
48
+ def trace_request
49
+ span = create_request_span
50
+
51
+ yield(span).tap do |response|
52
+ # Verify return value is a response.
53
+ # If so, add additional attributes.
54
+ if response.is_a?(::RestClient::Response)
55
+ span.set_attribute('http.response.status_code', response.code)
56
+ span.status = OpenTelemetry::Trace::Status.error unless HTTP_STATUS_SUCCESS_RANGE.cover?(response.code.to_i)
57
+ end
58
+ end
59
+ rescue ::RestClient::ExceptionWithResponse => e
60
+ span.set_attribute('http.response.status_code', e.http_code)
61
+ span.status = OpenTelemetry::Trace::Status.error unless HTTP_STATUS_SUCCESS_RANGE.cover?(e.http_code.to_i)
62
+ raise e
63
+ ensure
64
+ span.finish
65
+ end
66
+
67
+ def tracer
68
+ RestClient::Instrumentation.instance.tracer
69
+ end
70
+ end
71
+ end
72
+ end
73
+ end
74
+ end
75
+ end
@@ -7,7 +7,7 @@
7
7
  module OpenTelemetry
8
8
  module Instrumentation
9
9
  module RestClient
10
- VERSION = '0.22.8'
10
+ VERSION = '0.24.0'
11
11
  end
12
12
  end
13
13
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: opentelemetry-instrumentation-restclient
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.22.8
4
+ version: 0.24.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - OpenTelemetry Authors
8
- autorequire:
8
+ autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2024-11-27 00:00:00.000000000 Z
11
+ date: 2025-08-13 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: opentelemetry-api
@@ -30,154 +30,14 @@ dependencies:
30
30
  requirements:
31
31
  - - "~>"
32
32
  - !ruby/object:Gem::Version
33
- version: 0.22.1
33
+ version: 0.23.0
34
34
  type: :runtime
35
35
  prerelease: false
36
36
  version_requirements: !ruby/object:Gem::Requirement
37
37
  requirements:
38
38
  - - "~>"
39
39
  - !ruby/object:Gem::Version
40
- version: 0.22.1
41
- - !ruby/object:Gem::Dependency
42
- name: appraisal
43
- requirement: !ruby/object:Gem::Requirement
44
- requirements:
45
- - - "~>"
46
- - !ruby/object:Gem::Version
47
- version: '2.5'
48
- type: :development
49
- prerelease: false
50
- version_requirements: !ruby/object:Gem::Requirement
51
- requirements:
52
- - - "~>"
53
- - !ruby/object:Gem::Version
54
- version: '2.5'
55
- - !ruby/object:Gem::Dependency
56
- name: bundler
57
- requirement: !ruby/object:Gem::Requirement
58
- requirements:
59
- - - "~>"
60
- - !ruby/object:Gem::Version
61
- version: '2.4'
62
- type: :development
63
- prerelease: false
64
- version_requirements: !ruby/object:Gem::Requirement
65
- requirements:
66
- - - "~>"
67
- - !ruby/object:Gem::Version
68
- version: '2.4'
69
- - !ruby/object:Gem::Dependency
70
- name: minitest
71
- requirement: !ruby/object:Gem::Requirement
72
- requirements:
73
- - - "~>"
74
- - !ruby/object:Gem::Version
75
- version: '5.0'
76
- type: :development
77
- prerelease: false
78
- version_requirements: !ruby/object:Gem::Requirement
79
- requirements:
80
- - - "~>"
81
- - !ruby/object:Gem::Version
82
- version: '5.0'
83
- - !ruby/object:Gem::Dependency
84
- name: opentelemetry-sdk
85
- requirement: !ruby/object:Gem::Requirement
86
- requirements:
87
- - - "~>"
88
- - !ruby/object:Gem::Version
89
- version: '1.1'
90
- type: :development
91
- prerelease: false
92
- version_requirements: !ruby/object:Gem::Requirement
93
- requirements:
94
- - - "~>"
95
- - !ruby/object:Gem::Version
96
- version: '1.1'
97
- - !ruby/object:Gem::Dependency
98
- name: opentelemetry-test-helpers
99
- requirement: !ruby/object:Gem::Requirement
100
- requirements:
101
- - - "~>"
102
- - !ruby/object:Gem::Version
103
- version: '0.3'
104
- type: :development
105
- prerelease: false
106
- version_requirements: !ruby/object:Gem::Requirement
107
- requirements:
108
- - - "~>"
109
- - !ruby/object:Gem::Version
110
- version: '0.3'
111
- - !ruby/object:Gem::Dependency
112
- name: rubocop
113
- requirement: !ruby/object:Gem::Requirement
114
- requirements:
115
- - - "~>"
116
- - !ruby/object:Gem::Version
117
- version: 1.68.0
118
- type: :development
119
- prerelease: false
120
- version_requirements: !ruby/object:Gem::Requirement
121
- requirements:
122
- - - "~>"
123
- - !ruby/object:Gem::Version
124
- version: 1.68.0
125
- - !ruby/object:Gem::Dependency
126
- name: rubocop-performance
127
- requirement: !ruby/object:Gem::Requirement
128
- requirements:
129
- - - "~>"
130
- - !ruby/object:Gem::Version
131
- version: 1.23.0
132
- type: :development
133
- prerelease: false
134
- version_requirements: !ruby/object:Gem::Requirement
135
- requirements:
136
- - - "~>"
137
- - !ruby/object:Gem::Version
138
- version: 1.23.0
139
- - !ruby/object:Gem::Dependency
140
- name: simplecov
141
- requirement: !ruby/object:Gem::Requirement
142
- requirements:
143
- - - "~>"
144
- - !ruby/object:Gem::Version
145
- version: 0.17.1
146
- type: :development
147
- prerelease: false
148
- version_requirements: !ruby/object:Gem::Requirement
149
- requirements:
150
- - - "~>"
151
- - !ruby/object:Gem::Version
152
- version: 0.17.1
153
- - !ruby/object:Gem::Dependency
154
- name: webmock
155
- requirement: !ruby/object:Gem::Requirement
156
- requirements:
157
- - - "~>"
158
- - !ruby/object:Gem::Version
159
- version: 3.24.0
160
- type: :development
161
- prerelease: false
162
- version_requirements: !ruby/object:Gem::Requirement
163
- requirements:
164
- - - "~>"
165
- - !ruby/object:Gem::Version
166
- version: 3.24.0
167
- - !ruby/object:Gem::Dependency
168
- name: yard
169
- requirement: !ruby/object:Gem::Requirement
170
- requirements:
171
- - - "~>"
172
- - !ruby/object:Gem::Version
173
- version: '0.9'
174
- type: :development
175
- prerelease: false
176
- version_requirements: !ruby/object:Gem::Requirement
177
- requirements:
178
- - - "~>"
179
- - !ruby/object:Gem::Version
180
- version: '0.9'
40
+ version: 0.23.0
181
41
  description: REST Client instrumentation for the OpenTelemetry framework
182
42
  email:
183
43
  - cncf-opentelemetry-contributors@lists.cncf.io
@@ -193,17 +53,19 @@ files:
193
53
  - lib/opentelemetry/instrumentation.rb
194
54
  - lib/opentelemetry/instrumentation/restclient.rb
195
55
  - lib/opentelemetry/instrumentation/restclient/instrumentation.rb
196
- - lib/opentelemetry/instrumentation/restclient/patches/request.rb
56
+ - lib/opentelemetry/instrumentation/restclient/patches/dup/request.rb
57
+ - lib/opentelemetry/instrumentation/restclient/patches/old/request.rb
58
+ - lib/opentelemetry/instrumentation/restclient/patches/stable/request.rb
197
59
  - lib/opentelemetry/instrumentation/restclient/version.rb
198
60
  homepage: https://github.com/open-telemetry/opentelemetry-ruby-contrib
199
61
  licenses:
200
62
  - Apache-2.0
201
63
  metadata:
202
- changelog_uri: https://rubydoc.info/gems/opentelemetry-instrumentation-restclient/0.22.8/file/CHANGELOG.md
64
+ changelog_uri: https://rubydoc.info/gems/opentelemetry-instrumentation-restclient/0.24.0/file/CHANGELOG.md
203
65
  source_code_uri: https://github.com/open-telemetry/opentelemetry-ruby-contrib/tree/main/instrumentation/restclient
204
66
  bug_tracker_uri: https://github.com/open-telemetry/opentelemetry-ruby-contrib/issues
205
- documentation_uri: https://rubydoc.info/gems/opentelemetry-instrumentation-restclient/0.22.8
206
- post_install_message:
67
+ documentation_uri: https://rubydoc.info/gems/opentelemetry-instrumentation-restclient/0.24.0
68
+ post_install_message:
207
69
  rdoc_options: []
208
70
  require_paths:
209
71
  - lib
@@ -211,15 +73,15 @@ required_ruby_version: !ruby/object:Gem::Requirement
211
73
  requirements:
212
74
  - - ">="
213
75
  - !ruby/object:Gem::Version
214
- version: '3.0'
76
+ version: '3.1'
215
77
  required_rubygems_version: !ruby/object:Gem::Requirement
216
78
  requirements:
217
79
  - - ">="
218
80
  - !ruby/object:Gem::Version
219
81
  version: '0'
220
82
  requirements: []
221
- rubygems_version: 3.2.33
222
- signing_key:
83
+ rubygems_version: 3.3.27
84
+ signing_key:
223
85
  specification_version: 4
224
86
  summary: REST Client instrumentation for the OpenTelemetry framework
225
87
  test_files: []
@@ -1,73 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- # Copyright The OpenTelemetry Authors
4
- #
5
- # SPDX-License-Identifier: Apache-2.0
6
-
7
- module OpenTelemetry
8
- module Instrumentation
9
- module RestClient
10
- module Patches
11
- # Module to prepend to RestClient::Request for instrumentation
12
- module Request
13
- # Constant for the HTTP status range
14
- HTTP_STATUS_SUCCESS_RANGE = (100..399)
15
-
16
- def execute(&block)
17
- trace_request do |_span|
18
- super
19
- end
20
- end
21
-
22
- private
23
-
24
- def create_request_span
25
- http_method = method.upcase
26
- instrumentation_attrs = {
27
- 'http.method' => http_method.to_s,
28
- 'http.url' => OpenTelemetry::Common::Utilities.cleanse_url(url)
29
- }
30
- instrumentation_config = RestClient::Instrumentation.instance.config
31
- instrumentation_attrs['peer.service'] = instrumentation_config[:peer_service] if instrumentation_config[:peer_service]
32
- span = tracer.start_span(
33
- "HTTP #{http_method}",
34
- attributes: instrumentation_attrs.merge(
35
- OpenTelemetry::Common::HTTP::ClientContext.attributes
36
- ),
37
- kind: :client
38
- )
39
-
40
- OpenTelemetry::Trace.with_span(span) do
41
- OpenTelemetry.propagation.inject(processed_headers)
42
- end
43
-
44
- span
45
- end
46
-
47
- def trace_request
48
- span = create_request_span
49
-
50
- yield(span).tap do |response|
51
- # Verify return value is a response.
52
- # If so, add additional attributes.
53
- if response.is_a?(::RestClient::Response)
54
- span.set_attribute('http.status_code', response.code)
55
- span.status = OpenTelemetry::Trace::Status.error unless HTTP_STATUS_SUCCESS_RANGE.cover?(response.code.to_i)
56
- end
57
- end
58
- rescue ::RestClient::ExceptionWithResponse => e
59
- span.set_attribute('http.status_code', e.http_code)
60
- span.status = OpenTelemetry::Trace::Status.error unless HTTP_STATUS_SUCCESS_RANGE.cover?(e.http_code.to_i)
61
- raise e
62
- ensure
63
- span.finish
64
- end
65
-
66
- def tracer
67
- RestClient::Instrumentation.instance.tracer
68
- end
69
- end
70
- end
71
- end
72
- end
73
- end