module Datadog::Contrib::ActionView::Instrumentation::TemplateRenderer::Rails30
Legacy Rails
< 3.1 template rendering
Public Class Methods
prepended(base)
click to toggle source
rubocop:disable Metrics/MethodLength
# File lib/ddtrace/contrib/action_view/instrumentation/template_renderer.rb, line 13 def self.prepended(base) # rubocop:disable Metrics/BlockLength base.class_eval do def render_with_datadog(*args, &block) # NOTE: This check exists purely for Rails 3.0 compatibility. # The 'if' part can be removed when support for Rails 3.0 is removed. if active_datadog_span render_without_datadog(*args, &block) else datadog_tracer.trace( Ext::SPAN_RENDER_TEMPLATE, span_type: Datadog::Ext::HTTP::TEMPLATE ) do |span| with_datadog_span(span) { render_without_datadog(*args, &block) } end end end def render_template_with_datadog(*args) begin template = args[0] layout_name = args[1] # update the tracing context with computed values before the rendering template_name = template.try('identifier') template_name = Utils.normalize_template_name(template_name) if template_name active_datadog_span.resource = template_name active_datadog_span.set_tag( Ext::TAG_TEMPLATE_NAME, template_name ) end if layout_name active_datadog_span.set_tag( Ext::TAG_LAYOUT, layout_name ) end # Measure service stats Contrib::Analytics.set_measured(active_datadog_span) rescue StandardError => e Datadog.logger.debug(e.message) end # execute the original function anyway render_template_without_datadog(*args) end private attr_accessor :active_datadog_span def datadog_tracer Datadog.configuration[:action_view][:tracer] end def with_datadog_span(span) self.active_datadog_span = span yield ensure self.active_datadog_span = nil end # method aliasing to patch the class alias_method :render_without_datadog, :render alias_method :render, :render_with_datadog alias_method :render_template_without_datadog, :_render_template alias_method :_render_template, :render_template_with_datadog end end
Public Instance Methods
datadog_tracer()
click to toggle source
# File lib/ddtrace/contrib/action_view/instrumentation/template_renderer.rb, line 69 def datadog_tracer Datadog.configuration[:action_view][:tracer] end
render_template_with_datadog(*args)
click to toggle source
# File lib/ddtrace/contrib/action_view/instrumentation/template_renderer.rb, line 31 def render_template_with_datadog(*args) begin template = args[0] layout_name = args[1] # update the tracing context with computed values before the rendering template_name = template.try('identifier') template_name = Utils.normalize_template_name(template_name) if template_name active_datadog_span.resource = template_name active_datadog_span.set_tag( Ext::TAG_TEMPLATE_NAME, template_name ) end if layout_name active_datadog_span.set_tag( Ext::TAG_LAYOUT, layout_name ) end # Measure service stats Contrib::Analytics.set_measured(active_datadog_span) rescue StandardError => e Datadog.logger.debug(e.message) end # execute the original function anyway render_template_without_datadog(*args) end
render_with_datadog(*args, &block)
click to toggle source
# File lib/ddtrace/contrib/action_view/instrumentation/template_renderer.rb, line 16 def render_with_datadog(*args, &block) # NOTE: This check exists purely for Rails 3.0 compatibility. # The 'if' part can be removed when support for Rails 3.0 is removed. if active_datadog_span render_without_datadog(*args, &block) else datadog_tracer.trace( Ext::SPAN_RENDER_TEMPLATE, span_type: Datadog::Ext::HTTP::TEMPLATE ) do |span| with_datadog_span(span) { render_without_datadog(*args, &block) } end end end
with_datadog_span(span) { || ... }
click to toggle source
# File lib/ddtrace/contrib/action_view/instrumentation/template_renderer.rb, line 73 def with_datadog_span(span) self.active_datadog_span = span yield ensure self.active_datadog_span = nil end