require 'check_exception' class Check @name = nil attr_accessor :name @uri = nil attr_accessor :uri @timeout = nil # seconds attr_accessor :timeout @max_age = nil # seconds attr_accessor :max_age @reqeust = nil @passed = nil @error = nil attr_reader :error def initialize(params = {}) self.name = params[:name] self.uri = params[:uri] self.timeout = params[:timeout] || 5 self.max_age = params[:max_age] || 30 end def type raise "Override me!" end def perform_check raise "Override me!" end def do_it(force = false) return unless force || stale? @request = Time.now begin Timeout.timeout(timeout) do perform_check @passed = true end rescue Exception => err STDERR.puts "#{err.class}: #{err.message}\n#{err.backtrace.join("\n")}" @error = "#{err.class}: #{err.message}" @passed = false end end def stale? @request ||= Time.at(0) @request < Time.now - max_age end def passed? @passed end end