Class: Datadog::Contrib::Sidekiq::ServerTracer

Inherits:
Object
  • Object
show all
Includes:
Tracing
Defined in:
lib/ddtrace/contrib/sidekiq/server_tracer.rb

Overview

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

Instance Method Summary collapse

Constructor Details

#initialize(options = {}) ⇒ ServerTracer

Returns a new instance of ServerTracer.



12
13
14
15
16
# File 'lib/ddtrace/contrib/sidekiq/server_tracer.rb', line 12

def initialize(options = {})
  super
  @sidekiq_service = options[:service_name] || configuration[:service_name]
  @error_handler = options[:error_handler] || configuration[:error_handler]
end

Instance Method Details

#call(worker, job, queue) ⇒ Object



18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
# File 'lib/ddtrace/contrib/sidekiq/server_tracer.rb', line 18

def call(worker, job, queue)
  resource = job_resource(job)

  service = worker_config(resource, :service_name) || @sidekiq_service
  tag_args = worker_config(resource, :tag_args) || configuration[:tag_args]

  @tracer.trace(Ext::SPAN_JOB, service: service, span_type: Datadog::Ext::AppTypes::WORKER,
                               on_error: @error_handler) do |span|
    span.resource = resource
    # Set analytics sample rate
    if Contrib::Analytics.enabled?(configuration[:analytics_enabled])
      Contrib::Analytics.set_sample_rate(span, configuration[:analytics_sample_rate])
    end

    # Measure service stats
    Contrib::Analytics.set_measured(span)

    span.set_tag(Ext::TAG_JOB_ID, job['jid'])
    span.set_tag(Ext::TAG_JOB_RETRY, job['retry'])
    span.set_tag(Ext::TAG_JOB_RETRY_COUNT, job['retry_count'])
    span.set_tag(Ext::TAG_JOB_QUEUE, job['queue'])
    span.set_tag(Ext::TAG_JOB_WRAPPER, job['class']) if job['wrapped']
    span.set_tag(Ext::TAG_JOB_DELAY, 1000.0 * (Time.now.utc.to_f - job['enqueued_at'].to_f))
    span.set_tag(Ext::TAG_JOB_ARGS, job['args']) if tag_args && !job['args'].nil? && !job['args'].empty?

    yield
  end
end