Sha256: 3697fe01a49faafd0a3a097f073bba496568922cefca71864d809c7dfac27c4a
Contents?: true
Size: 1.55 KB
Versions: 2
Compression:
Stored size: 1.55 KB
Contents
require 'singleton' class HealthReporter include Singleton def self.self_test @@self_test end def self.self_test=(self_test) @@self_test = self_test end def self.unhealthy_cache_ttl @@unhealthy_cache_ttl end def self.unhealthy_cache_ttl=(unhealthy_cache_ttl) @@unhealthy_cache_ttl = unhealthy_cache_ttl end def self.healthy_cache_ttl @@healthy_cache_ttl end def self.healthy_cache_ttl=(healthy_cache_ttl) @@healthy_cache_ttl = healthy_cache_ttl end @@self_test = lambda{ true } @@unhealthy_cache_ttl = 30 @@healthy_cache_ttl = 60 @@last_check_time = nil @@healthy = nil #Initialized as nil so that first call will set it @@semaphore = Mutex.new # TODO # def register_dependency_check(url:, code: 200) # raise "Configured URL #{url} is invalid" unless url =~ URI::regexp # # dependencies[] # end def self.healthy? @@semaphore.synchronize { perform_health_check if @@healthy.nil? or cache_ttl_expired @@healthy } end private def self.perform_health_check @@healthy = sanitize(@@self_test.call) @@last_check_time = Time.now end def self.sanitize(result) unless [true, false].include?(result) raise "Invalid non-boolean response from registered self-check lambda: #{result.to_s}" end result end def self.cache_ttl_expired return true if @@last_check_time.nil? Time.now > (@@last_check_time + ttl) end def self.ttl return @@healthy_cache_ttl if @@healthy @@unhealthy_cache_ttl end end
Version data entries
2 entries across 2 versions & 1 rubygems
Version | Path |
---|---|
health-reporter-0.0.3 | lib/health_reporter/reporter.rb |
health-reporter-0.0.2 | lib/health_reporter/reporter.rb |