class ElasticAPM::Spies::SuckerPunchSpy

@api private

def __run_perform(*args)

def __run_perform(*args)
  # This method is reached via JobClass#async_perform
  # or JobClass#perform_in.
  name = to_s
  transaction = ElasticAPM.start_transaction(name, TYPE)
  __run_perform_without_elastic_apm(*args)
  transaction.done 'success'
  transaction&.outcome = Transaction::Outcome::SUCCESS
rescue ::Exception => e
  # Note that SuckerPunch by default doesn't raise the errors from
  # the user-defined JobClass#perform method as it uses an error
  # handler, accessed via `SuckerPunch.exception_handler`.
  ElasticAPM.report(e, handled: false)
  transaction.done 'error'
  transaction&.outcome = Transaction::Outcome::FAILURE
  raise
ensure
  ElasticAPM.end_transaction
end

def install

def install
  ::SuckerPunch::Job::ClassMethods.class_eval do
    alias :__run_perform_without_elastic_apm :__run_perform
    def __run_perform(*args)
      # This method is reached via JobClass#async_perform
      # or JobClass#perform_in.
      name = to_s
      transaction = ElasticAPM.start_transaction(name, TYPE)
      __run_perform_without_elastic_apm(*args)
      transaction.done 'success'
      transaction&.outcome = Transaction::Outcome::SUCCESS
    rescue ::Exception => e
      # Note that SuckerPunch by default doesn't raise the errors from
      # the user-defined JobClass#perform method as it uses an error
      # handler, accessed via `SuckerPunch.exception_handler`.
      ElasticAPM.report(e, handled: false)
      transaction.done 'error'
      transaction&.outcome = Transaction::Outcome::FAILURE
      raise
    ensure
      ElasticAPM.end_transaction
    end
  end
end