class Raygun::SidekiqReporter

Public Class Methods

affected_user(context_hash) click to toggle source

Extracts affected user information out of a Sidekiq worker class

# File lib/raygun/sidekiq.rb, line 38
def self.affected_user(context_hash)
  job = context_hash[:job]

  return if job.nil? || job['class'].nil? || !Module.const_defined?(job['class'])

  worker_class = Module.const_get(job['class'])
  affected_user_method = Raygun.configuration.affected_user_method

  return if worker_class.nil? || !worker_class.respond_to?(affected_user_method)

  worker_class.send(affected_user_method, job['args'])
rescue => e
  return unless Raygun.configuration.failsafe_logger

  failsafe_log("Problem in sidekiq affected user tracking: #{e.class}: #{e.message}\n\n#{e.backtrace.join("\n")}")

  nil
end
call(exception, context_hash = {}, config = nil) click to toggle source
# File lib/raygun/sidekiq.rb, line 9
def self.call(exception, context_hash = {}, config = nil)
  user = affected_user(context_hash)
  data =  {
    custom_data: {
      sidekiq_context: context_hash
    },
    tags: ['sidekiq']
  }

  if exception.is_a?(Sidekiq::JobRetry::Handled) && exception.cause
    if Raygun.configuration.track_retried_sidekiq_jobs
      data.merge!(sidekiq_retried: true)
      exception = exception.cause
    else
      return false
    end
  end

  if exception.instance_variable_defined?(:@__raygun_correlation_id) && correlation_id = exception.instance_variable_get(:@__raygun_correlation_id)
    data.merge!(correlation_id: correlation_id)
  end
  ::Raygun.track_exception(
      exception,
      data,
      user
    )
end