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