Sha256: 83b23493ee6c2a7cb9eac4ac4cb8253c5f6ad95c2bbd3d9ddbadcee0dc6aadc3

Contents?: true

Size: 1.6 KB

Versions: 22

Compression:

Stored size: 1.6 KB

Contents

require 'ddtrace/contrib/analytics'

module Datadog
  module Contrib
    module Shoryuken
      # Tracer is a Shoryuken server-side middleware which traces executed jobs
      class Tracer
        def initialize(options = {})
          @tracer = options[:tracer] || configuration[:tracer]
          @shoryuken_service = options[:service_name] || configuration[:service_name]
        end

        def call(worker_instance, queue, sqs_msg, body)
          @tracer.trace(Ext::SPAN_JOB, service: @shoryuken_service, span_type: Datadog::Ext::AppTypes::WORKER) do |span|
            # Set analytics sample rate
            if Contrib::Analytics.enabled?(configuration[:analytics_enabled])
              Contrib::Analytics.set_sample_rate(span, configuration[:analytics_sample_rate])
            end
            span.resource = resource(worker_instance, body)
            span.set_tag(Ext::TAG_JOB_ID, sqs_msg.message_id)
            span.set_tag(Ext::TAG_JOB_QUEUE, queue)
            span.set_tag(Ext::TAG_JOB_ATTRIBUTES, sqs_msg.attributes) if sqs_msg.respond_to?(:attributes)
            span.set_tag(Ext::TAG_JOB_BODY, body)

            yield
          end
        end

        private

        def resource(worker_instance, body)
          # If it's a Hash, try to get the job class from it.
          # This is for ActiveJob compatibility.
          job_class = body['job_class'] if body.is_a?(Hash)
          # If nothing is available, use the worker class name.
          job_class || worker_instance.class.name
        end

        def configuration
          Datadog.configuration[:shoryuken]
        end
      end
    end
  end
end

Version data entries

22 entries across 22 versions & 2 rubygems

Version Path
ls-trace-0.1.2 lib/ddtrace/contrib/shoryuken/tracer.rb
ddtrace-0.33.1 lib/ddtrace/contrib/shoryuken/tracer.rb
ddtrace-0.33.0 lib/ddtrace/contrib/shoryuken/tracer.rb
ddtrace-0.32.0 lib/ddtrace/contrib/shoryuken/tracer.rb
ddtrace-0.31.1 lib/ddtrace/contrib/shoryuken/tracer.rb
ddtrace-0.31.0 lib/ddtrace/contrib/shoryuken/tracer.rb
ddtrace-0.30.1 lib/ddtrace/contrib/shoryuken/tracer.rb
ddtrace-0.30.0 lib/ddtrace/contrib/shoryuken/tracer.rb
ddtrace-0.29.1 lib/ddtrace/contrib/shoryuken/tracer.rb
ddtrace-0.26.1 lib/ddtrace/contrib/shoryuken/tracer.rb
ls-trace-0.1.1 lib/ddtrace/contrib/shoryuken/tracer.rb
ddtrace-0.29.0 lib/ddtrace/contrib/shoryuken/tracer.rb
ddtrace-0.28.0 lib/ddtrace/contrib/shoryuken/tracer.rb
ddtrace-0.27.0 lib/ddtrace/contrib/shoryuken/tracer.rb
ddtrace-0.26.0 lib/ddtrace/contrib/shoryuken/tracer.rb
ddtrace-0.25.1 lib/ddtrace/contrib/shoryuken/tracer.rb
ddtrace-0.25.0 lib/ddtrace/contrib/shoryuken/tracer.rb
ddtrace-0.24.0 lib/ddtrace/contrib/shoryuken/tracer.rb
ddtrace-0.23.3 lib/ddtrace/contrib/shoryuken/tracer.rb
ddtrace-0.23.2 lib/ddtrace/contrib/shoryuken/tracer.rb