web-dev-qa-db-fra.com

Sidekiq liste tous les travaux [en file d'attente + en cours d'exécution]

Existe-t-il un moyen d'obtenir une liste de tous les travaux actuellement dans la file d'attente et en cours d'exécution? En gros, je veux savoir si un job d'une classe donnée est déjà là, je ne veux pas insérer mon autre job. J'ai vu une autre option mais je veux le faire de cette façon.

Je peux voir ici comment obtenir la liste des travaux dans la file d'attente.

queue = Sidekiq::Queue.new("mailer")
queue.each do |job|
  job.klass # => 'MyWorker'
end

d'après ce que je comprends, cela n'inclura pas les travaux de traitement/d'exécution. Une façon de les obtenir?

9
aks

si vous souhaitez répertorier tous les travaux en cours d'exécution à partir de la console, essayez ceci

workers = Sidekiq::Workers.new
workers.each do |_process_id, _thread_id, work|
  p work
end

un work est un hachage.

pour répertorier toutes les données de file d'attente.

queue = Sidekiq::Queue.all
queue.each do |job|
  p job.klass, job.args, job.jid
end

pour une file d'attente spécifique, changez-le en Sidekiq::Queue.new('queue_name')

de même, vous pouvez obtenir tous les travaux planifiés en utilisant Sidekiq::ScheduledSet.new

16
Haseeb Eqx

En supposant que vous ayez passé le hachage comme argument à Sidekiq lorsque vous vous êtes mis en file d'attente.

args = {
  "student_id": 1,
  "student_name": "Michael Moore"
    }

YourWorker.perform_in(1.second,args)

Puis, n'importe où dans votre application, vous pouvez la récupérer comme suit

      ss = Sidekiq::ScheduledSet.new
      student_id_list = ss.map{|job| job['args'].first["student_id"]}
1
zawhtut