Class: OneApm::Probe::Frameworks::Rails

Inherits:
Ruby show all
Defined in:
lib/one_apm/frameworks/rails.rb

Direct Known Subclasses

Rails3

Instance Attribute Summary

Attributes included from InstanceMethods

#local_env

Instance Method Summary collapse

Methods included from OneApm::Probe::FrameworkLoader

#init, #instance, #load_framework_class, #load_test_framework, #local_env, #new_instance, #oneapm_root, #reset

Methods included from InstanceMethods

#app, #configure_agent, #dispatcher, #framework, #init_plugin, #oneapm_root, #settings, #start_agent

Methods included from Instrumentation

#add_instrumentation, #detect_dependencies, #install_instrumentation, #load_instrumentation_files, #require_instrumentation

Instance Method Details

#agent_hooks_installedObject



53
54
55
# File 'lib/one_apm/frameworks/rails.rb', line 53

def agent_hooks_installed
  @@agent_hooks_installed ||= false
end

#browser_monitoring_installedObject



57
58
59
# File 'lib/one_apm/frameworks/rails.rb', line 57

def browser_monitoring_installed
  @@browser_monitoring_installed ||= false
end

#developer_mode_installedObject



61
62
63
# File 'lib/one_apm/frameworks/rails.rb', line 61

def developer_mode_installed
  @@developer_mode_installed ||= false
end

#envObject



10
11
12
# File 'lib/one_apm/frameworks/rails.rb', line 10

def env
  @env ||= RAILS_ENV.dup
end

#init_config(options = {}) ⇒ Object



35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
# File 'lib/one_apm/frameworks/rails.rb', line 35

def init_config(options = {})
  @config = options[:config]

  if rails_config && ::Rails.configuration.respond_to?(:after_initialize)
    rails_config.after_initialize do
      LibraryDetection.detect!
    end
  end

  if !Manager.config[:agent_enabled]
    OneApm::Manager.logger.info("OneApm Agent not running.")
  else
    install_developer_mode(rails_config) if Manager.config[:developer_mode]
    install_browser_monitoring(rails_config)
    install_agent_hooks(rails_config)
  end
end

#install_agent_hooks(config) ⇒ Object



65
66
67
68
69
70
71
72
73
74
75
76
77
# File 'lib/one_apm/frameworks/rails.rb', line 65

def install_agent_hooks(config)
  return if agent_hooks_installed
  @@agent_hooks_installed = true
  return if config.nil? || !config.respond_to?(:middleware)
  begin
    require 'one_apm/rack/middleware_hooks'
    return unless OneApm::Rack::MiddlewareHooks.needed?
    config.middleware.use OneApm::Rack::MiddlewareHooks
    OneApm::Manager.logger.debug("Installed OneApm Agent Hooks middleware")
  rescue => e
    OneApm::Manager.logger.warn("Error installing OneApm Agent Hooks middleware", e)
  end
end

#install_browser_monitoring(config) ⇒ Object



79
80
81
82
83
84
85
86
87
88
89
90
# File 'lib/one_apm/frameworks/rails.rb', line 79

def install_browser_monitoring(config)
  return if browser_monitoring_installed
  @@browser_monitoring_installed = true
  return if config.nil? || !config.respond_to?(:middleware) || !Manager.config[:'browser_monitoring.auto_instrument']
  begin
    require 'one_apm/rack/browser_monitoring'
    config.middleware.use OneApm::Rack::BrowserMonitoring
    OneApm::Manager.logger.debug("Installed OneApm Browser Monitoring middleware")
  rescue => e
    OneApm::Manager.logger.warn("Error installing OneApm Browser Monitoring middleware", e)
  end
end

#install_developer_mode(rails_config) ⇒ Object



92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
# File 'lib/one_apm/frameworks/rails.rb', line 92

def install_developer_mode(rails_config)
  return if env != "development"
  return if developer_mode_installed
  @@developer_mode_installed = true
  if rails_config && rails_config.respond_to?(:middleware)
    begin
      require 'one_apm/rack/developer_mode'
      rails_config.middleware.use OneApm::Rack::DeveloperMode
      OneApm::Manager.logger.info("Developer Mode enabled.")
    rescue => e
      ::OneApm::Manager.logger.warn("Error installing OneAPM Developer Mode", e)
    end
  elsif rails_config
    ::OneApm::Manager.logger.warn("Developer mode not available for Rails versions prior to 2.2")
  end
end

#rails_configObject



27
28
29
30
31
32
33
# File 'lib/one_apm/frameworks/rails.rb', line 27

def rails_config
  if defined?(::Rails) && ::Rails.respond_to?(:configuration)
    ::Rails.configuration
  else
    @config
  end
end

#rails_rootObject



23
24
25
# File 'lib/one_apm/frameworks/rails.rb', line 23

def rails_root
  RAILS_ROOT if defined?(RAILS_ROOT)
end

#rootObject



14
15
16
17
18
19
20
21
# File 'lib/one_apm/frameworks/rails.rb', line 14

def root
  root = rails_root.to_s
  if !root.empty?
    root
  else
    super
  end
end