Module: HireFire::Macro::Resque

Extended by:
Resque
Included in:
Resque
Defined in:
lib/hirefire/macro/resque.rb

Instance Method Summary collapse

Instance Method Details

#queue(*queues) ⇒ Integer

Counts the amount of jobs in the (provided) Resque queue(s).

Examples:

Resque Macro Usage

HireFire::Macro::Resque.queue # all queues
HireFire::Macro::Resque.queue("email") # only email queue
HireFire::Macro::Resque.queue("audio", "video") # audio and video queues

Parameters:

  • queues (Array)

    provide one or more queue names, or none for “all”.

Returns:

  • (Integer)

    the number of jobs in the queue(s).



18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
# File 'lib/hirefire/macro/resque.rb', line 18

def queue(*queues)
  queues = queues.flatten.map(&:to_s)
  queues = ::Resque.queues if queues.empty?

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

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

  in_progress = jobs.inject(0) do |memo, job|
    memo += 1 if queues.include?(job["queue"])
    memo
  end

  in_queues + in_progress
end