module NewRelic::Agent::Instrumentation::Sinatra::Tracer
Constants
- INSTRUMENTATION_NAME
Public Class Methods
included(clazz)
click to toggle source
# File lib/new_relic/agent/instrumentation/sinatra/instrumentation.rb, line 18 def self.included(clazz) clazz.extend(self) end
Public Instance Methods
build_with_tracing(*args) { || ... }
click to toggle source
# File lib/new_relic/agent/instrumentation/sinatra/instrumentation.rb, line 35 def build_with_tracing(*args, &block) unless NewRelic::Agent.config[:disable_sinatra_auto_middleware] newrelic_middlewares.each do |middleware_class| try_to_use(self, middleware_class) end end yield end
dispatch_with_tracing() { || ... }
click to toggle source
# File lib/new_relic/agent/instrumentation/sinatra/instrumentation.rb, line 94 def dispatch_with_tracing NewRelic::Agent.record_instrumentation_invocation(INSTRUMENTATION_NAME) request_params = get_request_params filtered_params = ::NewRelic::Agent::ParameterFiltering::apply_filters(request.env, request_params || {}) name = TransactionNamer.initial_transaction_name(request) perform_action_with_newrelic_trace(:category => :sinatra, :name => name, :params => filtered_params) do begin yield ensure # Will only see an error raised if :show_exceptions is true, but # will always see them in the env hash if they occur had_error = env.has_key?('sinatra.error') ::NewRelic::Agent.notice_error(env['sinatra.error']) if had_error end end end
do_not_trace?()
click to toggle source
# File lib/new_relic/agent/instrumentation/sinatra/instrumentation.rb, line 115 def do_not_trace? Ignorer.should_ignore?(self, :routes) end
get_request_params()
click to toggle source
# File lib/new_relic/agent/instrumentation/sinatra/instrumentation.rb, line 85 def get_request_params begin @request.params rescue => e NewRelic::Agent.logger.debug('Failed to get params from Rack request.', e) nil end end
ignore_apdex?()
click to toggle source
Overrides ControllerInstrumentation
implementation
# File lib/new_relic/agent/instrumentation/sinatra/instrumentation.rb, line 120 def ignore_apdex? Ignorer.should_ignore?(self, :apdex) end
ignore_enduser?()
click to toggle source
Overrides ControllerInstrumentation
implementation
# File lib/new_relic/agent/instrumentation/sinatra/instrumentation.rb, line 125 def ignore_enduser? Ignorer.should_ignore?(self, :enduser) end
install_lock()
click to toggle source
# File lib/new_relic/agent/instrumentation/sinatra/instrumentation.rb, line 44 def install_lock @install_lock ||= Mutex.new end
newrelic_middlewares()
click to toggle source
# File lib/new_relic/agent/instrumentation/sinatra/instrumentation.rb, line 27 def newrelic_middlewares middlewares = [NewRelic::Rack::BrowserMonitoring] if NewRelic::Rack::AgentHooks.needed? middlewares << NewRelic::Rack::AgentHooks end middlewares end
newrelic_request_headers(_)
click to toggle source
Expected method for supporting ControllerInstrumentation
# File lib/new_relic/agent/instrumentation/sinatra/instrumentation.rb, line 23 def newrelic_request_headers(_) request.env end
process_route_with_tracing(*args) { || ... }
click to toggle source
Capture last route we’ve seen. Will set for transaction on route_eval
# File lib/new_relic/agent/instrumentation/sinatra/instrumentation.rb, line 57 def process_route_with_tracing(*args) begin env['newrelic.last_route'] = args[0] rescue => e ::NewRelic::Agent.logger.debug('Failed determining last route in Sinatra', e) end yield end
route_eval_with_tracing(*args) { || ... }
click to toggle source
If a transaction name is already set, this call will tromple over it. This is intentional, as typically passing to a separate route is like an entirely separate transaction, so we pick up the new name.
If we’re ignored, this remains safe, since set_transaction_name care for the gating on the transaction’s existence for us.
# File lib/new_relic/agent/instrumentation/sinatra/instrumentation.rb, line 72 def route_eval_with_tracing(*args) begin if txn_name = TransactionNamer.transaction_name_for_route(env, request) ::NewRelic::Agent::Transaction.set_default_transaction_name( "#{self.class.name}/#{txn_name}", :sinatra ) end rescue => e ::NewRelic::Agent.logger.debug('Failed during route_eval to set transaction name', e) end yield end
try_to_use(app, clazz)
click to toggle source
# File lib/new_relic/agent/instrumentation/sinatra/instrumentation.rb, line 48 def try_to_use(app, clazz) install_lock.synchronize do # The following line needs else branch coverage has_middleware = app.middleware && app.middleware.any? { |info| info && info[0] == clazz } # rubocop:disable Style/SafeNavigation app.use(clazz) unless has_middleware end end