2015-11-06 5 views
6

Я использую Sidekiq для управления заданиями с помощью Rails APP. Я хотел бы знать, как вы получаете аргументы неудачных заданий (идентификаторы, объекты, сообщение об ошибке и т. Д.)? В WebUI все, что вы получаете, это nr неудачных заданий. И если я правильно понимаю, значение по умолчанию заключается в том, чтобы складывать все время, когда данное задание завершилось неудачно. Я развернул мое приложение, и оно работает на нескольких рабочих. Трудно пройти через каждого работника и попытаться выяснить, особенно если у вас есть sidekiq.log, которому много дней.Найти список неудачных заданий Sidekiq с их аргументами

Я ищу ответ здесь и в Интернете. Один из ближайших был описан на следующих ссылках.

How to find failed jobs list in sidekiq?

Это позволяет выяснить, как много неудачных работ у меня в течение определенного периода времени. Тем не менее, я до сих пор не знаю, как узнать, чем закончилась работа и почему.

В принципе, я хотел бы как-то собрать идентификаторы job_ids и периодически проверять, какие из них были неудачными или если есть более простой способ, просто запросите Sidekiq/Redis и посмотрите, какие аргументы и ошибки неудачных заданий.

Я также посетил эту ссылку: Get error message out of Sidekiq job

Вот пример работы я использую

class ClassificationJob < ActiveJob::Base 
queue_as :default 

def perform(entity) 
    entity.preprocess! 
    entity.classify! 
end 
end 

Я попытался изменить к этому

class ClassificationJob < ActiveJob::Base 
queue_as :default 

def perform(entity) 
    entity.preprocess! 
    entity.classify! 
    store entity_id: entity.id.to_s 

    entity_id = retrieve :entity_id 
end 
end 

Но плюет следующее сообщение об ошибке:

ArgumentError: You cannot include Sidekiq::Worker in an ActiveJob: ClassificationJob 

Спасибо,

Янник

ответ

4

Вы ищете повторы. «Повторить» - это термин Sidekiq для работы, которая потерпела неудачу и будет повторена в будущем.

Веб-интерфейс использует API Sidekiq документированный на странице API вики к списку попыток на вкладке Retries:

https://github.com/mperham/sidekiq/wiki/API#retries

retries = Sidekiq::RetrySet.new 
retries.each do |job| 
    p [job.klass, job.args, job.jid] 
end 
+0

Благодарим вас за ответ. По моему мнению, есть рабочие места, которые потерпели неудачу и будут повторены. В webUI они перечисляются, когда один клик на кнопке «Retries». Другие неудачны (нет способа щелкнуть).Мне кажется, что некоторые из них даже не были повторены (в противном случае потребуется больше времени, чтобы попасть в неудачный список из-за того, что их нужно многократно повторять). Мой особый интерес к этим. Я что-то неправильно интерпретирую здесь? – Yann

+2

«Сбой» - это попытка выполнения задания, которая вызвала ошибку. Задание может быть неудачно N раз, поэтому неудачи нечеткие: это просто счетчик. Вы правы, что если задание отключает повторы, оно является эфемерным и не отображается в пользовательском интерфейсе, кроме как для увеличения сбоев. –

+0

Спасибо за ваши добрые и быстрые ответы Майка. – Yann

1

Я просто искал способ сузить разные типы сбоев в консоли из заданной очереди.

После недолгого копания,

Чтобы получить список ваших работников:

query = Sidekiq::Failures::FailureSet.new.map(&:item) 

query.map { |item| item['class'] }.uniq # Gives you a sense of what failed 
query.map { |item| item['wrapped'] }.uniq # Gives you the job's original class 
query.map { |item| item['queue'] }.uniq # Gives you a name of each of the queues 
query.map { |item| item['args'] }.uniq # This would give you all the argument hashes for all failures. 

арг хэш имеет следующие ключи:

job_class 
job_id 
queue_name 
arguments 
locale 

Я думаю, вы должны иметь этот камень для его работы: https://github.com/mhfs/sidekiq-failures

Смежные вопросы