module Datadog::Contrib::Rails::Framework
Rails
framework code, used to essentially:
-
handle configuration entries which are specific to
Datadog
tracing -
instrument parts of the framework when needed
Public Class Methods
activate_action_cable!(datadog_config, rails_config)
click to toggle source
# File lib/ddtrace/contrib/rails/framework.rb, line 82 def self.activate_action_cable!(datadog_config, rails_config) return unless defined?(::ActionCable) datadog_config.use( :action_cable, service_name: "#{rails_config[:service_name]}-#{Contrib::ActionCable::Ext::SERVICE_NAME}" ) end
activate_action_pack!(datadog_config, rails_config)
click to toggle source
# File lib/ddtrace/contrib/rails/framework.rb, line 91 def self.activate_action_pack!(datadog_config, rails_config) return unless defined?(::ActionPack) # TODO: This is configuring ActionPack but not patching. It will queue ActionPack # for patching, but patching won't take place until Datadog.configure completes. # Should we manually patch here? datadog_config.use( :action_pack, service_name: rails_config[:service_name] ) end
activate_action_view!(datadog_config, rails_config)
click to toggle source
# File lib/ddtrace/contrib/rails/framework.rb, line 104 def self.activate_action_view!(datadog_config, rails_config) return unless defined?(::ActionView) datadog_config.use( :action_view, service_name: rails_config[:service_name] ) end
activate_active_record!(datadog_config, rails_config)
click to toggle source
# File lib/ddtrace/contrib/rails/framework.rb, line 113 def self.activate_active_record!(datadog_config, rails_config) return unless defined?(::ActiveRecord) datadog_config.use( :active_record, service_name: rails_config[:database_service] ) end
activate_active_support!(datadog_config, rails_config)
click to toggle source
# File lib/ddtrace/contrib/rails/framework.rb, line 73 def self.activate_active_support!(datadog_config, rails_config) return unless defined?(::ActiveSupport) datadog_config.use( :active_support, cache_service: rails_config[:cache_service] ) end
activate_rack!(datadog_config, rails_config)
click to toggle source
# File lib/ddtrace/contrib/rails/framework.rb, line 63 def self.activate_rack!(datadog_config, rails_config) datadog_config.use( :rack, application: ::Rails.application, service_name: rails_config[:service_name], middleware_names: rails_config[:middleware_names], distributed_tracing: rails_config[:distributed_tracing] ) end
config_with_defaults(datadog_config)
click to toggle source
# File lib/ddtrace/contrib/rails/framework.rb, line 52 def self.config_with_defaults(datadog_config) # We set defaults here instead of in the patcher because we need to wait # for the Rails application to be fully initialized. datadog_config[:rails].tap do |config| config[:service_name] ||= (Datadog.configuration.service || Utils.app_name) config[:database_service] ||= "#{config[:service_name]}-#{Contrib::ActiveRecord::Utils.adapter_name}" config[:controller_service] ||= config[:service_name] config[:cache_service] ||= "#{config[:service_name]}-cache" end end
setup()
click to toggle source
After the Rails
application finishes initializing, we configure the Rails
integration and all its sub-components with the application information available. We do this after the initialization because not all the information we require is available before then.
# File lib/ddtrace/contrib/rails/framework.rb, line 27 def self.setup # NOTE: #configure has the side effect of rebuilding trace components. # During a typical Rails application lifecycle, we will see trace # components initialized twice because of this. This is necessary # because key configuration is not available until after the Rails # application has fully loaded, and some of this configuration is # used to reconfigure tracer components with Rails-sourced defaults. # This is a trade-off we take to get nice defaults. Datadog.configure do |datadog_config| rails_config = config_with_defaults(datadog_config) # By default, default service would be guessed from the script # being executed, but here we know better, get it from Rails config. # Don't set this if service has been explicitly provided by the user. datadog_config.service ||= rails_config[:service_name] activate_rack!(datadog_config, rails_config) activate_action_cable!(datadog_config, rails_config) activate_active_support!(datadog_config, rails_config) activate_action_pack!(datadog_config, rails_config) activate_action_view!(datadog_config, rails_config) activate_active_record!(datadog_config, rails_config) end end