class Sidekiq::Middleware::Server::Freekiqs

Public Class Methods

callback() click to toggle source
# File lib/sidekiq/middleware/server/freekiqs.rb, line 82
def self.callback
  @@callback
end
callback=(callback_lambda) click to toggle source
# File lib/sidekiq/middleware/server/freekiqs.rb, line 86
def self.callback=(callback_lambda)
  @@callback = callback_lambda
end
new(opts={}) click to toggle source
# File lib/sidekiq/middleware/server/freekiqs.rb, line 13
def initialize(opts={})
  @default_freekiqs = opts[:freekiqs]
  @default_freekiq_for = opts[:freekiq_for]
  @@callback = opts[:callback]
end

Public Instance Methods

call(worker, msg, queue) { || ... } click to toggle source
# File lib/sidekiq/middleware/server/freekiqs.rb, line 19
def call(worker, msg, queue)
  yield
rescue => ex
  freekiqs = get_freekiqs_if_enabled(worker, ex)
  if freekiqs
    if msg['retry_count'].nil? || msg['retry_count'] < freekiqs-1
      begin
        @@callback.call(worker, msg, queue) if @@callback
      rescue => callback_exception
        Sidekiq.logger.info { "Freekiq callback failed for #{msg['class']} job #{msg['jid']}" }
      ensure
        raise FreekiqException, ex.message
      end
    else
      Sidekiq.logger.info { "Out of freekiqs for #{msg['class']} job #{msg['jid']}" }
    end
  end
  raise ex
end
error_whitelisted?(ex, errors) click to toggle source
# File lib/sidekiq/middleware/server/freekiqs.rb, line 72
def error_whitelisted?(ex, errors)
  errors.any? do |error|
    if error.respond_to?(:name) && error.is_a?(Class)
      ex.class == error || ex.class < error
    else
      ex.class.name == error
    end
  end
end
get_freekiq_errors(worker) click to toggle source
# File lib/sidekiq/middleware/server/freekiqs.rb, line 54
def get_freekiq_errors(worker)
  if worker.class.get_sidekiq_options['freekiq_for']
    worker.class.get_sidekiq_options['freekiq_for']
  elsif @default_freekiq_for
    @default_freekiq_for
  end
end
get_freekiqs(freekiqs, ex, errors) click to toggle source
# File lib/sidekiq/middleware/server/freekiqs.rb, line 62
def get_freekiqs(freekiqs, ex, errors)
  if errors
    if error_whitelisted?(ex, errors)
      freekiqs.to_i
    end
  else
    freekiqs.to_i
  end
end
get_freekiqs_if_enabled(worker, ex) click to toggle source
# File lib/sidekiq/middleware/server/freekiqs.rb, line 39
def get_freekiqs_if_enabled(worker, ex)
  freekiqs = nil
  if worker.class.get_sidekiq_options['retry']
    if worker.class.get_sidekiq_options['freekiqs'] != false
      errors = get_freekiq_errors(worker)
      if worker.class.get_sidekiq_options['freekiqs']
        freekiqs = get_freekiqs(worker.class.get_sidekiq_options['freekiqs'], ex, errors)
      elsif @default_freekiqs
        freekiqs = get_freekiqs(@default_freekiqs, ex, errors)
      end
    end
  end
  freekiqs
end