Module: Datadog::Contrib::Rails::ActiveSupport
- Defined in:
- lib/ddtrace/contrib/rails/active_support.rb
Overview
Code used to create and handle ‘rails.cache’ spans.
Class Method Summary collapse
Class Method Details
.finish_trace_cache(payload) ⇒ Object
38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 |
# File 'lib/ddtrace/contrib/rails/active_support.rb', line 38 def self.finish_trace_cache(payload) # retrieve the tracing context and continue the trace tracing_context = payload.fetch(:tracing_context) span = tracing_context[:dd_cache_span] return unless span && !span.finished? begin # discard parameters from the cache_store configuration store, = *Array.wrap(::Rails.configuration.cache_store).flatten span.set_tag('rails.cache.backend', store) span.set_tag('rails.cache.key', payload.fetch(:key)) span.set_error(payload[:exception]) if payload[:exception] ensure span.finish() end rescue StandardError => e Datadog::Tracer.log.debug(e.) end |
.instrument ⇒ Object
9 10 11 12 |
# File 'lib/ddtrace/contrib/rails/active_support.rb', line 9 def self.instrument # patch Rails core components Datadog::RailsCachePatcher.patch_cache_store end |
.start_trace_cache(payload) ⇒ Object
14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 |
# File 'lib/ddtrace/contrib/rails/active_support.rb', line 14 def self.start_trace_cache(payload) tracer = ::Rails.configuration.datadog_trace.fetch(:tracer) tracing_context = payload.fetch(:tracing_context) # In most of the cases Rails ``fetch()`` and ``read()`` calls are nested. # This check ensures that two reads are not nested since they don't provide # interesting details. # NOTE: the ``finish_trace_cache()`` is fired but it already has a safe-guard # to avoid any kind of issue. current_span = tracer.active_span return if current_span.try('name') == 'rails.cache' && current_span.try('resource') == 'GET' && payload[:action] == 'GET' # create a new ``Span`` and add it to the tracing context service = ::Rails.configuration.datadog_trace.fetch(:default_cache_service) type = Datadog::Ext::CACHE::TYPE span = tracer.trace('rails.cache', service: service, span_type: type) span.resource = payload.fetch(:action) tracing_context[:dd_cache_span] = span rescue StandardError => e Datadog::Tracer.log.debug(e.) end |