Sha256: 2ece333e626c414f937d32be43ffb2c81d79e387eaf420e038513897262eeaa9

Contents?: true

Size: 1.11 KB

Versions: 1

Compression:

Stored size: 1.11 KB

Contents

# frozen_string_literal: true

module Sidekiq
  module Tracer
    class ServerMiddleware
      include Commons

      attr_reader :tracer, :active_span

      def initialize(tracer:, active_span:)
        @tracer = tracer
        @active_span = active_span
      end

      def call(_worker, job, _queue)
        span = build_span(job)

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

      private

      def build_span(job)
        parent_span_context = extract(job)

        follows_from = OpenTracing::Reference.follows_from(parent_span_context)

        tracer.start_span(operation_name(job),
                          references: [follows_from],
                          tags: tags(job, "consumer"))
      end

      def tag_errors(span, error)
        span.set_tag("error", true)
        span.log(event: "error", 'error.object': error)
      end

      def extract(job)
        carrier = job[TRACE_CONTEXT_KEY]
        return unless carrier

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

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
sidekiq-instrumentation-1.1.0 lib/sidekiq/tracer/server_middleware.rb