module Datadog::Contrib::Sidekiq::Tracing

Common functionality used by both client-side and server-side tracers.

Public Class Methods

new(options = {}) click to toggle source
# File lib/ddtrace/contrib/sidekiq/tracing.rb, line 12
def initialize(options = {})
  @tracer = options[:tracer] || Datadog.configuration[:sidekiq][:tracer]
end

Protected Instance Methods

delay_extension_class(job) click to toggle source
# File lib/ddtrace/contrib/sidekiq/tracing.rb, line 35
def delay_extension_class(job)
  clazz, method = YAML.parse(job['args'].first).children.first.children

  method = method.value[1..-1] # Remove leading `:` from method symbol

  "#{clazz.value}.#{method}"
end
job_resource(job) click to toggle source

If class is wrapping something else, the interesting resource info is the underlying, wrapped class, and not the wrapper. This is primarily to support `ActiveJob`.

# File lib/ddtrace/contrib/sidekiq/tracing.rb, line 21
def job_resource(job)
  if job['wrapped']
    job['wrapped'].to_s
  elsif job['class'] == 'Sidekiq::Extensions::DelayedClass'
    delay_extension_class(job).to_s
  else
    job['class'].to_s
  end
rescue => e
  Datadog.logger.debug { "Error retrieving Sidekiq job class name (jid:#{job['jid']}): #{e}" }

  job['class'].to_s
end