class ExceptionHunter::Middleware::DelayedJobHunter

DelayedJob plugin to track exceptions on apps using DelayedJob.

Constants

ARGS_TRACKED_DATA
JOB_TRACKED_DATA
TRACK_AT_RETRY

Public Class Methods

environment_data(job) click to toggle source
# File lib/exception_hunter/middleware/delayed_job_hunter.rb, line 43
def self.environment_data(job)
  job_data =
    JOB_TRACKED_DATA.reduce({}) do |dict, data_param|
      dict.merge(data_param => job.try(data_param))
    end

  job_class = if job.payload_object.class.name == 'ActiveJob::QueueAdapters::DelayedJobAdapter::JobWrapper'
                # support for Rails 4.2 ActiveJob
                job.payload_object.job_data['job_class']
              elsif job.payload_object.object.is_a?(Class)
                job.payload_object.object.name
              else
                job.payload_object.object.class.name
              end
  args_data = (job.payload_object.try(:job_data) || {}).select { |key, _value| ARGS_TRACKED_DATA.include?(key) }

  args_data['job_class'] = job_class || job.payload_object.class.name if args_data['job_class'].nil?

  job_data.merge(args_data)
end
should_track?(attempts) click to toggle source
# File lib/exception_hunter/middleware/delayed_job_hunter.rb, line 64
def self.should_track?(attempts)
  TRACK_AT_RETRY.include?(attempts)
end
track_exception(exception, job) click to toggle source
# File lib/exception_hunter/middleware/delayed_job_hunter.rb, line 30
def self.track_exception(exception, job)
  return unless should_track?(job.attempts)

  ErrorCreator.call(
    async_logging: false,
    tag: ErrorCreator::WORKER_TAG,
    class_name: exception.class.to_s,
    message: exception.message,
    environment_data: environment_data(job),
    backtrace: exception.backtrace
  )
end