Class: NewRelic::Control::Frameworks::Rails
- Inherits:
-
Ruby
- Object
- NewRelic::Control
- Ruby
- NewRelic::Control::Frameworks::Rails
- Defined in:
- lib/new_relic/control/frameworks/rails.rb
Overview
Control subclass instantiated when Rails is detected. Contains Rails specific configuration, instrumentation, environment values, etc.
Direct Known Subclasses
Instance Attribute Summary
Attributes included from InstanceMethods
Attributes included from LoggingMethods
Instance Method Summary collapse
- #env ⇒ Object
-
#init_config(options = {}) ⇒ Object
In versions of Rails prior to 2.0, the rails config was only available to the init.rb, so it had to be passed on from there.
- #install_browser_monitoring(config) ⇒ Object
- #install_developer_mode(rails_config) ⇒ Object
- #log!(msg, level = :info) ⇒ Object
- #logger ⇒ Object
- #rails_version ⇒ Object
- #root ⇒ Object
- #to_stdout(message) ⇒ Object
Methods inherited from Ruby
Methods included from ClassMethods
#instance, #load_framework_class, #load_test_framework, #local_env, #new_instance, #newrelic_root
Methods included from InstanceMethods
#agent_enabled?, #app, #init_plugin, #start_agent, #to_s
Methods included from LanguageSupport::Control
Methods included from LoggingMethods
#find_or_create_file_path, #log, #log_file_name, #log_path, #log_to_stdout?, #set_log_format!, #set_log_level!, #setup_log, #should_log?
Methods included from Instrumentation
#add_instrumentation, #install_instrumentation, #load_instrumentation_files, #load_samplers
Methods included from ServerMethods
#api_server, #cert_file_path, #convert_to_ip_address, #http_connection, #proxy_server, #resolve_ip_address, #server, #server_from_host
Methods included from Configuration
#[], #[]=, #apdex_t, #app_names, #browser_monitoring_auto_instrument?, #capture_params, #developer_mode?, #disable_backtrace_cleanup?, #disable_serialization=, #disable_serialization?, #dispatcher, #dispatcher_instance_id, #fetch, #has_slow_sql_config?, #license_key, #log_file_path, #merge_defaults, #merge_options, #merge_server_side_config, #monitor_mode?, #multi_threaded?, #post_size_limit, #remove_server_controlled_configs, #send_data_on_exit, #settings, #sync_startup, #use_ssl?, #use_textmate?, #validate_seed, #validate_token, #verify_certificate?
Methods included from Profiling
#profiling=, #profiling?, #profiling_available?
Instance Method Details
#env ⇒ Object
10 11 12 |
# File 'lib/new_relic/control/frameworks/rails.rb', line 10 def env @env ||= RAILS_ENV.dup end |
#init_config(options = {}) ⇒ Object
In versions of Rails prior to 2.0, the rails config was only available to the init.rb, so it had to be passed on from there. This is a best effort to find a config and use that.
27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 |
# File 'lib/new_relic/control/frameworks/rails.rb', line 27 def init_config(={}) rails_config = [:config] if !rails_config && defined?(::Rails) && ::Rails.respond_to?(:configuration) rails_config = ::Rails.configuration end # Install the dependency detection, if rails_config && ::Rails.configuration.respond_to?(:after_initialize) rails_config.after_initialize do # This will insure we load all the instrumentation as late as possible. If the agent # is not enabled, it will load a limited amount of instrumentation. See # delayed_job_injection.rb DependencyDetection.detect! end end if !agent_enabled? # Might not be running if it does not think mongrel, thin, passenger, etc # is running, if it things it's a rake task, or if the agent_enabled is false. log! "New Relic Agent not running." else log! "Starting the New Relic Agent." install_developer_mode rails_config if developer_mode? install_browser_monitoring(rails_config) end end |
#install_browser_monitoring(config) ⇒ Object
52 53 54 55 56 57 58 59 60 61 62 63 |
# File 'lib/new_relic/control/frameworks/rails.rb', line 52 def install_browser_monitoring(config) return if @browser_monitoring_installed @browser_monitoring_installed = true return if config.nil? || !config.respond_to?(:middleware) || ! browser_monitoring_auto_instrument? begin require 'new_relic/rack/browser_monitoring' config.middleware.use NewRelic::Rack::BrowserMonitoring log!("Installed New Relic Browser Monitoring middleware", :info) rescue => e log!("Error installing New Relic Browser Monitoring middleware: #{e.inspect}", :error) end end |
#install_developer_mode(rails_config) ⇒ Object
65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 |
# File 'lib/new_relic/control/frameworks/rails.rb', line 65 def install_developer_mode(rails_config) return if @installed @installed = true if rails_config && rails_config.respond_to?(:middleware) begin require 'new_relic/rack/developer_mode' rails_config.middleware.use NewRelic::Rack::DeveloperMode # inform user that the dev edition is available if we are running inside # a webserver process if @local_env.dispatcher_instance_id port = @local_env.dispatcher_instance_id.to_s =~ /^\d+/ ? ":#{local_env.dispatcher_instance_id}" : ":port" log!("NewRelic Agent Developer Mode enabled.") log!("To view performance information, go to http://localhost#{port}/newrelic") end rescue => e log!("Error installing New Relic Developer Mode: #{e.inspect}", :error) end elsif rails_config log!("Developer mode not available for Rails versions prior to 2.2", :warn) end end |
#log!(msg, level = :info) ⇒ Object
88 89 90 91 92 93 94 95 96 97 |
# File 'lib/new_relic/control/frameworks/rails.rb', line 88 def log!(msg, level=:info) if should_log? logger = ::Rails.respond_to?(:logger) ? ::Rails.logger : ::RAILS_DEFAULT_LOGGER logger.send(level, msg) else super end rescue => e super end |
#logger ⇒ Object
20 21 22 |
# File 'lib/new_relic/control/frameworks/rails.rb', line 20 def logger ::RAILS_DEFAULT_LOGGER end |
#rails_version ⇒ Object
106 107 108 |
# File 'lib/new_relic/control/frameworks/rails.rb', line 106 def rails_version @rails_version ||= NewRelic::VersionNumber.new(::Rails::VERSION::STRING) end |
#root ⇒ Object
13 14 15 16 17 18 19 |
# File 'lib/new_relic/control/frameworks/rails.rb', line 13 def root if defined?(RAILS_ROOT) && RAILS_ROOT.to_s != '' RAILS_ROOT.to_s else super end end |
#to_stdout(message) ⇒ Object
99 100 101 102 103 104 |
# File 'lib/new_relic/control/frameworks/rails.rb', line 99 def to_stdout() logger = ::Rails.respond_to?(:logger) ? ::Rails.logger : ::RAILS_DEFAULT_LOGGER logger.info() rescue => e super end |