module NewRelic::Agent::MethodTracer
This module contains class methods added to support installing custom metric tracers and executing for individual metrics.
Examples¶ ↑
When the agent initializes, it extends Module with these methods. However if you want to use the API in code that might get loaded before the agent is initialized you will need to require this file:
require 'new_relic/agent/method_tracer' class A include NewRelic::Agent::MethodTracer def process ... end add_method_tracer :process end
To instrument a class method:
require 'new_relic/agent/method_tracer' class An def self.process ... end class << self include NewRelic::Agent::MethodTracer add_method_tracer :process end end
@api public
Public Class Methods
# File lib/new_relic/agent/method_tracer.rb, line 53 def self.extended clazz clazz.extend ClassMethods end
# File lib/new_relic/agent/method_tracer.rb, line 49 def self.included clazz clazz.extend ClassMethods end
Public Instance Methods
This method is deprecated and exists only for backwards-compatibility reasons. Usages should be replaced with calls to NewRelic::Agent#record_metric.
@api public @deprecated
# File lib/new_relic/agent/method_tracer.rb, line 131 def get_stats_scoped(first_name, scoped_metric_only) NewRelic::Agent.instance.stats_engine.get_stats(first_name, true, scoped_metric_only) end
This method is deprecated and exists only for backwards-compatibility reasons. Usages should be replaced with calls to NewRelic::Agent#record_metric.
@api public @deprecated
# File lib/new_relic/agent/method_tracer.rb, line 142 def get_stats_unscoped(name) NewRelic::Agent.instance.stats_engine.get_stats_no_scope(name) end
Trace a given block with stats and keep track of the caller. See NewRelic::Agent::MethodTracer::ClassMethods#add_method_tracer
for a description of the arguments. metric_names
is either a
single name or an array of metric names. If more than one metric is passed,
the produce_metric
option only applies to the first. The
others are always recorded. Only the first metric is pushed onto the scope
stack.
Generally you pass an array of metric names if you want to record the metric under additional categories, but generally this *should never ever be done*. Most of the time you can aggregate on the server.
@api public
# File lib/new_relic/agent/method_tracer.rb, line 69 def trace_execution_scoped(metric_names, options={}) #THREAD_LOCAL_ACCESS NewRelic::Agent::MethodTracerHelpers.trace_execution_scoped(metric_names, options) do # Using an implicit block avoids object allocation for a &block param yield end end
Trace a given block with stats assigned to the given metric_name. It does not provide scoped measurements, meaning whatever is being traced will not 'blame the Controller'–that is to say appear in the breakdown chart. This is code is inlined in add_method_tracer.
-
metric_names
is a single name or an array of names of metrics
@api public
# File lib/new_relic/agent/method_tracer.rb, line 84 def trace_execution_unscoped(metric_names, options={}) #THREAD_LOCAL_ACCESS return yield unless NewRelic::Agent.tl_is_execution_traced? t0 = Time.now begin yield ensure duration = (Time.now - t0).to_f # for some reason this is 3 usec faster than Time - Time NewRelic::Agent.instance.stats_engine.tl_record_unscoped_metrics(metric_names, duration) end end