Sha256: dcff238af10c95b056b36dac63b48286f3518134cf1f4214fba986ac487f9c56

Contents?: true

Size: 1.67 KB

Versions: 16

Compression:

Stored size: 1.67 KB

Contents

# frozen_string_literal: true

require 'json'

module OpenTracing
  module Instrumentation
    module Sidekiq
      # Sidekiq server middleware
      class ServerMiddleware
        extend Forwardable

        DEFAULT_SPAN_NAME = 'sidekiq_perform'
        DEFAULT_SPAN_KIND = 'consumer'

        attr_reader :tracer
        attr_reader :tagger
        attr_reader :error_writter
        attr_reader :span_kind
        attr_reader :span_name

        def initialize(
          tracer: OpenTracing.global_tracer,
          tagger: JobTagger.new,
          error_writter: Common::ErrorWriter.new,
          span_kind: DEFAULT_SPAN_KIND,
          span_name: DEFAULT_SPAN_NAME
        )
          @tracer = tracer
          @tagger = tagger
          @error_writter = error_writter
          @span_kind = span_kind
          @span_name = span_name
        end

        def call(_worker, job, _queue)
          scope = tracer.start_active_span(span_name, **build_span_args(job))

          log(scope.span, job) do
            yield
          end
        ensure
          scope.close
        end

        private

        def log(span, job)
          tagger.write_args_log(span, job['jid'], job['args'])

          yield
        rescue StandardError => e
          error_writter.write_error(span, e)
          raise
        end

        def build_span_args(job)
          {
            references: extract_references(job),
            tags: tagger.build_tags(job, span_kind),
          }
        end

        def extract_references(job)
          span_context = tracer.extract(OpenTracing::FORMAT_TEXT_MAP, job)
          [OpenTracing::Reference.follows_from(span_context)]
        end
      end
    end
  end
end

Version data entries

16 entries across 16 versions & 1 rubygems

Version Path
opentracing-instrumentation-0.1.15 lib/opentracing/instrumentation/sidekiq/server_middleware.rb
opentracing-instrumentation-0.1.14 lib/opentracing/instrumentation/sidekiq/server_middleware.rb
opentracing-instrumentation-0.1.13 lib/opentracing/instrumentation/sidekiq/server_middleware.rb
opentracing-instrumentation-0.1.12 lib/opentracing/instrumentation/sidekiq/server_middleware.rb
opentracing-instrumentation-0.1.11 lib/opentracing/instrumentation/sidekiq/server_middleware.rb
opentracing-instrumentation-0.1.10 lib/opentracing/instrumentation/sidekiq/server_middleware.rb
opentracing-instrumentation-0.1.9 lib/opentracing/instrumentation/sidekiq/server_middleware.rb
opentracing-instrumentation-0.1.8 lib/opentracing/instrumentation/sidekiq/server_middleware.rb
opentracing-instrumentation-0.1.7 lib/opentracing/instrumentation/sidekiq/server_middleware.rb
opentracing-instrumentation-0.1.6 lib/opentracing/instrumentation/sidekiq/server_middleware.rb
opentracing-instrumentation-0.1.5 lib/opentracing/instrumentation/sidekiq/server_middleware.rb
opentracing-instrumentation-0.1.4 lib/opentracing/instrumentation/sidekiq/server_middleware.rb
opentracing-instrumentation-0.1.3 lib/opentracing/instrumentation/sidekiq/server_middleware.rb
opentracing-instrumentation-0.1.2 lib/opentracing/instrumentation/sidekiq/server_middleware.rb
opentracing-instrumentation-0.1.1 lib/opentracing/instrumentation/sidekiq/server_middleware.rb
opentracing-instrumentation-0.1.0 lib/opentracing/instrumentation/sidekiq/server_middleware.rb