opentelemetry-instrumentation-restclient 0.23.0 → 0.25.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 +4 -4
- data/CHANGELOG.md +19 -11
- data/README.md +16 -0
- data/lib/opentelemetry/instrumentation/restclient/instrumentation.rb +36 -6
- data/lib/opentelemetry/instrumentation/restclient/patches/dup/request.rb +79 -0
- data/lib/opentelemetry/instrumentation/restclient/patches/old/request.rb +75 -0
- data/lib/opentelemetry/instrumentation/restclient/patches/stable/request.rb +75 -0
- data/lib/opentelemetry/instrumentation/restclient/version.rb +1 -1
- metadata +9 -161
- data/lib/opentelemetry/instrumentation/restclient/patches/request.rb +0 -73
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: a04c95320d28ffb93b376fa1c77d8f11eb1345e3ccc2a8cab265289206b67475
|
4
|
+
data.tar.gz: a958ca49d9419249469a889dfaf05952062e19470ad13d48028a1864aba8bda5
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 94f1723e06ee969dede3820674d95fd666b192451f08bb9a2471a2a29d06f8e865b28e225d08a5a66105a2e5a5605c61b0a7381551c4989fe3b18dd6f5ece43b
|
7
|
+
data.tar.gz: 2c0a5b20db7ee2dc49c82a89dea6f69527bf7bc5f1b945db0c691b9a86e97167fb307c14f3a8ab7da9f46b81ba09825b094025c370a731719bf40620f6ec8f2c
|
data/CHANGELOG.md
CHANGED
@@ -1,5 +1,13 @@
|
|
1
1
|
# Release History: opentelemetry-instrumentation-restclient
|
2
2
|
|
3
|
+
### v0.25.0 / 2025-09-30
|
4
|
+
|
5
|
+
* ADDED: Bump minimum API Version to 1.7
|
6
|
+
|
7
|
+
### v0.24.0 / 2025-08-13
|
8
|
+
|
9
|
+
* ADDED: Add REST Client `OTEL_SEMCONV_STABILITY_OPT_IN` environment variable [#1568](https://github.com/open-telemetry/opentelemetry-ruby-contrib/pull/1568)
|
10
|
+
|
3
11
|
### v0.23.0 / 2025-01-16
|
4
12
|
|
5
13
|
* BREAKING CHANGE: Set minimum supported version to Ruby 3.1
|
@@ -36,28 +44,28 @@
|
|
36
44
|
|
37
45
|
### v0.22.1 / 2023-06-05
|
38
46
|
|
39
|
-
* FIXED: Base config options
|
47
|
+
* FIXED: Base config options
|
40
48
|
|
41
49
|
### v0.22.0 / 2023-04-17
|
42
50
|
|
43
|
-
* BREAKING CHANGE: Drop support for EoL Ruby 2.7
|
51
|
+
* BREAKING CHANGE: Drop support for EoL Ruby 2.7
|
44
52
|
|
45
|
-
* ADDED: Drop support for EoL Ruby 2.7
|
53
|
+
* ADDED: Drop support for EoL Ruby 2.7
|
46
54
|
|
47
55
|
### v0.21.0 / 2023-01-14
|
48
56
|
|
49
|
-
* ADDED: Add request/response hooks to more http clients
|
50
|
-
* DOCS: Fix gem homepage
|
51
|
-
* DOCS: More gem documentation fixes
|
57
|
+
* ADDED: Add request/response hooks to more http clients
|
58
|
+
* DOCS: Fix gem homepage
|
59
|
+
* DOCS: More gem documentation fixes
|
52
60
|
|
53
61
|
### v0.20.0 / 2022-06-09
|
54
62
|
|
55
63
|
* Upgrading Base dependency version
|
56
|
-
* FIXED: Broken test file requirements
|
64
|
+
* FIXED: Broken test file requirements
|
57
65
|
|
58
66
|
### v0.19.4 / 2022-05-02
|
59
67
|
|
60
|
-
* FIXED: Restclient invalid span attribute type Symbol
|
68
|
+
* FIXED: Restclient invalid span attribute type Symbol
|
61
69
|
|
62
70
|
### v0.19.3 / 2021-12-02
|
63
71
|
|
@@ -69,13 +77,13 @@
|
|
69
77
|
|
70
78
|
### v0.19.1 / 2021-08-12
|
71
79
|
|
72
|
-
* DOCS: Update docs to rely more on environment variable configuration
|
80
|
+
* DOCS: Update docs to rely more on environment variable configuration
|
73
81
|
|
74
82
|
### v0.19.0 / 2021-06-23
|
75
83
|
|
76
|
-
* BREAKING CHANGE: Total order constraint on span.status=
|
84
|
+
* BREAKING CHANGE: Total order constraint on span.status=
|
77
85
|
|
78
|
-
* FIXED: Total order constraint on span.status=
|
86
|
+
* FIXED: Total order constraint on span.status=
|
79
87
|
|
80
88
|
### v0.18.0 / 2021-05-21
|
81
89
|
|
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
|
-
|
15
|
-
|
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
|
27
|
-
|
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
|
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
|
metadata
CHANGED
@@ -1,183 +1,29 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: opentelemetry-instrumentation-restclient
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.25.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- OpenTelemetry Authors
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2025-
|
11
|
+
date: 2025-09-30 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
|
-
- !ruby/object:Gem::Dependency
|
14
|
-
name: opentelemetry-api
|
15
|
-
requirement: !ruby/object:Gem::Requirement
|
16
|
-
requirements:
|
17
|
-
- - "~>"
|
18
|
-
- !ruby/object:Gem::Version
|
19
|
-
version: '1.0'
|
20
|
-
type: :runtime
|
21
|
-
prerelease: false
|
22
|
-
version_requirements: !ruby/object:Gem::Requirement
|
23
|
-
requirements:
|
24
|
-
- - "~>"
|
25
|
-
- !ruby/object:Gem::Version
|
26
|
-
version: '1.0'
|
27
13
|
- !ruby/object:Gem::Dependency
|
28
14
|
name: opentelemetry-instrumentation-base
|
29
15
|
requirement: !ruby/object:Gem::Requirement
|
30
16
|
requirements:
|
31
17
|
- - "~>"
|
32
18
|
- !ruby/object:Gem::Version
|
33
|
-
version: 0.23
|
19
|
+
version: '0.23'
|
34
20
|
type: :runtime
|
35
21
|
prerelease: false
|
36
22
|
version_requirements: !ruby/object:Gem::Requirement
|
37
23
|
requirements:
|
38
24
|
- - "~>"
|
39
25
|
- !ruby/object:Gem::Version
|
40
|
-
version: 0.23
|
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.69.1
|
118
|
-
type: :development
|
119
|
-
prerelease: false
|
120
|
-
version_requirements: !ruby/object:Gem::Requirement
|
121
|
-
requirements:
|
122
|
-
- - "~>"
|
123
|
-
- !ruby/object:Gem::Version
|
124
|
-
version: 1.69.1
|
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'
|
26
|
+
version: '0.23'
|
181
27
|
description: REST Client instrumentation for the OpenTelemetry framework
|
182
28
|
email:
|
183
29
|
- cncf-opentelemetry-contributors@lists.cncf.io
|
@@ -193,16 +39,18 @@ files:
|
|
193
39
|
- lib/opentelemetry/instrumentation.rb
|
194
40
|
- lib/opentelemetry/instrumentation/restclient.rb
|
195
41
|
- lib/opentelemetry/instrumentation/restclient/instrumentation.rb
|
196
|
-
- lib/opentelemetry/instrumentation/restclient/patches/request.rb
|
42
|
+
- lib/opentelemetry/instrumentation/restclient/patches/dup/request.rb
|
43
|
+
- lib/opentelemetry/instrumentation/restclient/patches/old/request.rb
|
44
|
+
- lib/opentelemetry/instrumentation/restclient/patches/stable/request.rb
|
197
45
|
- lib/opentelemetry/instrumentation/restclient/version.rb
|
198
46
|
homepage: https://github.com/open-telemetry/opentelemetry-ruby-contrib
|
199
47
|
licenses:
|
200
48
|
- Apache-2.0
|
201
49
|
metadata:
|
202
|
-
changelog_uri: https://rubydoc.info/gems/opentelemetry-instrumentation-restclient/0.
|
50
|
+
changelog_uri: https://rubydoc.info/gems/opentelemetry-instrumentation-restclient/0.25.0/file/CHANGELOG.md
|
203
51
|
source_code_uri: https://github.com/open-telemetry/opentelemetry-ruby-contrib/tree/main/instrumentation/restclient
|
204
52
|
bug_tracker_uri: https://github.com/open-telemetry/opentelemetry-ruby-contrib/issues
|
205
|
-
documentation_uri: https://rubydoc.info/gems/opentelemetry-instrumentation-restclient/0.
|
53
|
+
documentation_uri: https://rubydoc.info/gems/opentelemetry-instrumentation-restclient/0.25.0
|
206
54
|
post_install_message:
|
207
55
|
rdoc_options: []
|
208
56
|
require_paths:
|
@@ -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
|