Module: NewRelic::Control::Instrumentation
- Included in:
- NewRelic::Control
- Defined in:
- lib/new_relic/control/instrumentation.rb
Overview
Contains methods that relate to adding and executing files that contain instrumentation for the Ruby Agent
Instance Method Summary collapse
-
#add_instrumentation(pattern) ⇒ Object
Add instrumentation.
-
#install_instrumentation ⇒ Object
Signals the agent that it’s time to actually load the instrumentation files.
-
#install_shim ⇒ Object
Install stubs to the proper location so the app code will not fail if the agent is not running.
-
#load_instrumentation_files(pattern) ⇒ Object
Adds a list of files in Dir.glob format (e.g. ‘/app/foo/*/_instrumentation.rb’) This requires the files within a rescue block, so that any errors within instrumentation files do not affect the overall agent or application in which it runs.
-
#load_samplers ⇒ Object
adds samplers to the stats engine so that they run every minute.
Instance Method Details
#add_instrumentation(pattern) ⇒ Object
Add instrumentation. Don’t call this directly. Use NewRelic::Agent#add_instrumentation. This will load the file synchronously if we’ve already loaded the default instrumentation, otherwise instrumentation files specified here will be deferred until all instrumentation is run
This happens after the agent has loaded and all dependencies are ready to be instrumented
42 43 44 45 46 47 48 |
# File 'lib/new_relic/control/instrumentation.rb', line 42 def add_instrumentation pattern if @instrumented load_instrumentation_files pattern else @instrumentation_files << pattern end end |
#install_instrumentation ⇒ Object
Signals the agent that it’s time to actually load the instrumentation files. May be overridden by subclasses
52 53 54 |
# File 'lib/new_relic/control/instrumentation.rb', line 52 def install_instrumentation _install_instrumentation end |
#install_shim ⇒ Object
Install stubs to the proper location so the app code will not fail if the agent is not running.
29 30 31 32 33 |
# File 'lib/new_relic/control/instrumentation.rb', line 29 def install_shim # Once we install instrumentation, you can't undo that by installing the shim. raise "Cannot install the Agent shim after instrumentation has already been installed!" if @instrumented NewRelic::Agent.agent = NewRelic::Agent::ShimAgent.instance end |
#load_instrumentation_files(pattern) ⇒ Object
Adds a list of files in Dir.glob format (e.g. ‘/app/foo/*/_instrumentation.rb’) This requires the files within a rescue block, so that any errors within instrumentation files do not affect the overall agent or application in which it runs.
Logs at debug level for each file loaded, and logs errors in file loading at error level
15 16 17 18 19 20 21 22 23 24 25 |
# File 'lib/new_relic/control/instrumentation.rb', line 15 def load_instrumentation_files pattern Dir.glob(pattern) do |file| begin log.debug "Processing instrumentation file '#{file}'" require file.to_s rescue => e log.error "Error loading instrumentation file '#{file}': #{e}" log.debug e.backtrace.join("\n") end end end |
#load_samplers ⇒ Object
adds samplers to the stats engine so that they run every minute. This is dynamically recognized by any class that subclasses NewRelic::Agent::Sampler
59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 |
# File 'lib/new_relic/control/instrumentation.rb', line 59 def load_samplers agent = NewRelic::Agent.instance NewRelic::Agent::Sampler.sampler_classes.each do | subclass | begin log.debug "#{subclass.name} not supported on this platform." and next if not subclass.supported_on_this_platform? sampler = subclass.new if subclass.use_harvest_sampler? agent.stats_engine.add_harvest_sampler sampler log.debug "Registered #{subclass.name} for harvest time sampling" else agent.stats_engine.add_sampler sampler log.debug "Registered #{subclass.name} for periodic sampling" end rescue NewRelic::Agent::Sampler::Unsupported => e log.info "#{subclass} sampler not available: #{e}" rescue => e log.error "Error registering sampler: #{e}, #{e.backtrace.join("\n")}" end end end |