概要
Sidekiqにキューされていたらperformしたくないときに使った
コード
class User < ApplicationRecord
def scheduled?
Sidekiq::ScheduledSet.new.select{|q| q.args.first['queue_name'] == "hogehoge"}.select{|q| q.args.first['arguments'].first == self.id}.any?
end
def queued?
Sidekiq::Queue.new('hogehoge').select{|q| q.args.first['arguments'].first == self.id}.any?
end
def running?
Sidekiq::Workers.new.select{|process_id, thread_id, job|
JSON.parse(job['payload'])['args'].first['queue_name'] == "hogehoge"
}.select{|process_id, thread_id, job|
JSON.parse(job['payload'])['args'].first['arguments'].first == self.id
}.any?
end
end
Tips
- queue_nameと引数で判定している
- Jobの第一引数にモデルのidを指定しているので、それで判別
- 同じようにdeadやretryのものも取得できるはず