Sha256: b0a4b5a6a3a38c100980a512e2d43709241c55194be0b35908464126f3d38515

Contents?: true

Size: 1.56 KB

Versions: 7

Compression:

Stored size: 1.56 KB

Contents

require 'delayed/plugin'
require 'ddtrace/contrib/delayed_job/ext'

module Datadog
  module Contrib
    module DelayedJob
      # DelayedJob plugin that instruments invoke_job hook
      class Plugin < Delayed::Plugin
        def self.instrument(job, &block)
          return block.call(job) unless tracer && tracer.enabled

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

          tracer.trace(Ext::SPAN_JOB, service: configuration[:service_name], resource: job_name) do |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

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

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

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

        def self.tracer
          configuration[:tracer]
        end

        callbacks do |lifecycle|
          lifecycle.around(:invoke_job, &method(:instrument))
          lifecycle.around(:execute, &method(:flush))
        end
      end
    end
  end
end

Version data entries

7 entries across 7 versions & 1 rubygems

Version Path
ddtrace-0.18.3 lib/ddtrace/contrib/delayed_job/plugin.rb
ddtrace-0.18.2 lib/ddtrace/contrib/delayed_job/plugin.rb
ddtrace-0.18.1 lib/ddtrace/contrib/delayed_job/plugin.rb
ddtrace-0.18.0 lib/ddtrace/contrib/delayed_job/plugin.rb
ddtrace-0.17.3 lib/ddtrace/contrib/delayed_job/plugin.rb
ddtrace-0.17.2 lib/ddtrace/contrib/delayed_job/plugin.rb
ddtrace-0.17.1 lib/ddtrace/contrib/delayed_job/plugin.rb