module Resque::Failure

def self.all(offset = 0, limit = 1, queue = nil)

number of items to return.
`offset` is the int of the first item in the page, `limit` is the

Returns an array of all the failures, paginated.
def self.all(offset = 0, limit = 1, queue = nil)
  backend.all(offset, limit, queue)
end

def self.backend

back to `Resque::Failure::Redis`
Returns the current backend class. If none has been set, falls
def self.backend
  return @backend if @backend
  case ENV['FAILURE_BACKEND']
  when 'redis_multi_queue'
    require 'resque/failure/redis_multi_queue'
    @backend = Failure::RedisMultiQueue
  when 'redis', nil
    require 'resque/failure/redis'
    @backend = Failure::Redis
  else
    raise ArgumentError, "invalid failure backend: #{FAILURE_BACKEND}"
  end
end

def self.backend=(backend)

Resque::Failure.backend = Resque::Failure::Airbrake
require 'resque/failure/airbrake'
Example use:

`Resque::Failure::Base`.
Sets the current backend. Expects a class descendent of
def self.backend=(backend)
  @backend = backend
end

def self.clear(queue = nil)

Clear all failure jobs
def self.clear(queue = nil)
  backend.clear(queue)
end

def self.clear_retried

def self.clear_retried
  each do |index, job|
    remove(index) unless job['retried_at'].nil?
  end
end

def self.count(queue = nil, class_name = nil)

Returns the int count of how many failures we have seen.
def self.count(queue = nil, class_name = nil)
  backend.count(queue, class_name)
end

def self.create(options = {})

:payload - The job's payload
:queue - The string name of the queue from which the job was pulled
:worker - The Worker object who is reporting the failure
:exception - The Exception object
Expects a hash with the following keys:

Creates a new failure, which is delegated to the appropriate backend.
def self.create(options = {})
  backend.new(*options.values_at(:exception, :worker, :queue, :payload)).save
end

def self.each(offset = 0, limit = self.count, queue = nil, class_name = nil, order = 'desc', &block)

Iterate across all failures with the given options
def self.each(offset = 0, limit = self.count, queue = nil, class_name = nil, order = 'desc', &block)
  backend.each(offset, limit, queue, class_name, order, &block)
end

def self.failure_queue_name(job_queue_name)

Obtain the failure queue name for a given job queue
def self.failure_queue_name(job_queue_name)
  name = "#{job_queue_name}_failed"
  Resque.data_store.add_failed_queue(name)
  name
end

def self.job_queue_name(failure_queue_name)

Obtain the job queue name for a given failure queue
def self.job_queue_name(failure_queue_name)
  failure_queue_name.sub(/_failed$/, '')
end

def self.queues

Returns an array of all the failed queues in the system
def self.queues
  backend.queues
end

def self.remove(id, queue = nil)

def self.remove(id, queue = nil)
  backend.remove(id, queue)
end

def self.remove_queue(queue)

Queue name should be a string.
Removes all failed jobs in a specific queue.
def self.remove_queue(queue)
  backend.remove_queue(queue)
end

def self.requeue(id, queue = nil)

def self.requeue(id, queue = nil)
  backend.requeue(id, queue)
end

def self.requeue_all

Requeues all failed jobs
def self.requeue_all
  backend.requeue_all
end

def self.requeue_queue(queue)

Queue name should be a string.
Requeues all failed jobs in a specific queue.
def self.requeue_queue(queue)
  backend.requeue_queue(queue)
end

def self.url

The string url of the backend's web interface, if any.
def self.url
  backend.url
end