Module: Datadog::Contrib::Rails::Framework
- Defined in:
- lib/ddtrace/contrib/rails/framework.rb
Overview
TODO: write docs
Constant Summary collapse
- DEFAULT_CONFIG =
the default configuration
{ enabled: true, auto_instrument: true, auto_instrument_redis: true, 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
92 93 94 95 96 97 98 99 100 101 102 103 |
# File 'lib/ddtrace/contrib/rails/framework.rb', line 92 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.') Datadog::Contrib::Rails::ActionController.instrument() Datadog::Contrib::Rails::ActionView.instrument() Datadog::Contrib::Rails::ActiveRecord.instrument() if defined?(::ActiveRecord) Datadog::Contrib::Rails::ActiveSupport.instrument() # by default, Rails 3 doesn't instrument the cache system return unless ::Rails::VERSION::MAJOR.to_i == 3 ::ActiveSupport::Cache::Store.instrument = true end |
.auto_instrument_redis ⇒ Object
81 82 83 84 85 86 87 88 89 |
# File 'lib/ddtrace/contrib/rails/framework.rb', line 81 def self.auto_instrument_redis Datadog::Tracer.log.debug('instrumenting redis') return unless (defined? ::Rails.cache) && ::Rails.cache.respond_to?(:data) Datadog::Tracer.log.debug('redis cache exists') pin = Datadog::Pin.get_from(::Rails.cache.data) return unless pin Datadog::Tracer.log.debug('redis cache pin is set') pin.tracer = nil unless ::Rails.configuration.datadog_trace[:auto_instrument_redis] end |
.configure(config) ⇒ Object
configure Datadog settings
32 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 |
# File 'lib/ddtrace/contrib/rails/framework.rb', line 32 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 ) # set default database service details and store it in the configuration if defined?(::ActiveRecord) begin 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.info("cannot configuring database service (#{e}), skipping activerecord instrumentation") end end # update global configurations ::Rails.configuration.datadog_trace = datadog_config end |