Class: Datadog::Contrib::DelayedJob::Plugin

Inherits:
Delayed::Plugin
  • Object
show all
Defined in:
lib/ddtrace/contrib/delayed_job/plugin.rb

Overview

DelayedJob plugin that instruments invoke_job hook

Class Method Summary collapse

Class Method Details

.configurationObject



54
55
56
# File 'lib/ddtrace/contrib/delayed_job/plugin.rb', line 54

def self.configuration
  Datadog.configuration[:delayed_job]
end

.flush(worker) {|worker| ... } ⇒ Object

Yields:

  • (worker)


48
49
50
51
52
# File 'lib/ddtrace/contrib/delayed_job/plugin.rb', line 48

def self.flush(worker, &block)
  yield worker

  tracer.shutdown! if tracer && tracer.enabled
end

.instrument_enqueue(job, &block) ⇒ Object



31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
# File 'lib/ddtrace/contrib/delayed_job/plugin.rb', line 31

def self.instrument_enqueue(job, &block)
  return yield(job) unless tracer && tracer.enabled

  tracer.trace(Ext::SPAN_ENQUEUE, service: configuration[:client_service_name], resource: job_name(job)) do |span|
    set_sample_rate(span)

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

    span.set_tag(Ext::TAG_QUEUE, job.queue) if job.queue
    span.set_tag(Ext::TAG_PRIORITY, job.priority)
    span.span_type = Datadog::Ext::AppTypes::WORKER

    yield job
  end
end

.instrument_invoke(job, &block) ⇒ Object



11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
# File 'lib/ddtrace/contrib/delayed_job/plugin.rb', line 11

def self.instrument_invoke(job, &block)
  return yield(job) unless tracer && tracer.enabled

  tracer.trace(Ext::SPAN_JOB, service: configuration[:service_name], resource: job_name(job),
                              on_error: configuration[:error_handler]) do |span|
    set_sample_rate(span)

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

    span.set_tag(Ext::TAG_ID, job.id)
    span.set_tag(Ext::TAG_QUEUE, job.queue) if job.queue
    span.set_tag(Ext::TAG_PRIORITY, job.priority)
    span.set_tag(Ext::TAG_ATTEMPTS, job.attempts)
    span.span_type = Datadog::Ext::AppTypes::WORKER

    yield job
  end
end

.job_name(job) ⇒ Object



62
63
64
65
66
67
68
# File 'lib/ddtrace/contrib/delayed_job/plugin.rb', line 62

def self.job_name(job)
  # When DelayedJob is used through ActiveJob, we need to parse the payload differentely
  # to get the actual job name
  return job.payload_object.job_data['job_class'] if job.payload_object.respond_to?(:job_data)

  job.name
end

.set_sample_rate(span) ⇒ Object



70
71
72
73
74
75
# File 'lib/ddtrace/contrib/delayed_job/plugin.rb', line 70

def self.set_sample_rate(span)
  # Set analytics sample rate
  if Contrib::Analytics.enabled?(configuration[:analytics_enabled])
    Contrib::Analytics.set_sample_rate(span, configuration[:analytics_sample_rate])
  end
end

.tracerObject



58
59
60
# File 'lib/ddtrace/contrib/delayed_job/plugin.rb', line 58

def self.tracer
  configuration[:tracer]
end