class Snmp2mkr::EngineThreads::Timer
Constants
- Entry
Attributes
entries[R]
logger[R]
thread[R]
Public Class Methods
new(logger: Logger.new($stdout))
click to toggle source
# File lib/snmp2mkr/engine_threads/timer.rb, line 6 def initialize(logger: Logger.new($stdout)) @shutdown = false @entries = [] @logger = logger @thread = nil end
Public Instance Methods
add(interval, &hook)
click to toggle source
# File lib/snmp2mkr/engine_threads/timer.rb, line 15 def add(interval, &hook) entry = Entry.new(interval, hook, now - interval + rand(15)) logger.info "Added timer #{entry.inspect}" @entries << entry end
join()
click to toggle source
# File lib/snmp2mkr/engine_threads/timer.rb, line 25 def join return unless running? @thread.join end
kick(entry)
click to toggle source
# File lib/snmp2mkr/engine_threads/timer.rb, line 61 def kick(entry) logger.debug "timer kick entry #{entry.inspect}" entry.last = now Thread.new do begin entry.hook.call rescue Exception => e logger.error "#{e.inspect}\n\t#{e.backtrace.join("\n\t")}" end end end
main_loop()
click to toggle source
# File lib/snmp2mkr/engine_threads/timer.rb, line 41 def main_loop logger.info "timer started" loop do break if @shutdown tick sleep 1 end logger.info "timer shutdown" rescue Exception => e logger.error "#{e.inspect}\n\t#{e.backtrace.join("\n\t")}" retry end
running?()
click to toggle source
# File lib/snmp2mkr/engine_threads/timer.rb, line 21 def running? @thread && @thread.alive? end
start()
click to toggle source
# File lib/snmp2mkr/engine_threads/timer.rb, line 30 def start return if running? @shutdown = false @thread = Thread.new(&method(:main_loop)) end
stop()
click to toggle source
# File lib/snmp2mkr/engine_threads/timer.rb, line 36 def stop return unless running? @shutdown = true end
tick()
click to toggle source
# File lib/snmp2mkr/engine_threads/timer.rb, line 54 def tick t = now @entries.each do |entry| kick(entry) if (now - entry.last) > entry.interval end end
Private Instance Methods
now()
click to toggle source
# File lib/snmp2mkr/engine_threads/timer.rb, line 75 def now Process.clock_gettime(Process::CLOCK_MONOTONIC) end