module Eye::Process::Watchers
Public Instance Methods
add_watchers(force = false)
click to toggle source
# File lib/eye/process/watchers.rb, line 3 def add_watchers(force = false) return unless self.up? remove_watchers if force if @watchers.blank? # default watcher :check_alive add_watcher(:check_alive, self[:check_alive_period]) do check_alive end if self[:check_identity] add_watcher(:check_identity, self[:check_identity_period]) do check_identity end end # monitor children pids if self[:monitor_children] add_watcher(:check_children, self[:children_update_period]) do add_or_update_children end end # monitor conditional watchers start_checkers else warn 'add_watchers failed, watchers are already present' end end
remove_watchers()
click to toggle source
# File lib/eye/process/watchers.rb, line 34 def remove_watchers @watchers.each_value { |h| h[:timer].cancel } @watchers = {} end
Private Instance Methods
add_watcher(type, period = 2, subject = nil, &block)
click to toggle source
# File lib/eye/process/watchers.rb, line 41 def add_watcher(type, period = 2, subject = nil, &block) return if @watchers[type] debug { "adding watcher: #{type}(#{period})" } timer = every(period.to_f) do debug { "check #{type}" } block.call(subject) end @watchers[type] ||= { timer: timer, subject: subject } end
start_checker(name, cfg)
click to toggle source
# File lib/eye/process/watchers.rb, line 58 def start_checker(name, cfg) # cfg: {:type => :memory, :every => 5.seconds, :below => 100.megabytes, :times => [3, 5]} subject = Eye::Checker.create(pid, cfg, current_actor) add_watcher("check_#{name}".to_sym, subject.every, subject, &method(:watcher_tick).to_proc) if subject end
start_checkers()
click to toggle source
# File lib/eye/process/watchers.rb, line 54 def start_checkers self[:checks].each { |name, cfg| start_checker(name, cfg) } end
watcher_tick(subject)
click to toggle source
# File lib/eye/process/watchers.rb, line 64 def watcher_tick(subject) # double up? test needed because state can changed while subject.check subject.fire if up? && !subject.check && up? end