module Raven::Rails::ActiveJobExtensions

Constants

ALREADY_SUPPORTED_SENTRY_ADAPTERS

Public Class Methods

included(base) click to toggle source
# File lib/raven/integrations/rails/active_job.rb, line 9
def self.included(base)
  base.class_eval do
    around_perform do |job, block|
      capture_and_reraise_with_sentry(job, block)
    end
  end
end

Public Instance Methods

already_supported_by_specific_integration?(job) click to toggle source
# File lib/raven/integrations/rails/active_job.rb, line 30
def already_supported_by_specific_integration?(job)
  if ::Rails.version.to_f < 5.0
    ALREADY_SUPPORTED_SENTRY_ADAPTERS.include?(job.class.queue_adapter.to_s)
  else
    ALREADY_SUPPORTED_SENTRY_ADAPTERS.include?(job.class.queue_adapter.class.to_s)
  end
end
capture_and_reraise_with_sentry(job, block) click to toggle source
# File lib/raven/integrations/rails/active_job.rb, line 17
def capture_and_reraise_with_sentry(job, block)
  block.call
rescue Exception => exception # rubocop:disable Lint/RescueException
  return if rescue_with_handler(exception)
  unless already_supported_by_specific_integration?(job)
    Raven.capture_exception(exception, :extra => raven_context(job))
  end
  raise exception
ensure
  Context.clear!
  BreadcrumbBuffer.clear!
end
raven_context(job) click to toggle source
# File lib/raven/integrations/rails/active_job.rb, line 38
def raven_context(job)
  ctx = {
    :active_job => job.class.name,
    :arguments => job.arguments,
    :scheduled_at => job.scheduled_at,
    :job_id => job.job_id,
    :locale => job.locale
  }
  # Add provider_job_id details if Rails 5
  if job.respond_to?(:provider_job_id)
    ctx[:provider_job_id] = job.provider_job_id
  end

  ctx
end