module HireFire::Macro::Deprecated::Resque

Provides backward compatibility with the deprecated Resque macro. For new implementations, refer to {HireFire::Macro::Resque}.

Public Instance Methods

queue(*queues) click to toggle source

Retrieves the total number of jobs in the specified Resque queue(s).

This method counts the number of jobs in either specific queues or all queues if none are specified. It includes both queued and in-progress jobs.

@param queues [Array<String, Symbol>] Queue names to count jobs in.

Pass an empty array or no arguments to count jobs in all queues.

@return [Integer] Total number of jobs in the specified queues. @example Counting jobs in all queues

HireFire::Macro::Resque.queue

@example Counting jobs in the “default” queue

HireFire::Macro::Resque.queue("default")

@example Counting jobs in both “default” and “critical” queues

HireFire::Macro::Resque.queue("default", "critical")
# File lib/hirefire/macro/deprecated/resque.rb, line 23
def queue(*queues)
  queues = queues.flatten.map(&:to_s)
  queues = ::Resque.queues if queues.empty?

  return 0 if queues.empty?

  redis = ::Resque.redis
  worker_ids = Array(redis.smembers(:workers)).compact
  raw_jobs = redis.pipelined do |redis|
    worker_ids.map { |id| redis.get("worker:#{id}") }
  end
  jobs_in_progress = raw_jobs.map { |raw_job| ::Resque.decode(raw_job) || {} }

  jobs_in_queues = redis.pipelined do |redis|
    queues.map { |queue| redis.llen("queue:#{queue}") }
  end.map(&:to_i).sum

  in_progress_count = jobs_in_progress.count { |job| queues.include?(job["queue"]) }

  jobs_in_queues + in_progress_count
end