class ActiveSupport::Cache::Tracer::Subscriber

Attributes

active_span[R]
event[R]
operation_name[R]
tracer[R]

Public Class Methods

new(tracer: OpenTracing.global_tracer, active_span: nil, event:) click to toggle source
# File lib/rails/active_support/cache/subscriber.rb, line 7
def initialize(tracer: OpenTracing.global_tracer, active_span: nil, event:)
  @tracer = tracer
  @active_span = active_span
  @event = event
  @operation_name = "cache.#{event}"
end

Public Instance Methods

call(*args) click to toggle source

For compatibility with Rails 3.2

# File lib/rails/active_support/cache/subscriber.rb, line 15
def call(*args)
  _, start, finish, _, payload = *args

  span = Tracer.start_span(operation_name,
                            event: event,
                            tracer: tracer,
                            active_span: active_span,
                            start_time: start,
                            **payload)

  if payload[:exception]
    Rails::Tracer::SpanHelpers.set_error(span, payload[:exception_object] || payload[:exception])
  end

  span.finish(end_time: finish)
end
finish(name, _, payload) click to toggle source
# File lib/rails/active_support/cache/subscriber.rb, line 43
def finish(name, _, payload)
  span = payload[:__OT_SPAN__]
  return unless span

  span.set_tag('cache.key', payload.fetch(:key, 'unknown'))

  if event == 'read'
    span.set_tag('cache.hit', payload.fetch(:hit, false))
  end

  if payload[:exception]
    Rails::Tracer::SpanHelpers.set_error(span, payload[:exception_object] || payload[:exception])
  end

  span.finish
end
start(name, _, payload) click to toggle source
# File lib/rails/active_support/cache/subscriber.rb, line 32
def start(name, _, payload)
  span = tracer.start_span(operation_name,
                           child_of: active_span.respond_to?(:call) ? active_span.call : active_span,
                           tags: {
                            'component' => 'ActiveSupport::Cache',
                            'span.kind' => 'client'
                           })

  payload[:__OT_SPAN__] = span
end