lib/opentelemetry/instrumentation/sinatra/instrumentation.rb in opentelemetry-instrumentation-sinatra-0.23.5 vs lib/opentelemetry/instrumentation/sinatra/instrumentation.rb in opentelemetry-instrumentation-sinatra-0.24.0
- old
+ new
@@ -7,20 +7,53 @@
require_relative 'extensions/tracer_extension'
module OpenTelemetry
module Instrumentation
module Sinatra
- # The Instrumentation class contains logic to detect and install the Sinatra
- # instrumentation
+ # The {OpenTelemetry::Instrumentation::Sinatra::Instrumentation} class contains logic to detect and install the Sinatra instrumentation
+ #
+ # Installation and configuration of this instrumentation is done within the
+ # {https://www.rubydoc.info/gems/opentelemetry-sdk/OpenTelemetry/SDK#configure-instance_method OpenTelemetry::SDK#configure}
+ # block, calling {https://www.rubydoc.info/gems/opentelemetry-sdk/OpenTelemetry%2FSDK%2FConfigurator:use use()}
+ # or {https://www.rubydoc.info/gems/opentelemetry-sdk/OpenTelemetry%2FSDK%2FConfigurator:use_all use_all()}.
+ #
+ # ## Configuration keys and options
+ #
+ # ### `:install_rack`
+ #
+ # Default is `true`. Specifies whether or not to install the Rack instrumentation as part of installing the Sinatra instrumentation.
+ # This is useful in cases where you have multiple Rack applications but want to manually specify where to insert the tracing middleware.
+ #
+ # @example Manually install Rack instrumentation.
+ # OpenTelemetry::SDK.configure do |c|
+ # c.use_all({
+ # 'OpenTelemetry::Instrumentation::Rack' => { },
+ # 'OpenTelemetry::Instrumentation::Sinatra' => {
+ # install_rack: false
+ # },
+ # })
+ # end
+ #
class Instrumentation < OpenTelemetry::Instrumentation::Base
- install do |_|
- OpenTelemetry::Instrumentation::Rack::Instrumentation.instance.install({})
+ install do |config|
+ OpenTelemetry::Instrumentation::Rack::Instrumentation.instance.install({}) if config[:install_rack]
+ unless OpenTelemetry::Instrumentation::Rack::Instrumentation.instance.installed?
+ OpenTelemetry.logger.warn('Rack instrumentation is required for Sinatra but not installed. Please see the docs for more details: https://opentelemetry.io/docs/languages/ruby/libraries/')
+ end
+
::Sinatra::Base.register Extensions::TracerExtension
end
+ option :install_rack, default: true, validate: :boolean
+
present do
defined?(::Sinatra)
+ end
+
+ def install_middleware(app)
+ app.use(*OpenTelemetry::Instrumentation::Rack::Instrumentation.instance.middleware_args) if config[:install_rack]
+ app.use(Middlewares::TracerMiddleware)
end
end
end
end
end