2015-11-06 14 views
6

Używam Sidekiq do zarządzania zadaniami za pomocą aplikacji Rails. Chciałbym wiedzieć, w jaki sposób można uzyskać argumenty dotyczące nieudanych zadań (identyfikatory, obiekty, komunikat o błędzie itp.)? W WebUI wszystko, co dostajesz, to liczba nieudanych prac. A jeśli dobrze rozumiem, domyślnie jest sumować wszystkie czasy, w których dana praca zawiodła. Mam wdrożoną aplikację i działa ona na kilku pracownikach. Trudno jest przejść przez każdego pracownika i spróbować dowiedzieć się, zwłaszcza gdy masz sidekiq.log, który ma wiele dni.Znajdź listę nieudanych zadań Sidekiq z ich argumentami

Szukam odpowiedzi tutaj i w Internecie. Jeden z najbliższych został opisany w poniższych linkach.

How to find failed jobs list in sidekiq?

Pozwala to, aby dowiedzieć się, jak wiele udało pracy mam na pewien okres czasu. Jednak nadal nie wiem, jak dowiedzieć się, co praca zawiodła i dlaczego.

Zasadniczo chciałbym jakoś zebrać job_ids i okresowo sprawdzać, które z nich się nie powiodło, lub jeśli jest łatwiejszy sposób, po prostu zapytaj Sidekiq/Redis i zobacz, jakie są argumenty i błędy nieudanych prac.

ja również odwiedziliśmy ten link: Get error message out of Sidekiq job

Oto przykład praca Używam

class ClassificationJob < ActiveJob::Base 
queue_as :default 

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

Próbowałem zmodyfikować do tego

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 

Ale to wypluwa następujący błąd:

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

Dzięki,

Yannick

Odpowiedz

4

Szukasz prób. "Ponowna próba" jest terminem Sidekiqa dla zadania, które się nie powiodło i które zostanie powtórzone w przyszłości.

Web UI wykorzystuje API Sidekiq udokumentowane na stronie wiki API do listy ponownych prób na karcie 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

Dziękuję za odpowiedź. Z mojego zrozumienia wynika, że ​​istnieją zadania, które się nie powiodły i zostaną ponowione. W interfejsie webUI są one wyświetlane po kliknięciu przycisku "Retries". Inne nie powiodły się (nie ma sposobu, aby kliknąć).Wydaje mi się, że niektóre z nich nie zostały nawet powtórzone (w przeciwnym razie uzyskanie dostępu do listy nie powiodłoby się, ponieważ muszą one być wielokrotnie ponawiane). Moje szczególne zainteresowanie dotyczy tych. Czy źle interpretuję cokolwiek tutaj? – Yann

+2

"Niepowodzenie" jest próbą wykonania zlecenia, która spowodowała błąd. Praca może się nie udać N razy, dlatego niepowodzenia są niemożliwe do skasowania: to tylko licznik. Masz rację, że jeśli zadanie wyłącza ponawianie, jest efemeryczne i nie będzie wyświetlane w interfejsie użytkownika, z wyjątkiem niepowodzeń inkrementacji. –

+0

Dziękuję za twoje dobre i szybkie odpowiedzi Mike. – Yann

1

Właśnie szukał sposobu na zawężenia dół inna rodzaje awarii w konsoli z danej kolejki.

Po trochę kopania,

Aby uzyskać listę swoich pracowników:

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. 

args hash ma następujące klawisze:

job_class 
job_id 
queue_name 
arguments 
locale 

Myślę, że trzeba mieć ten klejnot do pracy: https://github.com/mhfs/sidekiq-failures

Powiązane problemy