class Sidekiq::Results::Middleware

Public Instance Methods

call(worker, msg, queue) { || ... } click to toggle source
# File lib/sidekiq/results/middleware.rb, line 8
def call(worker, msg, queue)
  data = {
    queue: queue,
    status: 'busy',
    started_at: Time.now.utc.to_f,
    processor: identity,
  }

  start = msg.merge(data).freeze
  save_result(start)

  yield
rescue => e
  data.merge!(
    status: 'failed',
    error_class: e.class.name,
    error_message: e.message,
    error_backtrace: e.backtrace,
  )

  raise e
else
  data.merge!(
    status: 'processed',
  )
ensure
  data.merge!(
    finished_at: Time.now.utc.to_f,
  )

  finish = msg.merge(data).freeze
  remove_result(start)
  save_result(finish)
end

Private Instance Methods

remove_result(msg) click to toggle source
# File lib/sidekiq/results/middleware.rb, line 57
def remove_result(msg)
  payload = Sidekiq.dump_json(msg)

  Sidekiq.redis do |conn|
    conn.zrem(LIST_KEY, payload)
  end
end
save_result(msg) click to toggle source
# File lib/sidekiq/results/middleware.rb, line 45
def save_result(msg)
  payload = Sidekiq.dump_json(msg)

  Sidekiq.redis do |conn|
    conn.zadd(LIST_KEY, msg[:started_at], payload)

    unless Sidekiq.results_max_count == false
      conn.zremrangebyrank(LIST_KEY, 0, -(Sidekiq.results_max_count + 1))
    end
  end
end