# This file is distributed under New Relic's license terms. # See https://github.com/newrelic/newrelic-ruby-agent/blob/main/LICENSE for complete details. # frozen_string_literal: true require 'new_relic/agent/instrumentation/controller_instrumentation' require_relative 'rack/helpers' require_relative 'rack/instrumentation' require_relative 'rack/chain' require_relative 'rack/prepend' DependencyDetection.defer do named :rack depends_on do defined?(Rack) && defined?(Rack::Builder) end executes do if use_prepend? prepend_instrument Rack::Builder, NewRelic::Agent::Instrumentation::Rack::Prepend else chain_instrument_target Rack::Builder, NewRelic::Agent::Instrumentation::Rack::Chain end end end DependencyDetection.defer do named :puma_rack depends_on do defined?(Puma::Rack::Builder) end executes do if use_prepend? prepend_instrument Puma::Rack::Builder, NewRelic::Agent::Instrumentation::Rack::Prepend else chain_instrument_target Puma::Rack::Builder, NewRelic::Agent::Instrumentation::Rack::Chain end end end DependencyDetection.defer do named :rack_urlmap depends_on do defined?(Rack) && defined?(Rack::URLMap) end depends_on do NewRelic::Agent::Instrumentation::RackHelpers.middleware_instrumentation_enabled? end executes do if use_prepend? prepend_instrument Rack::URLMap, NewRelic::Agent::Instrumentation::Rack::URLMap::Prepend else chain_instrument_target Rack::URLMap, NewRelic::Agent::Instrumentation::Rack::URLMap::Chain NewRelic::Agent::Instrumentation::RackHelpers.instrument_url_map end end end DependencyDetection.defer do named :puma_rack_urlmap depends_on do defined?(Puma::Rack::URLMap) end depends_on do NewRelic::Agent::Instrumentation::RackHelpers.middleware_instrumentation_enabled? end executes do if use_prepend? prepend_instrument Puma::Rack::URLMap, NewRelic::Agent::Instrumentation::Rack::URLMap::Prepend else chain_instrument_target Puma::Rack::URLMap, NewRelic::Agent::Instrumentation::Rack::URLMap::Chain end end end