Class: NewRelic::Agent::Instrumentation::Sidekiq::Server

Inherits:
Object
  • Object
show all
Includes:
ControllerInstrumentation, Sidekiq::ServerMiddleware
Defined in:
lib/new_relic/agent/instrumentation/sidekiq/server.rb

Constant Summary

Constants included from ControllerInstrumentation

ControllerInstrumentation::NR_DEFAULT_OPTIONS, ControllerInstrumentation::NR_DO_NOT_TRACE_KEY, ControllerInstrumentation::NR_IGNORE_APDEX_KEY, ControllerInstrumentation::NR_IGNORE_ENDUSER_KEY

Class Method Summary collapse

Instance Method Summary collapse

Methods included from ControllerInstrumentation

included, #perform_action_with_newrelic_trace

Methods included from ControllerInstrumentation::ClassMethods

#add_transaction_tracer, #already_added_transaction_tracer?, #build_method_names, #generate_argument_list, #newrelic_ignore, #newrelic_ignore_apdex, #newrelic_ignore_aspect, #newrelic_ignore_enduser, #newrelic_read_attr, #newrelic_write_attr, #parse_punctuation

Class Method Details

.default_trace_args(msg) ⇒ Object



29
30
31
32
33
34
35
# File 'lib/new_relic/agent/instrumentation/sidekiq/server.rb', line 29

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

Instance Method Details

#call(worker, msg, queue, *_) ⇒ Object

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



12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
# File 'lib/new_relic/agent/instrumentation/sidekiq/server.rb', line 12

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
  trace_headers = msg.delete(NewRelic::NEWRELIC_KEY)

  perform_action_with_newrelic_trace(trace_args) do
    NewRelic::Agent::Transaction.merge_untrusted_agent_attributes(msg['args'], :'job.sidekiq.args',
      NewRelic::Agent::AttributeFilter::DST_NONE)

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