class NewRelic::Agent::Instrumentation::Sidekiq::Server

Constants

ATTRIBUTE_BASE_NAMESPACE
ATTRIBUTE_FILTER_TYPES
ATTRIBUTE_JOB_NAMESPACE
INSTRUMENTATION_NAME

Public Class Methods

default_trace_args(msg) click to toggle source
# File lib/new_relic/agent/instrumentation/sidekiq/server.rb, line 42
def self.default_trace_args(msg)
  {
    :name => 'perform',
    :class_name => msg['class'],
    :category => 'OtherTransaction/SidekiqJob'
  }
end
nr_attribute_options() click to toggle source
# File lib/new_relic/agent/instrumentation/sidekiq/server.rb, line 50
def self.nr_attribute_options
  @nr_attribute_options ||= begin
    ATTRIBUTE_FILTER_TYPES.each_with_object({}) do |type, opts|
      pattern =
        NewRelic::Agent::AttributePreFiltering.formulate_regexp_union(:"#{ATTRIBUTE_BASE_NAMESPACE}.#{type}")
      opts[type] = pattern if pattern
    end.merge(attribute_namespace: ATTRIBUTE_JOB_NAMESPACE)
  end
end

Public Instance Methods

call(worker, msg, queue, *_) { || ... } click to toggle source

Client middleware has additional parameters, and our tests use the middleware client-side to work inline.

# File lib/new_relic/agent/instrumentation/sidekiq/server.rb, line 17
def call(worker, msg, queue, *_)
  NewRelic::Agent.record_instrumentation_invocation(INSTRUMENTATION_NAME)

  trace_args = if worker.respond_to?(:newrelic_trace_args)
    worker.newrelic_trace_args(msg, queue)
  else
    self.class.default_trace_args(msg)
  end
  trace_headers = msg.delete(NewRelic::NEWRELIC_KEY)

  perform_action_with_newrelic_trace(trace_args) do
    NewRelic::Agent::Transaction.merge_untrusted_agent_attributes(
      NewRelic::Agent::AttributePreFiltering.pre_filter(msg['args'], self.class.nr_attribute_options),
      ATTRIBUTE_JOB_NAMESPACE,
      NewRelic::Agent::AttributeFilter::DST_NONE
    )

    if ::NewRelic::Agent.config[:'distributed_tracing.enabled'] && trace_headers&.any?
      ::NewRelic::Agent::DistributedTracing::accept_distributed_trace_headers(trace_headers, 'Other')
    end

    yield
  end
end