Программно получить количество заданий в очереди Resque
Я заинтересован в настройке службы мониторинга, которая будет пересылать мне страницы, когда в очереди Resque слишком много заданий (у меня около 6 очередей, у меня будут разные номера для каждой очереди). Я также хочу настроить очень похожую службу мониторинга, которая будет предупреждать меня, когда я превышу определенное количество неудавшихся заданий в моей очереди.
Мой вопрос в том, что есть много ключей и путаницы, которые я вижу связанными с Resque на моем сервере redis. Я не обязательно вижу прямой способ получить количество заданий в очереди или количество неудавшихся заданий. Есть ли в настоящее время тривиальный способ захвата этих данных из redis?
Ответы
Ответ 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 может иметь разные имена ключей.