Module: Resque::Failure

Defined in:
lib/resque/failure.rb,
lib/resque/failure/base.rb,
lib/resque/failure/redis.rb,
lib/resque/failure/airbrake.rb,
lib/resque/failure/multiple.rb,
lib/resque/failure/redis_multi_queue.rb

Overview

The Failure module provides an interface for working with different failure backends.

You can use it to query the failure backend without knowing which specific backend is being used. For instance, the Resque web app uses it to display stats and other information.

Defined Under Namespace

Classes: Airbrake, Base, Multiple, Redis, RedisMultiQueue

Class Method Summary collapse

Class Method Details

.all(offset = 0, limit = 1, queue = nil) ⇒ Object

Returns an array of all the failures, paginated.

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



74
75
76
# File 'lib/resque/failure.rb', line 74

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

.backendObject

Returns the current backend class. If none has been set, falls back to ‘Resque::Failure::Redis`



33
34
35
36
37
38
39
40
41
42
43
44
45
46
# File 'lib/resque/failure.rb', line 33

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

.backend=(backend) ⇒ Object

Sets the current backend. Expects a class descendent of ‘Resque::Failure::Base`.

Example use:

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


27
28
29
# File 'lib/resque/failure.rb', line 27

def self.backend=(backend)
  @backend = backend
end

.clear(queue = nil) ⇒ Object

Clear all failure jobs



89
90
91
# File 'lib/resque/failure.rb', line 89

def self.clear(queue = nil)
  backend.clear(queue)
end

.count(queue = nil, class_name = nil) ⇒ Object

Returns the int count of how many failures we have seen.



66
67
68
# File 'lib/resque/failure.rb', line 66

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

.create(options = {}) ⇒ Object

Creates a new failure, which is delegated to the appropriate backend.

Expects a hash with the following keys:

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


16
17
18
# File 'lib/resque/failure.rb', line 16

def self.create(options = {})
  backend.new(*options.values_at(:exception, :worker, :queue, :payload)).save
end

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

Iterate across all failures with the given options



79
80
81
# File 'lib/resque/failure.rb', line 79

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

.failure_queue_name(job_queue_name) ⇒ Object

Obtain the failure queue name for a given job queue



49
50
51
52
53
# File 'lib/resque/failure.rb', line 49

def self.failure_queue_name(job_queue_name)
  name = "#{job_queue_name}_failed"
  Resque.data_store.add_failed_queue(name)
  name
end

.job_queue_name(failure_queue_name) ⇒ Object

Obtain the job queue name for a given failure queue



56
57
58
# File 'lib/resque/failure.rb', line 56

def self.job_queue_name(failure_queue_name)
  failure_queue_name.sub(/_failed$/, '')
end

.queuesObject

Returns an array of all the failed queues in the system



61
62
63
# File 'lib/resque/failure.rb', line 61

def self.queues
  backend.queues
end

.remove(id, queue = nil) ⇒ Object



97
98
99
# File 'lib/resque/failure.rb', line 97

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

.remove_queue(queue) ⇒ Object

Removes all failed jobs in a specific queue. Queue name should be a string.



114
115
116
# File 'lib/resque/failure.rb', line 114

def self.remove_queue(queue)
  backend.remove_queue(queue)
end

.requeue(id, queue = nil) ⇒ Object



93
94
95
# File 'lib/resque/failure.rb', line 93

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

.requeue_allObject

Requeues all failed jobs



108
109
110
# File 'lib/resque/failure.rb', line 108

def self.requeue_all
  backend.requeue_all
end

.requeue_queue(queue) ⇒ Object

Requeues all failed jobs in a specific queue. Queue name should be a string.



103
104
105
# File 'lib/resque/failure.rb', line 103

def self.requeue_queue(queue)
  backend.requeue_queue(queue)
end

.urlObject

The string url of the backend’s web interface, if any.



84
85
86
# File 'lib/resque/failure.rb', line 84

def self.url
  backend.url
end