Module: Datadog::Contrib::Rails::Framework
- Defined in:
- lib/ddtrace/contrib/rails/framework.rb
Overview
TODO: write docs
Constant Summary collapse
- DEFAULT_CONFIG =
default configurations for the Rails integration; by default the Datadog.tracer is enabled, while the Rails auto instrumentation is kept disabled.
{ enabled: true, auto_instrument: false, auto_instrument_redis: false, default_service: 'rails-app', default_cache_service: 'rails-cache', template_base_path: 'views/', tracer: Datadog.tracer, debug: false, trace_agent_hostname: Datadog::Writer::HOSTNAME, trace_agent_port: Datadog::Writer::PORT }.freeze
Class Method Summary collapse
-
.auto_instrument ⇒ Object
automatically instrument all Rails component.
- .auto_instrument_redis ⇒ Object
-
.configure(config) ⇒ Object
configure Datadog settings.
Class Method Details
.auto_instrument ⇒ Object
automatically instrument all Rails component
95 96 97 98 99 100 101 102 103 104 |
# File 'lib/ddtrace/contrib/rails/framework.rb', line 95 def self.auto_instrument return unless ::Rails.configuration.datadog_trace[:auto_instrument] Datadog::Tracer.log.info('Detected Rails >= 3.x. Enabling auto-instrumentation for core components') # instrumenting Rails framework Datadog::Contrib::Rails::ActionController.instrument() Datadog::Contrib::Rails::ActionView.instrument() Datadog::Contrib::Rails::ActiveRecord.instrument() Datadog::Contrib::Rails::ActiveSupport.instrument() end |
.auto_instrument_redis ⇒ Object
82 83 84 85 86 87 88 89 90 91 92 |
# File 'lib/ddtrace/contrib/rails/framework.rb', line 82 def self.auto_instrument_redis # configure Redis PIN return unless (defined? ::Rails.cache) && ::Rails.cache.respond_to?(:data) pin = Datadog::Pin.get_from(::Rails.cache.data) return unless pin # enable Redis instrumentation if activated pin.tracer = nil unless ::Rails.configuration.datadog_trace[:auto_instrument_redis] return unless pin.tracer Datadog::Tracer.log.debug("'redis' module found, Datadog 'redis' integration is available") end |
.configure(config) ⇒ Object
configure Datadog settings
33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 |
# File 'lib/ddtrace/contrib/rails/framework.rb', line 33 def self.configure(config) # tracer defaults # merge default configurations with users settings user_config = config[:config].datadog_trace rescue {} datadog_config = DEFAULT_CONFIG.merge(user_config) datadog_config[:tracer].enabled = datadog_config[:enabled] # set debug logging Datadog::Tracer.debug_logging = datadog_config[:debug] # set the address of the trace agent datadog_config[:tracer].configure( hostname: datadog_config[:trace_agent_hostname], port: datadog_config[:trace_agent_port] ) # set default service details datadog_config[:tracer].set_service_info( datadog_config[:default_service], 'rails', Datadog::Ext::AppTypes::WEB ) datadog_config[:tracer].set_service_info( datadog_config[:default_cache_service], 'rails', Datadog::Ext::AppTypes::CACHE ) if defined?(::ActiveRecord) begin # set default database service details and store it in the configuration conn_cfg = ::ActiveRecord::Base.connection_config() adapter_name = Datadog::Contrib::Rails::Utils.normalize_vendor(conn_cfg[:adapter]) database_service = datadog_config.fetch(:default_database_service, adapter_name) datadog_config[:default_database_service] = database_service datadog_config[:tracer].set_service_info( database_service, adapter_name, Datadog::Ext::AppTypes::DB ) rescue StandardError => e Datadog::Tracer.log.warn("Unable to get database config (#{e}), skipping ActiveRecord instrumentation") end end # update global configurations ::Rails.configuration.datadog_trace = datadog_config end |