forked from resque/resque
-
Notifications
You must be signed in to change notification settings - Fork 0
/
failure.rb
96 lines (86 loc) · 2.63 KB
/
failure.rb
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
module Resque
# 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.
module Failure
# 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
def self.create(options = {})
backend.new(*options.values_at(:exception, :worker, :queue, :payload)).save
end
#
# Sets the current backend. Expects a class descendent of
# `Resque::Failure::Base`.
#
# Example use:
# require 'resque/failure/hoptoad'
# Resque::Failure.backend = Resque::Failure::Hoptoad
def self.backend=(backend)
@backend = backend
end
# Returns the current backend class. If none has been set, falls
# back to `Resque::Failure::Redis`
def self.backend
return @backend if @backend
require 'resque/failure/redis'
@backend = Failure::Redis
end
# Returns the int count of how many failures we have seen.
def self.count
backend.count
end
# Returns an array of all the failures, paginated.
#
# `start` is the int of the first item in the page, `count` is the
# number of items to return.
def self.all(start = 0, count = 1)
backend.all(start, count)
end
# The string url of the backend's web interface, if any.
def self.url
backend.url
end
# Clear all failure jobs
def self.clear
backend.clear
end
def self.requeue(index)
backend.requeue(index)
end
def self.remove(index)
backend.remove(index)
end
# Requeues all failed jobs in a specific queue.
# Queue name should be a string.
def self.requeue_queue(queue)
i=0
while job = Resque::Failure.all(i)
if job['queue'] == queue
Resque::Failure.requeue(i)
end
i+=1
end
end
# Removes all failed jobs in a specific queue.
# Queue name should be a string.
def self.remove_queue(queue)
i=0
while job = Resque::Failure.all(i)
if job['queue'] == queue
# This will remove the failure from the array so do not increment the index.
Resque::Failure.remove(i)
else
i+=1
end
end
end
end
end