-
Notifications
You must be signed in to change notification settings - Fork 204
feat: Rack semantic stability opt in #1594
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
base: main
Are you sure you want to change the base?
Changes from all commits
131de59
b41a13c
08895b1
0d73d7b
fe46f3d
69239d1
5168831
74aa619
5ad41e3
6dca891
47e65dc
7290822
0752905
b8e0c73
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
Original file line number | Diff line number | Diff line change |
---|---|---|
|
@@ -13,7 +13,8 @@ module Rack | |
# instrumentation | ||
class Instrumentation < OpenTelemetry::Instrumentation::Base | ||
install do |_config| | ||
require_dependencies | ||
patch_type = determine_semconv | ||
send(:"require_dependencies_#{patch_type}") | ||
end | ||
|
||
present do | ||
|
@@ -35,23 +36,64 @@ class Instrumentation < OpenTelemetry::Instrumentation::Base | |
# | ||
# @example Default usage | ||
# Rack::Builder.new do | ||
# use *OpenTelemetry::Instrumentation::Rack::Instrumenation.instance.middleware_args | ||
# use *OpenTelemetry::Instrumentation::Rack::Instrumenation.instance.middleware_args_old | ||
# run lambda { |_arg| [200, { 'Content-Type' => 'text/plain' }, body] } | ||
# end | ||
# @return [Array] consisting of a middleware and arguments used in rack builders | ||
def middleware_args | ||
if config.fetch(:use_rack_events, false) == true && defined?(OpenTelemetry::Instrumentation::Rack::Middlewares::EventHandler) | ||
[::Rack::Events, [OpenTelemetry::Instrumentation::Rack::Middlewares::EventHandler.new]] | ||
def middleware_args_old | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Would this break existing monkey patches of the rack instrumentation, as this is not private? Is that a reasonable concern? I understand we are not 1.x here yet so it's not technically a semver question, but just trying to be mindful around touching rack instrumentation as it's probably got a rather large install base at this point. There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Fantastic call out - it probably would break some stuff! I've aliased the new and old method definitions, as well as added a test 7290822 |
||
if config.fetch(:use_rack_events, false) == true && defined?(OpenTelemetry::Instrumentation::Rack::Middlewares::Old::EventHandler) | ||
[::Rack::Events, [OpenTelemetry::Instrumentation::Rack::Middlewares::Old::EventHandler.new]] | ||
else | ||
[OpenTelemetry::Instrumentation::Rack::Middlewares::TracerMiddleware] | ||
[OpenTelemetry::Instrumentation::Rack::Middlewares::Old::TracerMiddleware] | ||
end | ||
end | ||
|
||
alias middleware_args middleware_args_old | ||
|
||
def middleware_args_dup | ||
if config.fetch(:use_rack_events, false) == true && defined?(OpenTelemetry::Instrumentation::Rack::Middlewares::Dup::EventHandler) | ||
[::Rack::Events, [OpenTelemetry::Instrumentation::Rack::Middlewares::Dup::EventHandler.new]] | ||
else | ||
[OpenTelemetry::Instrumentation::Rack::Middlewares::Dup::TracerMiddleware] | ||
end | ||
end | ||
|
||
def middleware_args_stable | ||
if config.fetch(:use_rack_events, false) == true && defined?(OpenTelemetry::Instrumentation::Rack::Middlewares::Stable::EventHandler) | ||
[::Rack::Events, [OpenTelemetry::Instrumentation::Rack::Middlewares::Stable::EventHandler.new]] | ||
else | ||
[OpenTelemetry::Instrumentation::Rack::Middlewares::Stable::TracerMiddleware] | ||
end | ||
end | ||
|
||
private | ||
|
||
def require_dependencies | ||
require_relative 'middlewares/event_handler' if defined?(::Rack::Events) | ||
require_relative 'middlewares/tracer_middleware' | ||
def determine_semconv | ||
stability_opt_in = ENV.fetch('OTEL_SEMCONV_STABILITY_OPT_IN', '') | ||
values = stability_opt_in.split(',').map(&:strip) | ||
|
||
if values.include?('http/dup') | ||
'dup' | ||
elsif values.include?('http') | ||
'stable' | ||
else | ||
'old' | ||
end | ||
end | ||
|
||
def require_dependencies_old | ||
require_relative 'middlewares/old/event_handler' if defined?(::Rack::Events) | ||
require_relative 'middlewares/old/tracer_middleware' | ||
end | ||
|
||
def require_dependencies_stable | ||
require_relative 'middlewares/stable/event_handler' if defined?(::Rack::Events) | ||
require_relative 'middlewares/stable/tracer_middleware' | ||
end | ||
|
||
def require_dependencies_dup | ||
require_relative 'middlewares/dup/event_handler' if defined?(::Rack::Events) | ||
require_relative 'middlewares/dup/tracer_middleware' | ||
end | ||
|
||
def config_options(user_config) | ||
|
Uh oh!
There was an error while loading. Please reload this page.