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

wgx48brx  于 2022-11-29  发布在  Ruby
关注(0)|答案(3)|浏览(117)

我想设置一个监视服务,当Resque队列中的作业过多时(我有大约6个队列,每个队列的编号不同),该服务将寻呼我。我还想设置一个非常类似的监视服务,当队列中的失败作业超过一定数量时,该服务将向我发出警报。
我的问题是,在我的redis服务器上,我看到了很多与Resque相关的键和混乱。我不一定看到一个直接的方法来获得每个队列的作业数或失败的作业数。目前有没有一个简单的方法来从redis获取这些数据?

h6my8fg2

h6my8fg21#

是的,如果您使用的是Resque gem

require 'resque'

Resque.info

将返回哈希值
例如g/ =〉

{
      :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"
]

然后,您可以找到每个队列的作业数:

Resque.size(queue_name)

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

odopli94

odopli942#

下面是一个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可能有不同的键名。

axr492tv

axr492tv3#

还有一个方法Resque.queue_sizes,它返回队列名称和大小的散列
请求队列大小=〉{“默认”=〉0,“慢”=〉0}

相关问题