Class: Resque::Plugins::Loner::Helpers
- Inherits:
-
Object
- Object
- Resque::Plugins::Loner::Helpers
show all
- Extended by:
- LegacyHelpers
- Defined in:
- lib/resque-loner/helpers.rb
Class Method Summary
collapse
classify, constantize, decode, encode, redis
Class Method Details
.cleanup_loners(queue) ⇒ Object
79
80
81
82
|
# File 'lib/resque-loner/helpers.rb', line 79
def self.cleanup_loners(queue)
keys = redis.keys("loners:queue:#{queue}:job:*")
redis.del(*keys) unless keys.empty?
end
|
.item_is_a_unique_job?(item) ⇒ Boolean
38
39
40
41
42
43
44
45
|
# File 'lib/resque-loner/helpers.rb', line 38
def self.item_is_a_unique_job?(item)
begin
klass = constantize(item[:class] || item['class'])
klass.included_modules.include?(::Resque::Plugins::UniqueJob)
rescue
false end end
|
.item_ttl(item) ⇒ Object
47
48
49
50
51
52
53
|
# File 'lib/resque-loner/helpers.rb', line 47
def self.item_ttl(item)
begin
constantize(item[:class] || item['class']).loner_ttl
rescue
-1
end
end
|
.job_destroy(queue, klass, *args) ⇒ Object
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
|
# File 'lib/resque-loner/helpers.rb', line 63
def self.job_destroy(queue, klass, *args)
klass = klass.to_s
redis_queue = "queue:#{queue}"
redis.lrange(redis_queue, 0, -1).each do |string|
json = decode(string)
match = json['class'] == klass
match &= json['args'] == args unless args.empty?
if match
Resque::Plugins::Loner::Helpers.mark_loner_as_unqueued(queue, json)
end
end
end
|
.loner_lock_after_execution_period(item) ⇒ Object
55
56
57
58
59
60
61
|
# File 'lib/resque-loner/helpers.rb', line 55
def self.loner_lock_after_execution_period(item)
begin
constantize(item[:class] || item['class']).loner_lock_after_execution_period
rescue
0
end
end
|
.loner_queued?(queue, item) ⇒ Boolean
9
10
11
12
|
# File 'lib/resque-loner/helpers.rb', line 9
def self.loner_queued?(queue, item)
return false unless item_is_a_unique_job?(item)
redis.get(unique_job_queue_key(queue, item)) == '1'
end
|
.mark_loner_as_queued(queue, item) ⇒ Object
14
15
16
17
18
19
20
21
|
# File 'lib/resque-loner/helpers.rb', line 14
def self.mark_loner_as_queued(queue, item)
return unless item_is_a_unique_job?(item)
key = unique_job_queue_key(queue, item)
redis.set(key, 1)
unless (ttl = item_ttl(item)) == -1 redis.expire(key, ttl)
end
end
|
.mark_loner_as_unqueued(queue, job) ⇒ Object
23
24
25
26
27
28
29
30
31
|
# File 'lib/resque-loner/helpers.rb', line 23
def self.mark_loner_as_unqueued(queue, job)
item = job.is_a?(Resque::Job) ? job.payload : job
return unless item_is_a_unique_job?(item)
unless (ttl = loner_lock_after_execution_period(item)) == 0
redis.expire(unique_job_queue_key(queue, item), ttl)
else
redis.del(unique_job_queue_key(queue, item))
end
end
|
.unique_job_queue_key(queue, item) ⇒ Object
33
34
35
36
|
# File 'lib/resque-loner/helpers.rb', line 33
def self.unique_job_queue_key(queue, item)
job_key = constantize(item[:class] || item['class']).redis_key(item)
"loners:queue:#{queue}:job:#{job_key}"
end
|