Module: NewRelic::Agent::Instrumentation::Sinatra::TransactionNamer

Extended by:
TransactionNamer
Included in:
TransactionNamer
Defined in:
lib/new_relic/agent/instrumentation/sinatra/transaction_namer.rb

Constant Summary collapse

SINATRA_ROUTE =
'sinatra.route'
ROOT =
'/'.freeze

Instance Method Summary collapse

Instance Method Details

#http_verb(request) ⇒ Object



43
44
45
# File 'lib/new_relic/agent/instrumentation/sinatra/transaction_namer.rb', line 43

def http_verb(request)
  request.request_method if request.respond_to?(:request_method)
end

#initial_transaction_name(request) ⇒ Object



24
25
26
# File 'lib/new_relic/agent/instrumentation/sinatra/transaction_namer.rb', line 24

def initial_transaction_name(request)
  transaction_name(::NewRelic::Agent::UNKNOWN_METRIC, request)
end

#route_for_sinatra(env) ⇒ Object

For bare Sinatra, our override on process_route captures the last route into the environment for us to use later on



49
50
51
# File 'lib/new_relic/agent/instrumentation/sinatra/transaction_namer.rb', line 49

def route_for_sinatra(env)
  env['newrelic.last_route']
end

#route_name_for_padrino(request) ⇒ Object

For Padrino, the request object has a copy of the matched route on it when we go to evaluating, so we can just retrieve that



55
56
57
58
59
# File 'lib/new_relic/agent/instrumentation/sinatra/transaction_namer.rb', line 55

def route_name_for_padrino(request)
  request.route_obj.original_path
rescue
  nil
end

#transaction_name(route_text, request) ⇒ Object



30
31
32
33
34
35
36
37
38
39
40
41
# File 'lib/new_relic/agent/instrumentation/sinatra/transaction_namer.rb', line 30

def transaction_name(route_text, request)
  verb = http_verb(request)

  route_text = route_text.source if route_text.is_a?(Regexp)
  name = route_text.gsub(%r{^[/^\\A]*(.*?)[/\$\?\\z]*$}, '\1')
  name = ROOT if name.empty?
  name = "#{verb} #{name}" unless verb.nil?
  name
rescue => e
  ::NewRelic::Agent.logger.debug("#{e.class} : #{e.message} - Error encountered trying to identify Sinatra transaction name")
  ::NewRelic::Agent::UNKNOWN_METRIC
end

#transaction_name_for_route(env, request) ⇒ Object



14
15
16
17
18
19
20
21
22
# File 'lib/new_relic/agent/instrumentation/sinatra/transaction_namer.rb', line 14

def transaction_name_for_route(env, request)
  if env.key?(SINATRA_ROUTE)
    env[SINATRA_ROUTE]
  else
    name = route_for_sinatra(env)
    name = route_name_for_padrino(request) if name.nil?
    transaction_name(name, request) unless name.nil?
  end
end