class Heartbleed

Constants

VERSION

Public Class Methods

new(interval) click to toggle source
# File lib/heartbleed.rb, line 17
def initialize(interval)
  @interval = interval
  beat
end
raise_when_missed(interval) { |heartbeat| ... } click to toggle source
# File lib/heartbleed.rb, line 6
def self.raise_when_missed(interval)
  heartbeat = new(interval)
  heartbeat.start

  begin
    yield heartbeat
  ensure
    heartbeat.stop
  end
end

Public Instance Methods

beat() click to toggle source
# File lib/heartbleed.rb, line 42
def beat
  @check_at = now + @interval
end
start() click to toggle source
# File lib/heartbleed.rb, line 22
def start
  mainline = Thread.current

  @thread = Thread.new do
    loop do
      pause = @check_at - now
      if pause <= 0
        mainline.raise Missed
        break
      end
      sleep pause
    end
  end
end
stop() click to toggle source
# File lib/heartbleed.rb, line 37
def stop
  @thread.kill
  @thread.join
end

Private Instance Methods

now() click to toggle source
# File lib/heartbleed.rb, line 48
def now
  Process.clock_gettime(Process::CLOCK_MONOTONIC)
end