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