class OpenTracing::Instrumentation::Sidekiq::ServerMiddleware

Sidekiq server middleware

Constants

DEFAULT_OPERATION_NAME_BUILDER
DEFAULT_OPERATION_NAME_TEMPLATE
DEFAULT_SPAN_KIND

Attributes

error_writter[R]
logger[R]
operation_name_builder[R]
span_kind[R]
tagger[R]
tracer[R]

Public Class Methods

new( tracer: OpenTracing.global_tracer, tagger: JobTagger.new, error_writter: Common::ErrorWriter.new, logger: nil, span_kind: DEFAULT_SPAN_KIND, operation_name_builder: DEFAULT_OPERATION_NAME_BUILDER ) click to toggle source

rubocop:disable Metrics/ParameterLists

# File lib/opentracing/instrumentation/sidekiq/server_middleware.rb, line 29
def initialize(
  tracer: OpenTracing.global_tracer,
  tagger: JobTagger.new,
  error_writter: Common::ErrorWriter.new,
  logger: nil,
  span_kind: DEFAULT_SPAN_KIND,
  operation_name_builder: DEFAULT_OPERATION_NAME_BUILDER
)
  @tracer = tracer
  @tagger = tagger
  @error_writter = error_writter
  @logger = logger
  @span_kind = span_kind
  @operation_name_builder = operation_name_builder
end

Public Instance Methods

call(_worker, job, _queue, &block) click to toggle source

rubocop:enable Metrics/ParameterLists

# File lib/opentracing/instrumentation/sidekiq/server_middleware.rb, line 46
def call(_worker, job, _queue, &block)
  scope = safe_start_scope(job)

  log(scope.span, job, &block)
ensure
  scope&.close
end

Private Instance Methods

build_span_args(job) click to toggle source
# File lib/opentracing/instrumentation/sidekiq/server_middleware.rb, line 81
def build_span_args(job)
  {
    references: extract_references(job),
  }
end
extract_references(job) click to toggle source
# File lib/opentracing/instrumentation/sidekiq/server_middleware.rb, line 87
def extract_references(job)
  span_context = tracer.extract(OpenTracing::FORMAT_TEXT_MAP, job)
  return unless span_context

  [OpenTracing::Reference.follows_from(span_context)]
end
log(span, job) { || ... } click to toggle source
# File lib/opentracing/instrumentation/sidekiq/server_middleware.rb, line 72
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
safe_close_scope(scope) click to toggle source
# File lib/opentracing/instrumentation/sidekiq/server_middleware.rb, line 64
def safe_close_scope(scope)
  return unless socpe

  scope.close
rescue StandardError => e
  logger&.error(e)
end
safe_start_scope(job) click to toggle source
# File lib/opentracing/instrumentation/sidekiq/server_middleware.rb, line 56
def safe_start_scope(job)
  tags =  tagger.build_tags(job, span_kind)
  operation_name = operation_name_builder.build(tags)
  tracer.start_active_span(operation_name, tags: tags, **build_span_args(job))
rescue StandardError => e
  logger&.error(e)
end