class Sidekiq::PriorityQueue::Client

Public Instance Methods

call(worker_class, item, queue, redis_pool) { || ... } click to toggle source

inserted into Sidekiq's Client as middleware

# File lib/sidekiq/priority_queue/client.rb, line 6
def call(worker_class, item, queue, redis_pool)
  if item['priority']
    sadd('priority-queues', queue)
    zadd(queue, item['priority'], item)
    return item['jid']
  elsif item['subqueue']
    # replace the proc with what it returns
    sadd('priority-queues', queue)
    item['subqueue'] = resolve_subqueue(item['subqueue'], item['args'])
    priority = fetch_and_add(queue, item['subqueue'], item)
    zadd(queue, priority, item)
    return item['jid']
  else
    # continue pushing the normal Sidekiq way
    yield
  end
end

Private Instance Methods

fetch_and_add(queue, subqueue, item) click to toggle source
# File lib/sidekiq/priority_queue/client.rb, line 46
def fetch_and_add(queue, subqueue, item)
  Sidekiq.redis do |conn|
    priority = conn.zincrby("priority-queue-counts:#{queue}", 1, subqueue)
  end
end
resolve_subqueue(subqueue, job_args) click to toggle source
# File lib/sidekiq/priority_queue/client.rb, line 26
def resolve_subqueue(subqueue, job_args)
  return subqueue unless subqueue.respond_to?(:call)

  subqueue.call(job_args)
end
sadd(set, member) click to toggle source
# File lib/sidekiq/priority_queue/client.rb, line 40
def sadd(set, member)
  Sidekiq.redis do |conn|
    conn.sadd(set,member)
  end
end
zadd(queue, score, item) click to toggle source
# File lib/sidekiq/priority_queue/client.rb, line 32
def zadd(queue, score, item)
  Sidekiq.redis do |conn|
    queue = "priority-queue:#{queue}"
    conn.zadd(queue, score, item.to_json)
    return item
  end
end