これなに
その昔、仕事で sidekiq を使っていたのですが、障害で死んだ sidekiq のジョブをポチポチ調べるのがしんどかったので、調べた中でいろいろわかったことをメモ。
基本的には個人的な雑記なので、読みやすさや正確性云々は考えてません。悪しからず。
あとフレッシュで正確な情報は sidekiq の wiki ページを見るのが良い。
※ 2023年10月に note に書いた記事を移行しただけなのですが、基本的な仕様は変わっていないはず。もし細かいところが変わっている場合はご容赦ください。
便利な一覧表
-
Sidekiq::DeadSet.new
: 失敗 -
Sidekiq::Workers.new
: 実行中 -
Sidekiq::Queue.new
: 待機中 -
Sidekiq::ScheduledSet.new
: 実行予約(あんま使い所ないので割愛) -
Sidekiq::RetrySet.new
: リトライ(同上)
失敗したジョブの情報取得する
失敗したジョブをすべて取得する
class: CronJob::AbcJob, job_id: fd02749d-29d7-4a1c-938d-7bbbc11ba353, enqueued_at: 2023-10-22T03:05:04Z
的な感じで書くことでリストできる
dead_jobs = Sidekiq::DeadSet.new
dead_jobs.map {|job| "class: #{job["args"][0]["job_class"]}, job_id: #{job["args"][0]["job_id"]}, enqueued_at: #{job["args"][0]["enqueued_at"]}"}
特定の失敗ジョブの情報を取得する
時間を指定して、dead_abc_jobs.first/last/length とかも使える
dead_jobs = Sidekiq::DeadSet.new
dead_abc_jobs = dead_jobs.scan("AbcJob").select{|job| job.args[0]["enqueued_at"].to_time > Date.new(2020,1,12)}
実行中のジョブの情報を取得する
実行中のジョブをすべて取得する
とりあえず全部出す
running_jobs = Sidekiq::Workers.new
running_jobs.each {|job| job}
待機中のジョブの情報を取得する
待機中のジョブを全て取得する
とりあえず全部出す
queuing_jobs = Sidekiq::Queue.new
queuing_jobs.each