module Mmtrix::Agent::Autostart
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 MMTRIX_AGENT_ENABLED environment variable or agent_enabled key in mmtrix.yml
Public Instance Methods
The constants, executables (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’
# File lib/mmtrix/agent/autostart.rb, line 26 def agent_should_start? !blacklisted_constants? && !blacklisted_executables? && !in_blacklisted_rake_task? end
# File lib/mmtrix/agent/autostart.rb, line 50 def blacklisted?(value, &block) value.split(/\s*,\s*/).any?(&block) end
# File lib/mmtrix/agent/autostart.rb, line 32 def blacklisted_constants? blacklisted?(Mmtrix::Agent.config[:'autostart.blacklisted_constants']) do |name| constant_is_defined?(name) end end
# File lib/mmtrix/agent/autostart.rb, line 38 def blacklisted_executables? blacklisted?(Mmtrix::Agent.config[:'autostart.blacklisted_executables']) do |bin| File.basename($0) == bin end end
Lookup whether namespaced constants (e.g. ::Foo::Bar::Baz) are in the environment.
# File lib/mmtrix/agent/autostart.rb, line 46 def constant_is_defined?(const_name) !!::Mmtrix::LanguageSupport.constantize(const_name) end
# File lib/mmtrix/agent/autostart.rb, line 54 def in_blacklisted_rake_task? tasks = begin ::Rake.application.top_level_tasks rescue => e ::Mmtrix::Agent.logger.debug("Not in Rake environment so skipping blacklisted_rake_tasks check: #{e}") [] end !(tasks & ::Mmtrix::Agent.config[:'autostart.blacklisted_rake_tasks'].split(/\s*,\s*/)).empty? end