web-dev-qa-db-ja.com

Resqueキュー内のジョブの数をプログラムで取得する

Resqueキューにジョブが多すぎる場合にページングする監視サービスをセットアップすることに興味があります(約6つのキューがあり、キューごとに異なる番号があります)。また、非常によく似た監視サービスをセットアップして、キュー内の失敗したジョブが一定量を超えたときに警告を発します。

私の質問は、私のredisサーバーにはResqueと提携している多くのキーと混乱があるということです。キューごとのジョブ数や失敗したジョブの数を取得するための単純な方法を必ずしも見ているわけではありません。現在、このデータをredisから取得する簡単な方法はありますか?

55
randombits

Resque gem を使用している場合、それは非常に簡単です。

_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"
]
_

その後、キューごとのジョブ数を見つけることができます。

_Resque.size(queue_name)
_

例:Resque.size("superQ")またはResque.size(Resque.queues[0]) .....

HTH?

131
gef

キューに入れられたジョブの総数と失敗したジョブの数を監視する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には異なるキー名が付いている場合があります。

8
The Who