Search code examples
ruby-on-railsrubyredisresque

Programmatically get the number of jobs in a Resque queue


I am interested in setting up a monitoring service that will page me whenever there are too many jobs in the Resque queue (I have about 6 queues, I'll have different numbers for each queue). I also want to setup a very similar monitoring service that will alert me when I exceed a certain amount of failed jobs in my queue.

My question is, there is a lot of keys and confusion that I see affiliated with Resque on my redis server. I don't necessarily see a straight forward way to get a count of jobs per queue or the number of failed jobs. Is there currently a trivial way to grab this data from redis?


Solution

  • yes it's quite easy, given you're using the Resque gem:

    require 'resque'
    
    Resque.info 
    

    will return a hash

    e.g/ =>

    {
          :pending => 54338,
          :processed => 12772,
          :queues => 2,
          :workers => 0,
          :working => 0,
          :failed => 8761,
          :servers => [
          [0] "redis://192.168.1.10:6379/0"
        ],
        :environment => "development"
    }
    

    So to get the failed job count, simply use:

    Resque.info[:failed]
    

    which would give => 8761 #in my example

    To get the queues use:

    Resque.queues
    

    this returns a array

    e.g./ =>

    [
        [0] "superQ",
        [1] "anotherQ"
    ]
    

    You may then find the number of jobs per queue:

    Resque.size(queue_name)
    

    e.g/ Resque.size("superQ") or Resque.size(Resque.queues[0]) .....