Sha256: 1b28defea3b28aa829cbee9d67668e6183c0f5214e464ecbc4ccf584762f636a

Contents?: true

Size: 1.79 KB

Versions: 4

Compression:

Stored size: 1.79 KB

Contents

# frozen_string_literal: true

# Copyright The OpenTelemetry Authors
#
# SPDX-License-Identifier: Apache-2.0

module OpenTelemetry
  module Instrumentation
    module Resque
      module Patches
        # Module to prepend to Resque for instrumentation
        module ResqueModule
          def self.prepended(base)
            class << base
              prepend ClassMethods
            end
          end

          # Module to prepend to Resque singleton class
          module ClassMethods
            def push(queue, item)
              # Check if the job is being wrapped by ActiveJob
              # before retrieving the job class name
              job_class = if item[:class] == 'ActiveJob::QueueAdapters::ResqueAdapter::JobWrapper' && item[:args][0].is_a?(Hash)
                            item[:args][0]['job_class']
                          else
                            item[:class]
                          end

              attributes = {
                'messaging.system' => 'resque',
                'messaging.destination' => queue.to_s,
                'messaging.destination_kind' => 'queue',
                'messaging.resque.job_class' => job_class
              }

              span_name = case config[:span_naming]
                          when :job_class then "#{job_class} send"
                          else "#{queue} send"
                          end

              tracer.in_span(span_name, attributes: attributes, kind: :producer) do
                OpenTelemetry.propagation.inject(item)
                super
              end
            end

            def tracer
              Resque::Instrumentation.instance.tracer
            end

            def config
              Resque::Instrumentation.instance.config
            end
          end
        end
      end
    end
  end
end

Version data entries

4 entries across 4 versions & 1 rubygems

Version Path
opentelemetry-instrumentation-resque-0.4.2 lib/opentelemetry/instrumentation/resque/patches/resque_module.rb
opentelemetry-instrumentation-resque-0.4.1 lib/opentelemetry/instrumentation/resque/patches/resque_module.rb
opentelemetry-instrumentation-resque-0.4.0 lib/opentelemetry/instrumentation/resque/patches/resque_module.rb
opentelemetry-instrumentation-resque-0.3.1 lib/opentelemetry/instrumentation/resque/patches/resque_module.rb