Class: Datadog::Contrib::Sidekiq::Tracer

Inherits:
Object
  • Object
show all
Defined in:
lib/ddtrace/contrib/sidekiq/tracer.rb

Overview

Middleware is a Sidekiq server-side middleware which traces executed jobs

Instance Method Summary collapse

Constructor Details

#initialize(options = {}) ⇒ Tracer

Returns a new instance of Tracer.



28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
# File 'lib/ddtrace/contrib/sidekiq/tracer.rb', line 28

def initialize(options = {})
  # check if Rails configuration is available and use it to override
  # Sidekiq defaults
  rails_config = ::Rails.configuration.datadog_trace rescue {}
  base_config = DEFAULT_CONFIG.merge(rails_config)
  user_config = base_config.merge(options)
  @tracer = user_config[:tracer]
  @sidekiq_service = user_config[:sidekiq_service]

  # set Tracer status
  @tracer.enabled = user_config[:enabled]
  Datadog::Tracer.debug_logging = user_config[:debug]

  # configure the Tracer instance
  @tracer.configure(
    hostname: user_config[:trace_agent_hostname],
    port: user_config[:trace_agent_port]
  )
end

Instance Method Details

#call(worker, job, queue) ⇒ Object



48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
# File 'lib/ddtrace/contrib/sidekiq/tracer.rb', line 48

def call(worker, job, queue)
  # If class is wrapping something else, the interesting resource info
  # is the underlying, wrapped class, and not the wrapper.
  resource = if job['wrapped']
               job['wrapped']
             else
               job['class']
             end

  # configure Sidekiq service
  service = sidekiq_service(resource_worker(resource))
  set_service_info(service)

  @tracer.trace('sidekiq.job', service: service, span_type: 'job') do |span|
    span.resource = resource
    span.set_tag('sidekiq.job.id', job['jid'])
    span.set_tag('sidekiq.job.retry', job['retry'])
    span.set_tag('sidekiq.job.queue', job['queue'])
    span.set_tag('sidekiq.job.wrapper', job['class']) if job['wrapped']

    yield
  end
end