class Sidekiq::Tracer::ClientMiddleware

Attributes

active_span[R]
tracer[R]

Public Class Methods

new(tracer:, active_span:) click to toggle source
# File lib/sidekiq/tracer/client_middleware.rb, line 10
def initialize(tracer:, active_span:)
  @tracer = tracer
  @active_span = active_span
end

Public Instance Methods

call(_worker_class, job, _queue, _redis_pool) { || ... } click to toggle source
# File lib/sidekiq/tracer/client_middleware.rb, line 15
def call(_worker_class, job, _queue, _redis_pool)
  span = build_span(job)

  inject(span, job)

  yield
rescue StandardError => e
  tag_errors(span, e) if span
  raise
ensure
  span&.finish
end

Private Instance Methods

build_span(job) click to toggle source
# File lib/sidekiq/tracer/client_middleware.rb, line 30
def build_span(job)
  tracer.start_span(operation_name(job),
                    child_of: active_span.respond_to?(:call) ? active_span.call : active_span,
                    tags: tags(job, "producer"))
end
inject(span, job) click to toggle source
# File lib/sidekiq/tracer/client_middleware.rb, line 41
def inject(span, job)
  carrier = {}
  tracer.inject(span.context, OpenTracing::FORMAT_TEXT_MAP, carrier)
  job[TRACE_CONTEXT_KEY] = carrier
end
tag_errors(span, error) click to toggle source
# File lib/sidekiq/tracer/client_middleware.rb, line 36
def tag_errors(span, error)
  span.set_tag("error", true)
  span.log(event: "error", 'error.object': error)
end