class ResqueSolo::Queue
Public Class Methods
cleanup(queue)
click to toggle source
# File lib/resque_solo/queue.rb, line 64 def cleanup(queue) cursor = "0" loop do cursor, keys = redis.scan(cursor, match: "solo:queue:#{queue}:job:*") redis.del(*keys) if keys.any? break if cursor.to_i.zero? end end
destroy(queue, klass, *args)
click to toggle source
# File lib/resque_solo/queue.rb, line 52 def destroy(queue, klass, *args) klass = klass.to_s redis_queue = "queue:#{queue}" redis.lrange(redis_queue, 0, -1).each do |string| json = Resque.decode(string) next unless json["class"] == klass next if args.any? && json["args"] != args ResqueSolo::Queue.mark_unqueued(queue, json) end end
is_unique?(item)
click to toggle source
# File lib/resque_solo/queue.rb, line 34 def is_unique?(item) const_for(item).included_modules.include?(::Resque::Plugins::UniqueJob) rescue NameError false end
item_ttl(item)
click to toggle source
# File lib/resque_solo/queue.rb, line 40 def item_ttl(item) const_for(item).ttl rescue NameError -1 end
lock_after_execution_period(item)
click to toggle source
# File lib/resque_solo/queue.rb, line 46 def lock_after_execution_period(item) const_for(item).lock_after_execution_period rescue NameError 0 end
mark_queued(queue, item)
click to toggle source
# File lib/resque_solo/queue.rb, line 11 def mark_queued(queue, item) return unless is_unique?(item) key = unique_key(queue, item) redis.set(key, 1) ttl = item_ttl(item) redis.expire(key, ttl) if ttl >= 0 end
mark_unqueued(queue, job)
click to toggle source
# File lib/resque_solo/queue.rb, line 19 def mark_unqueued(queue, job) item = job.is_a?(Resque::Job) ? job.payload : job return unless is_unique?(item) ttl = lock_after_execution_period(item) if ttl == 0 redis.del(unique_key(queue, item)) else redis.expire(unique_key(queue, item), ttl) end end
queued?(queue, item)
click to toggle source
# File lib/resque_solo/queue.rb, line 6 def queued?(queue, item) return false unless is_unique?(item) redis.get(unique_key(queue, item)) == "1" end
unique_key(queue, item)
click to toggle source
# File lib/resque_solo/queue.rb, line 30 def unique_key(queue, item) "solo:queue:#{queue}:job:#{const_for(item).redis_key(item)}" end
Private Class Methods
const_for(item)
click to toggle source
# File lib/resque_solo/queue.rb, line 83 def const_for(item) Resque::Job.new(nil, nil).constantize item_class(item) end
item_class(item)
click to toggle source
# File lib/resque_solo/queue.rb, line 79 def item_class(item) item[:class] || item["class"] end
redis()
click to toggle source
# File lib/resque_solo/queue.rb, line 75 def redis Resque.redis end