class AtomicSidekiq::AtomicOperation::Heartbeat

Constants

HEARTBEAT_SCRIPT

Public Instance Methods

perform(jid:, timeout:) click to toggle source
# File lib/atomic_sidekiq/atomic_operation/heartbeat.rb, line 9
def perform(jid:, timeout:)
  key = in_flight_job_key(jid)
  return unless key

  redis do |conn|
    conn.eval(HEARTBEAT_SCRIPT, [key], [expiration_date(timeout)])
  end
end

Private Instance Methods

expiration_date(timeout) click to toggle source
# File lib/atomic_sidekiq/atomic_operation/heartbeat.rb, line 20
def expiration_date(timeout)
  Time.now.utc.to_i + timeout
end
in_flight_job_key(jid) click to toggle source
# File lib/atomic_sidekiq/atomic_operation/heartbeat.rb, line 24
def in_flight_job_key(jid)
  matcher = in_flight_keymaker.job_matcher(jid)
  it = 0
  loop do
    it, keys = redis { |conn| conn.scan(it, match: matcher) }
    return keys[0] if keys.count > 0

    it = it.to_i
    return if it.zero?
  end
end