2012-06-27 30 views
46

Estoy interesado en configurar un servicio de supervisión que me avisará cada vez que haya demasiados trabajos en la cola Resque (tengo alrededor de 6 colas, tendré diferentes números para cada cola). También quiero configurar un servicio de monitoreo muy similar que me avise cuando excedo una cierta cantidad de trabajos fallidos en mi cola.Obtenga programáticamente el número de trabajos en una cola Resque

Mi pregunta es, hay muchas claves y confusión que veo afiliadas a Resque en mi servidor redis. No necesariamente veo una manera directa de obtener un recuento de trabajos por cola o la cantidad de trabajos fallidos. ¿Existe actualmente una forma trivial de obtener estos datos de redis?

Respuesta

112

sí es bastante fácil, teniendo en cuenta que está utilizando el Resque gem:

require 'resque' 

Resque.info 

devolverá un hash

por ejemplo,/=>

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

Así que para obtener el recuento tarea fallida , simplemente use:

Resque.info[:failed] 

que daría => 8761 # En mi ejemplo

Para obtener las colas utilizan:

Resque.queues 

esto devuelve una matriz

por ejemplo,/=>

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

Usted puede encontrar el número de trabajos por cola:

Resque.size(queue_name) 

por ejemplo/o Resque.size("superQ")Resque.size(Resque.queues[0]) .....

HTH?

+1

Esto es asombroso. ¡Gracias! – randombits

+1

Gracias por la publicación muy útil – vinothini

+1

Gran respuesta, gracias. – sa125

7

Aquí hay una secuencia de comandos bash que controlará el número total de trabajos en cola y el número de trabajos fallidos.

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 

Esto es para Resque 1.X, 2.0 podría tener diferentes nombres de teclas.

Cuestiones relacionadas