Module: NewRelic::Agent::Autostart

Extended by:
Autostart
Included in:
Autostart
Defined in:
lib/new_relic/agent/autostart.rb

Overview

A singleton responsible for determining if the agent should start monitoring.

If the agent is in a monitored environment (e.g. production) it will attempt to avoid starting at “inapproriate” times, for example in an IRB session. On Heroku, logs typically go to STDOUT so agent logs can spam the console during interactive sessions.

It should be possible to override Autostart logic with an explicit configuration, for example the NEWRELIC_ENABLE environment variable or agent_enabled key in newrelic.yml

Instance Method Summary collapse

Instance Method Details

#agent_should_start?Boolean

The constants, execuatables (i.e. $0) and rake tasks used can be configured with the config keys ‘autostart.blacklisted_constants’, ‘autostart.blacklisted_executables’ and ‘autostart.blacklisted_rake_tasks’

Returns:

  • (Boolean)


26
27
28
29
30
31
32
# File 'lib/new_relic/agent/autostart.rb', line 26

def agent_should_start?
    !::NewRelic::Agent.config['autostart.blacklisted_constants'] \
      .split(/\s*,\s*/).any?{ |name| constant_is_defined?(name) } &&
    !::NewRelic::Agent.config['autostart.blacklisted_executables'] \
      .split(/\s*,\s*/).any?{ |bin| File.basename($0) == bin } &&
    !in_blacklisted_rake_task?
end

#constant_is_defined?(const_name) ⇒ Boolean

Lookup whether namespaced constants (e.g. ::Foo::Bar::Baz) are in the environment.

Returns:

  • (Boolean)


36
37
38
39
40
41
42
43
44
# File 'lib/new_relic/agent/autostart.rb', line 36

def constant_is_defined?(const_name)
  const_name.to_s.sub(/\A::/,'').split('::').inject(Object) do |namespace, name|
    begin
      namespace.const_get(name)
    rescue NameError
      false
    end
  end
end

#in_blacklisted_rake_task?Boolean

Returns:

  • (Boolean)


46
47
48
49
50
51
52
53
54
# File 'lib/new_relic/agent/autostart.rb', line 46

def in_blacklisted_rake_task?
  tasks = begin
      ::Rake.application.top_level_tasks
    rescue => e
      ::NewRelic::Agent.logger.debug("Not in Rake environment so skipping blacklisted_rake_tasks check: #{e}")
      []
    end
  !(tasks & ::NewRelic::Agent.config['autostart.blacklisted_rake_tasks'].split(/\s*,\s*/)).empty?
end