opentelemetry-instrumentation-rack 0.22.1 → 0.23.1
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 +13 -0
- data/lib/opentelemetry/instrumentation/rack/instrumentation.rb +40 -23
- data/lib/opentelemetry/instrumentation/rack/middlewares/event_handler.rb +271 -0
- data/lib/opentelemetry/instrumentation/rack/middlewares/tracer_middleware.rb +1 -3
- data/lib/opentelemetry/instrumentation/rack/util.rb +16 -0
- data/lib/opentelemetry/instrumentation/rack/version.rb +1 -1
- data/lib/opentelemetry/instrumentation/rack.rb +1 -1
- metadata +38 -22
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: efa36f4ae67d3a3e2de6f92da89a95d06ec9e65ed2064ee27d797f9435260155
|
4
|
+
data.tar.gz: 88a07f80089ee518f2cffbc06369420ec01bd899edcef5cd3deb0ac2cafdf5e6
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 53813669484205e7de27a9f02d63afdd3073e9668a93d1c268471dcfd71af41c0244d5b8d0b1946309cf35aa810cce6ae9cf40fc1e2b894d7c588af843c3c84f
|
7
|
+
data.tar.gz: b80006cc0690a53f42253146c4885fc124a9f19596309babad229fef80b420688c73f0903bf0721702f4cadae730dbb648f37cb3e8785abb54cab76c3c5a442d
|
data/CHANGELOG.md
CHANGED
@@ -1,5 +1,18 @@
|
|
1
1
|
# Release History: opentelemetry-instrumentation-rack
|
2
2
|
|
3
|
+
### v0.23.1 / 2023-06-05
|
4
|
+
|
5
|
+
* FIXED: Base config options
|
6
|
+
|
7
|
+
### v0.23.0 / 2023-04-17
|
8
|
+
|
9
|
+
* BREAKING CHANGE: Remove retain_middleware_names Rack Option
|
10
|
+
* BREAKING CHANGE: Drop support for EoL Ruby 2.7
|
11
|
+
|
12
|
+
* ADDED: Remove retain_middleware_names Rack Option
|
13
|
+
* ADDED: Drop support for EoL Ruby 2.7
|
14
|
+
* ADDED: Use Rack::Events for instrumentation
|
15
|
+
|
3
16
|
### v0.22.1 / 2023-01-14
|
4
17
|
|
5
18
|
* DOCS: Fix gem homepage
|
@@ -12,10 +12,8 @@ module OpenTelemetry
|
|
12
12
|
# The Instrumentation class contains logic to detect and install the Rack
|
13
13
|
# instrumentation
|
14
14
|
class Instrumentation < OpenTelemetry::Instrumentation::Base
|
15
|
-
install do |
|
15
|
+
install do |_config|
|
16
16
|
require_dependencies
|
17
|
-
|
18
|
-
retain_middleware_names if config[:retain_middleware_names]
|
19
17
|
end
|
20
18
|
|
21
19
|
present do
|
@@ -26,40 +24,59 @@ module OpenTelemetry
|
|
26
24
|
option :allowed_response_headers, default: [], validate: :array
|
27
25
|
option :application, default: nil, validate: :callable
|
28
26
|
option :record_frontend_span, default: false, validate: :boolean
|
29
|
-
option :retain_middleware_names, default: false, validate: :boolean
|
30
27
|
option :untraced_endpoints, default: [], validate: :array
|
31
28
|
option :url_quantization, default: nil, validate: :callable
|
32
29
|
option :untraced_requests, default: nil, validate: :callable
|
33
30
|
option :response_propagators, default: [], validate: :array
|
31
|
+
# This option is only valid for applicaitons using Rack 2.0 or greater
|
32
|
+
option :use_rack_events, default: false, validate: :boolean
|
33
|
+
|
34
|
+
# Temporary Helper for Sinatra and ActionPack middleware to use during installation
|
35
|
+
#
|
36
|
+
# @example Default usage
|
37
|
+
# Rack::Builder.new do
|
38
|
+
# use *OpenTelemetry::Instrumentation::Rack::Instrumenation.instance.middleware_args
|
39
|
+
# run lambda { |_arg| [200, { 'Content-Type' => 'text/plain' }, body] }
|
40
|
+
# end
|
41
|
+
# @return [Array] consisting of a middleware and arguments used in rack builders
|
42
|
+
def middleware_args
|
43
|
+
if config.fetch(:use_rack_events, false) == true && defined?(::Rack::Events)
|
44
|
+
[::Rack::Events, [OpenTelemetry::Instrumentation::Rack::Middlewares::EventHandler.new]]
|
45
|
+
else
|
46
|
+
[OpenTelemetry::Instrumentation::Rack::Middlewares::TracerMiddleware]
|
47
|
+
end
|
48
|
+
end
|
34
49
|
|
35
50
|
private
|
36
51
|
|
37
52
|
def require_dependencies
|
53
|
+
require_relative 'middlewares/event_handler' if defined?(Rack::Events)
|
38
54
|
require_relative 'middlewares/tracer_middleware'
|
39
55
|
end
|
40
56
|
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
|
47
|
-
|
48
|
-
|
49
|
-
|
50
|
-
next_middleware.singleton_class.class_eval do
|
51
|
-
alias_method :__call, :call
|
52
|
-
|
53
|
-
def call(env)
|
54
|
-
env['RESPONSE_MIDDLEWARE'] = self.class.to_s
|
55
|
-
__call(env)
|
56
|
-
end
|
57
|
-
end
|
57
|
+
def config_options(user_config)
|
58
|
+
config = super(user_config)
|
59
|
+
config[:allowed_rack_request_headers] = config[:allowed_request_headers].compact.each_with_object({}) do |header, memo|
|
60
|
+
key = header.to_s.upcase.gsub(/[-\s]/, '_')
|
61
|
+
case key
|
62
|
+
when 'CONTENT_TYPE', 'CONTENT_LENGTH'
|
63
|
+
memo[key] = build_attribute_name('http.request.header.', header)
|
64
|
+
else
|
65
|
+
memo["HTTP_#{key}"] = build_attribute_name('http.request.header.', header)
|
58
66
|
end
|
67
|
+
end
|
59
68
|
|
60
|
-
|
61
|
-
|
69
|
+
config[:allowed_rack_response_headers] = config[:allowed_response_headers].each_with_object({}) do |header, memo|
|
70
|
+
memo[header] = build_attribute_name('http.response.header.', header)
|
71
|
+
memo[header.to_s.upcase] = build_attribute_name('http.response.header.', header)
|
62
72
|
end
|
73
|
+
|
74
|
+
config[:untraced_endpoints]&.compact!
|
75
|
+
config
|
76
|
+
end
|
77
|
+
|
78
|
+
def build_attribute_name(prefix, suffix)
|
79
|
+
prefix + suffix.to_s.downcase.gsub(/[-\s]/, '_')
|
63
80
|
end
|
64
81
|
end
|
65
82
|
end
|
@@ -0,0 +1,271 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
# Copyright The OpenTelemetry Authors
|
4
|
+
#
|
5
|
+
# SPDX-License-Identifier: Apache-2.0
|
6
|
+
|
7
|
+
require_relative '../util'
|
8
|
+
require 'opentelemetry/trace/status'
|
9
|
+
|
10
|
+
module OpenTelemetry
|
11
|
+
module Instrumentation
|
12
|
+
module Rack
|
13
|
+
module Middlewares
|
14
|
+
# OTel Rack Event Handler
|
15
|
+
#
|
16
|
+
# This seeds the root context for this service with the server span as the `current_span`
|
17
|
+
# allowing for callers later in the stack to reference it using {OpenTelemetry::Trace.current_span}
|
18
|
+
#
|
19
|
+
# It also registers the server span in a context dedicated to this instrumentation that users may look up
|
20
|
+
# using {OpenTelemetry::Instrumentation::Rack.current_span}, which makes it possible for users to mutate the span,
|
21
|
+
# e.g. add events or update the span name like in the {ActionPack} instrumentation.
|
22
|
+
#
|
23
|
+
# @example Rack App Using BodyProxy
|
24
|
+
# GLOBAL_LOGGER = Logger.new($stderr)
|
25
|
+
# APP_TRACER = OpenTelemetry.tracer_provider.tracer('my-app', '1.0.0')
|
26
|
+
#
|
27
|
+
# Rack::Builder.new do
|
28
|
+
# use Rack::Events, [OpenTelemetry::Instrumentation::Rack::Middlewares::EventHandler.new]
|
29
|
+
# run lambda { |_arg|
|
30
|
+
# APP_TRACER.in_span('hello-world') do |_span|
|
31
|
+
# body = Rack::BodyProxy.new(['hello world!']) do
|
32
|
+
# rack_span = OpenTelemetry::Instrumentation::Rack.current_span
|
33
|
+
# GLOBAL_LOGGER.info("otel.trace_id=#{rack_span.context.hex_trace_id} otel.span_id=#{rack_span.context.hex_span_id}")
|
34
|
+
# end
|
35
|
+
# [200, { 'Content-Type' => 'text/plain' }, body]
|
36
|
+
# end
|
37
|
+
# }
|
38
|
+
# end
|
39
|
+
#
|
40
|
+
# @see Rack::Events
|
41
|
+
# @see OpenTelemetry::Instrumentation::Rack.current_span
|
42
|
+
class EventHandler
|
43
|
+
include ::Rack::Events::Abstract
|
44
|
+
|
45
|
+
TOKENS_KEY = 'otel.context.tokens'
|
46
|
+
GOOD_HTTP_STATUSES = (100..499)
|
47
|
+
|
48
|
+
# Creates a server span for this current request using the incoming parent context
|
49
|
+
# and registers them as the {current_span}
|
50
|
+
#
|
51
|
+
# @param [Rack::Request] The current HTTP request
|
52
|
+
# @param [Rack::Response] This is nil in practice
|
53
|
+
# @return [void]
|
54
|
+
def on_start(request, _)
|
55
|
+
return if untraced_request?(request.env)
|
56
|
+
|
57
|
+
parent_context = extract_remote_context(request)
|
58
|
+
span = create_span(parent_context, request)
|
59
|
+
request.env[TOKENS_KEY] = register_current_span(span)
|
60
|
+
rescue StandardError => e
|
61
|
+
OpenTelemetry.handle_error(exception: e)
|
62
|
+
end
|
63
|
+
|
64
|
+
# Optionally adds debugging response headers injected from {response_propagators}
|
65
|
+
#
|
66
|
+
# @param [Rack::Request] The current HTTP request
|
67
|
+
# @param [Rack::Response] This current HTTP response
|
68
|
+
# @return [void]
|
69
|
+
def on_commit(request, response)
|
70
|
+
span = OpenTelemetry::Instrumentation::Rack.current_span
|
71
|
+
return unless span.recording?
|
72
|
+
|
73
|
+
response_propagators&.each do |propagator|
|
74
|
+
propagator.inject(response.headers)
|
75
|
+
rescue StandardError => e
|
76
|
+
OpenTelemetry.handle_error(message: 'Unable to inject response propagation headers', exception: e)
|
77
|
+
end
|
78
|
+
rescue StandardError => e
|
79
|
+
OpenTelemetry.handle_error(exception: e)
|
80
|
+
end
|
81
|
+
|
82
|
+
# Records Unexpected Exceptions on the Rack span and set the Span Status to Error
|
83
|
+
#
|
84
|
+
# @note does nothing if the span is a non-recording span
|
85
|
+
# @param [Rack::Request] The current HTTP request
|
86
|
+
# @param [Rack::Response] The current HTTP response
|
87
|
+
# @param [Exception] An unxpected error raised by the application
|
88
|
+
def on_error(request, _, error)
|
89
|
+
span = OpenTelemetry::Instrumentation::Rack.current_span
|
90
|
+
return unless span.recording?
|
91
|
+
|
92
|
+
span.record_exception(error)
|
93
|
+
span.status = OpenTelemetry::Trace::Status.error
|
94
|
+
rescue StandardError => e
|
95
|
+
OpenTelemetry.handle_error(exception: e)
|
96
|
+
end
|
97
|
+
|
98
|
+
# Finishes the span making it eligible to be exported and cleans up existing contexts
|
99
|
+
#
|
100
|
+
# @note does nothing if the span is a non-recording span
|
101
|
+
# @param [Rack::Request] The current HTTP request
|
102
|
+
# @param [Rack::Response] The current HTTP response
|
103
|
+
def on_finish(request, response)
|
104
|
+
span = OpenTelemetry::Instrumentation::Rack.current_span
|
105
|
+
return unless span.recording?
|
106
|
+
|
107
|
+
add_response_attributes(span, response) if response
|
108
|
+
rescue StandardError => e
|
109
|
+
OpenTelemetry.handle_error(exception: e)
|
110
|
+
ensure
|
111
|
+
detach_contexts(request)
|
112
|
+
end
|
113
|
+
|
114
|
+
private
|
115
|
+
|
116
|
+
EMPTY_HASH = {}.freeze
|
117
|
+
def extract_request_headers(env)
|
118
|
+
return EMPTY_HASH if allowed_request_headers.empty?
|
119
|
+
|
120
|
+
allowed_request_headers.each_with_object({}) do |(key, value), result|
|
121
|
+
result[value] = env[key] if env.key?(key)
|
122
|
+
end
|
123
|
+
end
|
124
|
+
|
125
|
+
def extract_response_attributes(response)
|
126
|
+
attributes = { 'http.status_code' => response.status.to_i }
|
127
|
+
attributes.merge!(extract_response_headers(response.headers))
|
128
|
+
attributes
|
129
|
+
end
|
130
|
+
|
131
|
+
def extract_response_headers(headers)
|
132
|
+
return EMPTY_HASH if allowed_response_headers.empty?
|
133
|
+
|
134
|
+
allowed_response_headers.each_with_object({}) do |(key, value), result|
|
135
|
+
if headers.key?(key)
|
136
|
+
result[value] = headers[key]
|
137
|
+
else
|
138
|
+
# do case-insensitive match:
|
139
|
+
headers.each do |k, v|
|
140
|
+
if k.upcase == key
|
141
|
+
result[value] = v
|
142
|
+
break
|
143
|
+
end
|
144
|
+
end
|
145
|
+
end
|
146
|
+
end
|
147
|
+
end
|
148
|
+
|
149
|
+
def untraced_request?(env)
|
150
|
+
return true if untraced_endpoints.include?(env['PATH_INFO'])
|
151
|
+
return true if untraced_requests&.call(env)
|
152
|
+
|
153
|
+
false
|
154
|
+
end
|
155
|
+
|
156
|
+
# https://github.com/open-telemetry/opentelemetry-specification/blob/master/specification/data-http.md#name
|
157
|
+
#
|
158
|
+
# recommendation: span.name(s) should be low-cardinality (e.g.,
|
159
|
+
# strip off query param value, keep param name)
|
160
|
+
#
|
161
|
+
# see http://github.com/open-telemetry/opentelemetry-specification/pull/416/files
|
162
|
+
def create_request_span_name(request)
|
163
|
+
# NOTE: dd-trace-rb has implemented 'quantization' (which lowers url cardinality)
|
164
|
+
# see Datadog::Quantization::HTTP.url
|
165
|
+
|
166
|
+
if (implementation = url_quantization)
|
167
|
+
request_uri_or_path_info = request.env['REQUEST_URI'] || request.path_info
|
168
|
+
implementation.call(request_uri_or_path_info, request.env)
|
169
|
+
else
|
170
|
+
"HTTP #{request.request_method}"
|
171
|
+
end
|
172
|
+
end
|
173
|
+
|
174
|
+
def extract_remote_context(request)
|
175
|
+
OpenTelemetry.propagation.extract(
|
176
|
+
request.env,
|
177
|
+
getter: OpenTelemetry::Common::Propagation.rack_env_getter
|
178
|
+
)
|
179
|
+
end
|
180
|
+
|
181
|
+
def request_span_attributes(env)
|
182
|
+
attributes = {
|
183
|
+
'http.method' => env['REQUEST_METHOD'],
|
184
|
+
'http.host' => env['HTTP_HOST'] || 'unknown',
|
185
|
+
'http.scheme' => env['rack.url_scheme'],
|
186
|
+
'http.target' => env['QUERY_STRING'].empty? ? env['PATH_INFO'] : "#{env['PATH_INFO']}?#{env['QUERY_STRING']}"
|
187
|
+
}
|
188
|
+
|
189
|
+
attributes['http.user_agent'] = env['HTTP_USER_AGENT'] if env['HTTP_USER_AGENT']
|
190
|
+
attributes.merge!(extract_request_headers(env))
|
191
|
+
attributes
|
192
|
+
end
|
193
|
+
|
194
|
+
def detach_contexts(request)
|
195
|
+
request.env[TOKENS_KEY]&.reverse&.each do |token|
|
196
|
+
OpenTelemetry::Context.detach(token)
|
197
|
+
OpenTelemetry::Trace.current_span.finish
|
198
|
+
end
|
199
|
+
rescue StandardError => e
|
200
|
+
OpenTelemetry.handle_error(exception: e)
|
201
|
+
end
|
202
|
+
|
203
|
+
def add_response_attributes(span, response)
|
204
|
+
span.status = OpenTelemetry::Trace::Status.error unless GOOD_HTTP_STATUSES.include?(response.status.to_i)
|
205
|
+
attributes = extract_response_attributes(response)
|
206
|
+
span.add_attributes(attributes)
|
207
|
+
rescue StandardError => e
|
208
|
+
OpenTelemetry.handle_error(exception: e)
|
209
|
+
end
|
210
|
+
|
211
|
+
def record_frontend_span?
|
212
|
+
config[:record_frontend_span] == true
|
213
|
+
end
|
214
|
+
|
215
|
+
def untraced_endpoints
|
216
|
+
config[:untraced_endpoints]
|
217
|
+
end
|
218
|
+
|
219
|
+
def untraced_requests
|
220
|
+
config[:untraced_requests]
|
221
|
+
end
|
222
|
+
|
223
|
+
def url_quantization
|
224
|
+
config[:url_quantization]
|
225
|
+
end
|
226
|
+
|
227
|
+
def response_propagators
|
228
|
+
config[:response_propagators]
|
229
|
+
end
|
230
|
+
|
231
|
+
def allowed_request_headers
|
232
|
+
config[:allowed_rack_request_headers]
|
233
|
+
end
|
234
|
+
|
235
|
+
def allowed_response_headers
|
236
|
+
config[:allowed_rack_response_headers]
|
237
|
+
end
|
238
|
+
|
239
|
+
def tracer
|
240
|
+
OpenTelemetry::Instrumentation::Rack::Instrumentation.instance.tracer
|
241
|
+
end
|
242
|
+
|
243
|
+
def config
|
244
|
+
OpenTelemetry::Instrumentation::Rack::Instrumentation.instance.config
|
245
|
+
end
|
246
|
+
|
247
|
+
def register_current_span(span)
|
248
|
+
ctx = OpenTelemetry::Trace.context_with_span(span)
|
249
|
+
rack_ctx = OpenTelemetry::Instrumentation::Rack.context_with_span(span, parent_context: ctx)
|
250
|
+
|
251
|
+
contexts = [ctx, rack_ctx]
|
252
|
+
contexts.compact!
|
253
|
+
contexts.map { |context| OpenTelemetry::Context.attach(context) }
|
254
|
+
end
|
255
|
+
|
256
|
+
def create_span(parent_context, request)
|
257
|
+
span = tracer.start_span(
|
258
|
+
create_request_span_name(request),
|
259
|
+
with_parent: parent_context,
|
260
|
+
kind: :server,
|
261
|
+
attributes: request_span_attributes(request.env)
|
262
|
+
)
|
263
|
+
request_start_time = OpenTelemetry::Instrumentation::Rack::Util::QueueTime.get_request_start(request.env)
|
264
|
+
span.add_event('http.proxy.request.started', timestamp: request_start_time) unless request_start_time.nil?
|
265
|
+
span
|
266
|
+
end
|
267
|
+
end
|
268
|
+
end
|
269
|
+
end
|
270
|
+
end
|
271
|
+
end
|
@@ -6,15 +6,13 @@
|
|
6
6
|
|
7
7
|
require 'opentelemetry/trace/status'
|
8
8
|
|
9
|
-
require_relative '../util/queue_time'
|
10
|
-
|
11
9
|
module OpenTelemetry
|
12
10
|
module Instrumentation
|
13
11
|
module Rack
|
14
12
|
module Middlewares
|
15
13
|
# TracerMiddleware propagates context and instruments Rack requests
|
16
14
|
# by way of its middleware system
|
17
|
-
class TracerMiddleware
|
15
|
+
class TracerMiddleware
|
18
16
|
class << self
|
19
17
|
def allowed_rack_request_headers
|
20
18
|
@allowed_rack_request_headers ||= Array(config[:allowed_request_headers]).each_with_object({}) do |header, memo|
|
@@ -0,0 +1,16 @@
|
|
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 Rack
|
10
|
+
# Provides utilities methods for creating Rack spans
|
11
|
+
module Util
|
12
|
+
require_relative 'util/queue_time'
|
13
|
+
end
|
14
|
+
end
|
15
|
+
end
|
16
|
+
end
|
@@ -14,7 +14,6 @@ module OpenTelemetry
|
|
14
14
|
extend self
|
15
15
|
|
16
16
|
CURRENT_SPAN_KEY = Context.create_key('current-span')
|
17
|
-
|
18
17
|
private_constant :CURRENT_SPAN_KEY
|
19
18
|
|
20
19
|
# Returns the current span from the current or provided context
|
@@ -50,4 +49,5 @@ module OpenTelemetry
|
|
50
49
|
end
|
51
50
|
|
52
51
|
require_relative './rack/instrumentation'
|
52
|
+
require_relative './rack/util'
|
53
53
|
require_relative './rack/version'
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: opentelemetry-instrumentation-rack
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.23.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- OpenTelemetry Authors
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2023-
|
11
|
+
date: 2023-06-05 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: opentelemetry-api
|
@@ -44,14 +44,14 @@ dependencies:
|
|
44
44
|
requirements:
|
45
45
|
- - "~>"
|
46
46
|
- !ruby/object:Gem::Version
|
47
|
-
version: 0.
|
47
|
+
version: 0.22.1
|
48
48
|
type: :runtime
|
49
49
|
prerelease: false
|
50
50
|
version_requirements: !ruby/object:Gem::Requirement
|
51
51
|
requirements:
|
52
52
|
- - "~>"
|
53
53
|
- !ruby/object:Gem::Version
|
54
|
-
version: 0.
|
54
|
+
version: 0.22.1
|
55
55
|
- !ruby/object:Gem::Dependency
|
56
56
|
name: appraisal
|
57
57
|
requirement: !ruby/object:Gem::Requirement
|
@@ -126,44 +126,44 @@ dependencies:
|
|
126
126
|
name: opentelemetry-test-helpers
|
127
127
|
requirement: !ruby/object:Gem::Requirement
|
128
128
|
requirements:
|
129
|
-
- - "
|
129
|
+
- - "~>"
|
130
130
|
- !ruby/object:Gem::Version
|
131
|
-
version: '0'
|
131
|
+
version: '0.3'
|
132
132
|
type: :development
|
133
133
|
prerelease: false
|
134
134
|
version_requirements: !ruby/object:Gem::Requirement
|
135
135
|
requirements:
|
136
|
-
- - "
|
136
|
+
- - "~>"
|
137
137
|
- !ruby/object:Gem::Version
|
138
|
-
version: '0'
|
138
|
+
version: '0.3'
|
139
139
|
- !ruby/object:Gem::Dependency
|
140
140
|
name: rack
|
141
141
|
requirement: !ruby/object:Gem::Requirement
|
142
142
|
requirements:
|
143
|
-
- - "
|
143
|
+
- - ">="
|
144
144
|
- !ruby/object:Gem::Version
|
145
|
-
version:
|
145
|
+
version: '0'
|
146
146
|
type: :development
|
147
147
|
prerelease: false
|
148
148
|
version_requirements: !ruby/object:Gem::Requirement
|
149
149
|
requirements:
|
150
|
-
- - "
|
150
|
+
- - ">="
|
151
151
|
- !ruby/object:Gem::Version
|
152
|
-
version:
|
152
|
+
version: '0'
|
153
153
|
- !ruby/object:Gem::Dependency
|
154
154
|
name: rack-test
|
155
155
|
requirement: !ruby/object:Gem::Requirement
|
156
156
|
requirements:
|
157
|
-
- - "
|
157
|
+
- - ">="
|
158
158
|
- !ruby/object:Gem::Version
|
159
|
-
version:
|
159
|
+
version: '0'
|
160
160
|
type: :development
|
161
161
|
prerelease: false
|
162
162
|
version_requirements: !ruby/object:Gem::Requirement
|
163
163
|
requirements:
|
164
|
-
- - "
|
164
|
+
- - ">="
|
165
165
|
- !ruby/object:Gem::Version
|
166
|
-
version:
|
166
|
+
version: '0'
|
167
167
|
- !ruby/object:Gem::Dependency
|
168
168
|
name: rake
|
169
169
|
requirement: !ruby/object:Gem::Requirement
|
@@ -178,20 +178,34 @@ dependencies:
|
|
178
178
|
- - "~>"
|
179
179
|
- !ruby/object:Gem::Version
|
180
180
|
version: '13.0'
|
181
|
+
- !ruby/object:Gem::Dependency
|
182
|
+
name: rspec-mocks
|
183
|
+
requirement: !ruby/object:Gem::Requirement
|
184
|
+
requirements:
|
185
|
+
- - ">="
|
186
|
+
- !ruby/object:Gem::Version
|
187
|
+
version: '0'
|
188
|
+
type: :development
|
189
|
+
prerelease: false
|
190
|
+
version_requirements: !ruby/object:Gem::Requirement
|
191
|
+
requirements:
|
192
|
+
- - ">="
|
193
|
+
- !ruby/object:Gem::Version
|
194
|
+
version: '0'
|
181
195
|
- !ruby/object:Gem::Dependency
|
182
196
|
name: rubocop
|
183
197
|
requirement: !ruby/object:Gem::Requirement
|
184
198
|
requirements:
|
185
199
|
- - "~>"
|
186
200
|
- !ruby/object:Gem::Version
|
187
|
-
version: 1.
|
201
|
+
version: 1.50.2
|
188
202
|
type: :development
|
189
203
|
prerelease: false
|
190
204
|
version_requirements: !ruby/object:Gem::Requirement
|
191
205
|
requirements:
|
192
206
|
- - "~>"
|
193
207
|
- !ruby/object:Gem::Version
|
194
|
-
version: 1.
|
208
|
+
version: 1.50.2
|
195
209
|
- !ruby/object:Gem::Dependency
|
196
210
|
name: simplecov
|
197
211
|
requirement: !ruby/object:Gem::Requirement
|
@@ -263,17 +277,19 @@ files:
|
|
263
277
|
- lib/opentelemetry/instrumentation.rb
|
264
278
|
- lib/opentelemetry/instrumentation/rack.rb
|
265
279
|
- lib/opentelemetry/instrumentation/rack/instrumentation.rb
|
280
|
+
- lib/opentelemetry/instrumentation/rack/middlewares/event_handler.rb
|
266
281
|
- lib/opentelemetry/instrumentation/rack/middlewares/tracer_middleware.rb
|
282
|
+
- lib/opentelemetry/instrumentation/rack/util.rb
|
267
283
|
- lib/opentelemetry/instrumentation/rack/util/queue_time.rb
|
268
284
|
- lib/opentelemetry/instrumentation/rack/version.rb
|
269
285
|
homepage: https://github.com/open-telemetry/opentelemetry-ruby-contrib
|
270
286
|
licenses:
|
271
287
|
- Apache-2.0
|
272
288
|
metadata:
|
273
|
-
changelog_uri: https://rubydoc.info/gems/opentelemetry-instrumentation-rack/0.
|
289
|
+
changelog_uri: https://rubydoc.info/gems/opentelemetry-instrumentation-rack/0.23.1/file/CHANGELOG.md
|
274
290
|
source_code_uri: https://github.com/open-telemetry/opentelemetry-ruby-contrib/tree/main/instrumentation/rack
|
275
291
|
bug_tracker_uri: https://github.com/open-telemetry/opentelemetry-ruby-contrib/issues
|
276
|
-
documentation_uri: https://rubydoc.info/gems/opentelemetry-instrumentation-rack/0.
|
292
|
+
documentation_uri: https://rubydoc.info/gems/opentelemetry-instrumentation-rack/0.23.1
|
277
293
|
post_install_message:
|
278
294
|
rdoc_options: []
|
279
295
|
require_paths:
|
@@ -282,14 +298,14 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
282
298
|
requirements:
|
283
299
|
- - ">="
|
284
300
|
- !ruby/object:Gem::Version
|
285
|
-
version:
|
301
|
+
version: '3.0'
|
286
302
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
287
303
|
requirements:
|
288
304
|
- - ">="
|
289
305
|
- !ruby/object:Gem::Version
|
290
306
|
version: '0'
|
291
307
|
requirements: []
|
292
|
-
rubygems_version: 3.
|
308
|
+
rubygems_version: 3.2.33
|
293
309
|
signing_key:
|
294
310
|
specification_version: 4
|
295
311
|
summary: Rack instrumentation for the OpenTelemetry framework
|