Module: Resque::ChangeQueue
- Defined in:
- lib/resque/change_queue.rb,
lib/resque/change_queue/server.rb,
lib/resque/change_queue/version.rb
Defined Under Namespace
Modules: Server
Constant Summary collapse
- VERSION =
"0.2.0"
Class Method Summary collapse
- .change_queue(from_queue, to_queue, klass, args = []) ⇒ Object
- .match_args(job_args, criteria_args) ⇒ Object
- .search_jobs(queue, klass, args = [], start = 0, count = 100) ⇒ Object
Class Method Details
.change_queue(from_queue, to_queue, klass, args = []) ⇒ Object
8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 |
# File 'lib/resque/change_queue.rb', line 8 def change_queue(from_queue, to_queue, klass, args = []) tmp_queue = "operation:#{SecureRandom.uuid}" moved_count = 0 while job = Resque.pop(from_queue) target_queue = tmp_queue if job["class"] == klass.to_s && match_args(job["args"], args) target_queue = to_queue moved_count += 1 end Resque.push(target_queue, job) end while job = Resque.pop(tmp_queue) Resque.push(from_queue, job) end # Finally ensure queue is removed Resque.remove_queue(tmp_queue) moved_count end |
.match_args(job_args, criteria_args) ⇒ Object
46 47 48 49 50 51 52 53 54 55 |
# File 'lib/resque/change_queue.rb', line 46 def match_args(job_args, criteria_args) match = true criteria_args.each_with_index do |item, index| next if item.nil? if job_args[index] != item match = false break end end end |
.search_jobs(queue, klass, args = [], start = 0, count = 100) ⇒ Object
29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 |
# File 'lib/resque/change_queue.rb', line 29 def search_jobs(queue, klass, args = [], start = 0, count = 100) matched_jobs = [] has_next = true while has_next page = Resque.peek(queue, start, 100) page.each do |job| next unless job["class"] == klass.to_s matched_jobs << job if match_args(job["args"], args) break if matched_jobs.count >= count end break if matched_jobs.count >= count has_next = (page != nil && page.count == 100) start += 100 end matched_jobs end |