]> CyberLeo.Net >> Repos - CDN/status.git/blob - lib/check.rb
Add age to result view
[CDN/status.git] / lib / check.rb
1 require 'check_exception'
2
3 class Check
4   @name = nil
5   attr_accessor :name
6
7   @uri = nil
8   attr_accessor :uri
9
10   @timeout = nil # seconds
11   attr_accessor :timeout
12
13   @max_age = nil # seconds
14   attr_accessor :max_age
15
16   @reqeust = nil
17   @passed = nil
18   @error = nil
19   attr_reader :error
20
21   def initialize(params = {})
22     self.name = params[:name]
23     self.uri = params[:uri]
24     self.timeout = params[:timeout] || 5
25     self.max_age = params[:max_age] || 75
26   end
27
28   def type
29     raise "Override me!"
30   end
31
32   def perform_check
33     raise "Override me!"
34   end
35
36   def do_it(force = false)
37     return unless force || stale?
38     @request = Time.now
39     begin
40       Timeout.timeout(timeout) do
41         perform_check
42         @passed = true
43       end
44     rescue StandardError, Timeout::Error => err
45       STDERR.puts "In #{type}(#{name}): #{err.class}: #{err.message}\n#{err.backtrace.join("\n")}"
46       @error = "#{err.class}: #{err.message}"
47       @passed = false
48     end
49   end
50
51   def age
52     @request ||= Time.at(0)
53     Time.now - @request
54   end
55
56   def stale?
57     @request ||= Time.at(0)
58     @request < Time.now - max_age
59   end
60
61   def passed?
62     @passed
63   end
64 end