Module: Datadog::Contrib::ActiveSupport::Cache::Instrumentation
- Defined in:
- lib/ddtrace/contrib/active_support/cache/instrumentation.rb
Overview
Defines instrumentation for ActiveSupport caching rubocop:disable Lint/RescueException
Defined Under Namespace
Modules: Delete, Fetch, Read, Write
Class Method Summary collapse
Class Method Details
.finish_trace_cache(payload) ⇒ Object
37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 |
# File 'lib/ddtrace/contrib/active_support/cache/instrumentation.rb', line 37 def 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 if defined?(::Rails) store, = *Array.wrap(::Rails.configuration.cache_store).flatten span.set_tag(Ext::TAG_CACHE_BACKEND, store) end normalized_key = ::ActiveSupport::Cache.(payload.fetch(:key)) cache_key = Datadog::Utils.truncate(normalized_key, Ext::QUANTIZE_CACHE_MAX_KEY_SIZE) span.set_tag(Ext::TAG_CACHE_KEY, cache_key) span.set_error(payload[:exception]) if payload[:exception] ensure span.finish end rescue StandardError => e Datadog::Tracer.log.debug(e.) end |
.start_trace_cache(payload) ⇒ Object
12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 |
# File 'lib/ddtrace/contrib/active_support/cache/instrumentation.rb', line 12 def start_trace_cache(payload) tracer = Datadog.configuration[:active_support][:tracer] # 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 payload[:action] == Ext::RESOURCE_CACHE_GET && current_span.try(:name) == Ext::SPAN_CACHE && current_span.try(:resource) == Ext::RESOURCE_CACHE_GET tracing_context = payload.fetch(:tracing_context) # create a new ``Span`` and add it to the tracing context service = Datadog.configuration[:active_support][:cache_service] type = Ext::SPAN_TYPE_CACHE span = tracer.trace(Ext::SPAN_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 |