class Sentry::DelayedJob::Plugin

Constants

ACTIVE_JOB_CONTEXT_KEY
DELAYED_JOB_CONTEXT_KEY

need to symbolize strings as keyword arguments in Ruby 2.4~2.6

Public Class Methods

capture_exception(exception, job) click to toggle source
# File lib/sentry/delayed_job/plugin.rb, line 74
def self.capture_exception(exception, job)
  Sentry::DelayedJob.capture_exception(exception, hint: { background: false }) if report?(job)
end
compute_job_class(payload_object) click to toggle source
# File lib/sentry/delayed_job/plugin.rb, line 65
def self.compute_job_class(payload_object)
  if payload_object.is_a? Delayed::PerformableMethod
    klass = payload_object.object.is_a?(Class) ? payload_object.object.name : payload_object.object.class.name
    "#{klass}##{payload_object.method_name}"
  else
    payload_object.class.name
  end
end
finish_transaction(transaction, status) click to toggle source
# File lib/sentry/delayed_job/plugin.rb, line 86
def self.finish_transaction(transaction, status)
  return unless transaction
  
  transaction.set_http_status(status)
  transaction.finish
end
generate_contexts(job) click to toggle source
# File lib/sentry/delayed_job/plugin.rb, line 37
def self.generate_contexts(job)
  context = {}

  context[DELAYED_JOB_CONTEXT_KEY] = {
    id: job.id.to_s,
    priority: job.priority,
    attempts: job.attempts,
    run_at: job.run_at,
    locked_at: job.locked_at,
    locked_by: job.locked_by,
    queue: job.queue,
    created_at: job.created_at,
    last_error: job.last_error&.byteslice(0..1000),
    handler: job.handler&.byteslice(0..1000),
    job_class: compute_job_class(job.payload_object),
  }

  if job.payload_object.respond_to?(:job_data)
    context[ACTIVE_JOB_CONTEXT_KEY] = {}

    job.payload_object.job_data.each do |key, value|
      context[ACTIVE_JOB_CONTEXT_KEY][key.to_sym] = value
    end
  end

  context
end
report?(job) click to toggle source
# File lib/sentry/delayed_job/plugin.rb, line 78
def self.report?(job)
  return true unless Sentry.configuration.delayed_job.report_after_job_retries

  # We use the predecessor because the job's attempts haven't been increased to the new
  # count at this point.
  job.attempts >= Delayed::Worker.max_attempts.pred
end