Подтвердить что ты не робот

Программно получить количество заданий в очереди Resque

Я заинтересован в настройке службы мониторинга, которая будет пересылать мне страницы, когда в очереди Resque слишком много заданий (у меня около 6 очередей, у меня будут разные номера для каждой очереди). Я также хочу настроить очень похожую службу мониторинга, которая будет предупреждать меня, когда я превышу определенное количество неудавшихся заданий в моей очереди.

Мой вопрос в том, что есть много ключей и путаницы, которые я вижу связанными с Resque на моем сервере redis. Я не обязательно вижу прямой способ получить количество заданий в очереди или количество неудавшихся заданий. Есть ли в настоящее время тривиальный способ захвата этих данных из redis?

4b9b3361

Ответ 1

да, это довольно легко, учитывая, что вы используете Resque gem:

require 'resque'

Resque.info 

вернет хэш

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"
}

Итак, чтобы получить счет неудавшейся работы, просто используйте:

Resque.info[:failed]

который дал бы = > 8761 # в моем примере

Чтобы использовать очереди:

Resque.queues

возвращает массив

e.g./= >

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

Затем вы можете найти количество заданий на каждую очередь:

Resque.size(queue_name)

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

НТН?

Ответ 2

Вот bash script, который будет отслеживать общее количество заданий в очереди и количество неудачных заданий.

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 может иметь разные имена ключей.