前提・実現したいこと
タイトルの通りです。
現在delayed_jobを使っており、sidekiqへ移行しているところです。
ユーザーのステータス更新に遅延処理を使いたく、
多重実行を防ぐため、JOBは処理状況を取得してviewにステータスを表示しておきたいです。
delayed_jobの場合は /delayed_jobs
にブラウザからアクセスすると実行中のJOBの状態が分かるので
jsで値を取ってきて処理状況をviewに表示できていたのですが
sidekiqの場合そのような機能がないため、どう実装するべきか迷っています。
試したこと
jsを使わず、modelに定義したメソッドでsidekiq内にJOBがあるかを見て判定させようとしています。
rb
1def async_job_enqueued?(user_id) 2 3 # 実行中JOBを取得して配列にする 4 job = Sidekiq::Workers.new.to_a 5 6 # ごにょごにょ でJOBに渡った user_id を取りにいく 7 return true if job.[ごにょごにょ].include?(user_id) 8 false 9 10end
これをviewでは if async_job_enqueued?(user.id)
として、
ユーザーのステータスを表示したい場所に入れると、
JOBがあれば 処理中...
、なければステータスを表示とできるのですが
[ごにょごにょ]の部分にSidekiqが持っている多次元配列・多次元Hashが大量に存在するため、
flatten一回で平坦化できなかったり、digで取りにいくのも難しく複雑化してしまう状況です。
難しく考えすぎている気がするのですが、いまいち似たような情報がなく、
・そもそももっといいアプローチがないか?
・ブラウザからsidekiqの進行状況をJSONで取得する方法がないか?
上記2点が知りたいです。
よろしくお願いいたします。
補足情報(FW/ツールのバージョンなど)
rails (6.0.3.2)
sidekiq (6.1.1)
回答1件
あなたの回答
tips
プレビュー