class Sidekiq::Tracer::ServerMiddleware

Attributes

active_span[R]
after_trace[R]
tracer[R]

Public Class Methods

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

Public Instance Methods

call(_worker, job, _queue) { || ... } click to toggle source

rubocop:disable Metrics/MethodLength

# File lib/sidekiq/tracer/server_middleware.rb, line 17
def call(_worker, job, _queue)
  parent_span_context = extract(job)

  follows_from = OpenTracing::Reference.follows_from(parent_span_context)

  tracer.start_active_span(operation_name(job),
                           references: [follows_from],
                           ignore_active_scope: true,
                           tags: tags(job, "consumer")) do |scope|
    begin
      yield
    rescue StandardError => e
      tag_errors(scope.span, e) if scope.span
      raise
    ensure
      after_trace&.call(scope.span) if scope.span
    end
  end
end

Private Instance Methods

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

  tracer.extract(OpenTracing::FORMAT_TEXT_MAP, carrier)
end
tag_errors(span, error) click to toggle source

rubocop:enable Metrics/MethodLength

# File lib/sidekiq/tracer/server_middleware.rb, line 40
def tag_errors(span, error)
  span.set_tag("error", true)
  span.log(event: "error", 'error.object': error)
end