Sha256: 10fe77521930080bd5e101903deb6723f20046dc5fb582d472ad60ccd04bb99a

Contents?: true

Size: 1.95 KB

Versions: 12

Compression:

Stored size: 1.95 KB

Contents

# encoding: utf-8
# This file is distributed under New Relic's license terms.
# See https://github.com/newrelic/rpm/blob/master/LICENSE for complete details.

DependencyDetection.defer do
  @name = :sidekiq

  depends_on do
    defined?(::Sidekiq) && !NewRelic::Agent.config[:disable_sidekiq]
  end

  executes do
    ::NewRelic::Agent.logger.info 'Installing Sidekiq instrumentation'
  end

  executes do
    class NewRelic::SidekiqInstrumentation
      include NewRelic::Agent::Instrumentation::ControllerInstrumentation

      # Client middleware has additional parameters, and our tests use the
      # middleware client-side to work inline.
      def call(worker, msg, queue, *_)
        trace_args = if worker.respond_to?(:newrelic_trace_args)
          worker.newrelic_trace_args(msg, queue)
        else
          self.class.default_trace_args(msg)
        end

        perform_action_with_newrelic_trace(trace_args) do
          if NewRelic::Agent.config[:'sidekiq.capture_params']
            NewRelic::Agent.add_custom_parameters(:job_arguments => msg['args'])
          end
          yield
        end
      end

      def self.default_trace_args(msg)
        {
          :name => 'perform',
          :class_name => msg['class'],
          :category => 'OtherTransaction/SidekiqJob'
        }
      end
    end

    class Sidekiq::Extensions::DelayedClass
      def newrelic_trace_args(msg, queue)
        (target, method_name, _args) = YAML.load(msg['args'][0])
        {
          :name => method_name,
          :class_name => target.name,
          :category => 'OtherTransaction/SidekiqJob'
        }
      rescue => e
        NewRelic::Agent.logger.error("Failure during deserializing YAML for Sidekiq::Extensions::DelayedClass", e)
        NewRelic::SidekiqInstrumentation.default_trace_args(msg)
      end
    end

    Sidekiq.configure_server do |config|
      config.server_middleware do |chain|
        chain.add NewRelic::SidekiqInstrumentation
      end
    end
  end
end

Version data entries

12 entries across 12 versions & 1 rubygems

Version Path
newrelic_rpm-3.11.2.286 lib/new_relic/agent/instrumentation/sidekiq.rb
newrelic_rpm-3.11.1.284 lib/new_relic/agent/instrumentation/sidekiq.rb
newrelic_rpm-3.11.0.283 lib/new_relic/agent/instrumentation/sidekiq.rb
newrelic_rpm-3.10.0.279 lib/new_relic/agent/instrumentation/sidekiq.rb
newrelic_rpm-3.9.9.275 lib/new_relic/agent/instrumentation/sidekiq.rb
newrelic_rpm-3.9.8.273 lib/new_relic/agent/instrumentation/sidekiq.rb
newrelic_rpm-3.9.7.266 lib/new_relic/agent/instrumentation/sidekiq.rb
newrelic_rpm-3.9.6.257 lib/new_relic/agent/instrumentation/sidekiq.rb
newrelic_rpm-3.9.5.251 lib/new_relic/agent/instrumentation/sidekiq.rb
newrelic_rpm-3.9.4.245 lib/new_relic/agent/instrumentation/sidekiq.rb
newrelic_rpm-3.9.3.241 lib/new_relic/agent/instrumentation/sidekiq.rb
newrelic_rpm-3.9.2.239 lib/new_relic/agent/instrumentation/sidekiq.rb