class Sidekiq::Tracer::ServerMiddleware

Attributes

opts[R]
tracer[R]

Public Class Methods

new(tracer: nil, opts: {}) click to toggle source
# File lib/sidekiq/tracer/server_middleware.rb, line 9
def initialize(tracer: nil, opts: {})
  @tracer = tracer
  @opts = opts
end

Public Instance Methods

call(worker, job, queue) { || ... } click to toggle source
# File lib/sidekiq/tracer/server_middleware.rb, line 14
def call(worker, job, queue)
  parent_span_context = extract(job) if opts.fetch(:propagate_context, true)

  scope = tracer.start_active_span(
    operation_name(job),
    child_of: parent_span_context,
    tags: tags(job, 'server')
  )

  yield
rescue Exception => e
  if scope
    scope.span.set_tag('error', true)
    scope.span.log_kv(event: 'error', :'error.object' => e)
  end
  raise
ensure
  scope.close if scope
end

Private Instance Methods

extract(job) click to toggle source
# File lib/sidekiq/tracer/server_middleware.rb, line 36
def extract(job)
  carrier = job[TRACE_CONTEXT_KEY]
  return unless carrier

  tracer.extract(OpenTracing::FORMAT_TEXT_MAP, carrier)
end