class Sidekiq::History::Middleware
Attributes
msg[RW]
Public Instance Methods
call(worker, msg, queue, &block)
click to toggle source
# File lib/sidekiq/history/middleware.rb, line 6 def call(worker, msg, queue, &block) call_with_sidekiq_history(worker, msg, queue, &block) end
Private Instance Methods
call_with_sidekiq_history(worker, msg, queue) { || ... }
click to toggle source
# File lib/sidekiq/history/middleware.rb, line 12 def call_with_sidekiq_history(worker, msg, queue) worker_status = new_status start = Time.now.utc yield rescue StandardError => e worker_status[:failed] = 1 worker_status[:passed] = 0 worker_status[:last_job_status] = 'failed'.freeze raise e ensure worker_status[:runtime] ||= [elapsed(start)] worker_status[:last_runtime] = Time.now.utc worker_status[:last_job_status] ||= 'passed'.freeze save_entry_for_worker(worker_status, worker) end
elapsed(start)
click to toggle source
this methos already exist in Sidekiq::Middleware::Server::Logging class
# File lib/sidekiq/history/middleware.rb, line 58 def elapsed(start) (Time.now.utc - start).to_f.round(3) end
new_status()
click to toggle source
# File lib/sidekiq/history/middleware.rb, line 31 def new_status # worker.sidekiq_options_hash { failed: 0, passed: 1 } end
save_entry_for_worker(worker_status, worker)
click to toggle source
# File lib/sidekiq/history/middleware.rb, line 39 def save_entry_for_worker(worker_status, worker) Sidekiq.redis do |redis| history = "sidekiq:history:#{Time.now.utc.to_date}" value = redis.hget(history, worker.class.to_s) if value summary = Sidekiq.load_json(value).symbolize_keys [:failed, :passed, :runtime].each do |stat| worker_status[stat] = summary[stat] + worker_status[stat] end end redis.hset(history, worker.class.to_s, Sidekiq.dump_json(worker_status)) end end