以编程方式获取Resque队列中的作业数量

我有兴趣设置一个监视服务,当Resque队列中有太多的工作时(我有大约6个队列,每个队列会有不同的编号),这个监视服务会给我打电话。 我也想设置一个非常类似的监控服务,当我超过我的队列中的一定数量的失败作业时,会提醒我。

我的问题是,在我的redis服务器上,有很多关键和混乱,我看到Resque附属于Resque。 我不一定会看到一个简单的方法来计算每个队列的作业数量或失败的作业数量。 目前是否有一个简单的方法来从redis获取这些数据?

是的,这很容易,因为你使用的是Resquegem :

require 'resque' Resque.info 

会返回一个散列

例如/ =>

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

所以为了让失败的工作计数,只需使用:

 Resque.info[:failed] 

这将给予=> 8761#在我的例子

要获得队列使用:

 Resque.queues 

这将返回一个数组

例如/ =>

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

然后你可以find每个队列的作业数量:

 Resque.size(queue_name) 

例如/ Resque.size("superQ")Resque.size(Resque.queues[0]) …..

HTH?

这是一个bash脚本,它将监视排队的作业总数和失败作业的数量。

 while : do let sum=0 let errors=$(redis-cli llen resque:failed) for s in $(redis-cli keys resque:queue:*) do let sum=$sum+$(redis-cli llen $s) done echo $sum jobs queued, with $errors errors sleep 1 # sleep 1 second, probably want to increase this done 

这是Resque 1.X,2.0可能有不同的键名称。