module NewRelic::Agent::Instrumentation::ActiveJobHelper

Constants

ADAPTER_REGEX

Public Class Methods

adapter() click to toggle source
# File lib/new_relic/agent/instrumentation/active_job.rb, line 103
def self.adapter
  adapter_class = if ::ActiveJob::Base.queue_adapter.class == Class
    ::ActiveJob::Base.queue_adapter
  else
    ::ActiveJob::Base.queue_adapter.class
  end

  clean_adapter_name(adapter_class.name)
end
clean_adapter_name(name) click to toggle source
# File lib/new_relic/agent/instrumentation/active_job.rb, line 115
def self.clean_adapter_name(name)
  name = "ActiveJob::#{$1}" if ADAPTER_REGEX =~ name
  name
end
code_information_for_job(job) click to toggle source
# File lib/new_relic/agent/instrumentation/active_job.rb, line 87
def self.code_information_for_job(job)
  NewRelic::Agent::MethodTracerHelpers.code_information(job.class, :perform)
end
enqueue(job, block) click to toggle source
# File lib/new_relic/agent/instrumentation/active_job.rb, line 50
def self.enqueue(job, block)
  run_in_trace(job, block, :Produce)
end
perform(job, block) click to toggle source
# File lib/new_relic/agent/instrumentation/active_job.rb, line 54
def self.perform(job, block)
  state = ::NewRelic::Agent::Tracer.state
  txn = state.current_transaction

  # Don't nest transactions if we're already in a web transaction.
  # Probably inline processing the job if that happens, so just trace.
  if txn&.recording_web_transaction?
    run_in_trace(job, block, :Consume)
  elsif txn && !txn.recording_web_transaction?
    ::NewRelic::Agent::Transaction.set_default_transaction_name(
      transaction_name_suffix_for_job(job),
      transaction_category
    )
    block.call
  else
    run_in_transaction(job, block)
  end
end
run_in_trace(job, block, event) click to toggle source
# File lib/new_relic/agent/instrumentation/active_job.rb, line 73
def self.run_in_trace(job, block, event)
  trace_execution_scoped("ActiveJob/#{adapter.sub(/^ActiveJob::/, '')}/Queue/#{event}/Named/#{job.queue_name}",
    code_information: code_information_for_job(job)) do
    block.call
  end
end
run_in_transaction(job, block) click to toggle source
# File lib/new_relic/agent/instrumentation/active_job.rb, line 80
def self.run_in_transaction(job, block)
  options = code_information_for_job(job)
  options = {} if options.frozen? # the hash will be added to later
  ::NewRelic::Agent::Tracer.in_transaction(name: transaction_name_for_job(job),
    category: :other, options: options, &block)
end
transaction_category() click to toggle source
# File lib/new_relic/agent/instrumentation/active_job.rb, line 91
def self.transaction_category
  "OtherTransaction/#{adapter}"
end
transaction_name_for_job(job) click to toggle source
# File lib/new_relic/agent/instrumentation/active_job.rb, line 99
def self.transaction_name_for_job(job)
  "#{transaction_category}/#{transaction_name_suffix_for_job(job)}"
end
transaction_name_suffix_for_job(job) click to toggle source
# File lib/new_relic/agent/instrumentation/active_job.rb, line 95
def self.transaction_name_suffix_for_job(job)
  "#{job.class}/execute"
end