diff options
Diffstat (limited to 'lib/health_checks')
-rw-r--r-- | lib/health_checks/checks/days_ago_check.rb | 28 | ||||
-rw-r--r-- | lib/health_checks/health_checkable.rb | 28 | ||||
-rw-r--r-- | lib/health_checks/health_checks.rb | 37 |
3 files changed, 93 insertions, 0 deletions
diff --git a/lib/health_checks/checks/days_ago_check.rb b/lib/health_checks/checks/days_ago_check.rb new file mode 100644 index 000000000..793fff586 --- /dev/null +++ b/lib/health_checks/checks/days_ago_check.rb @@ -0,0 +1,28 @@ +module HealthChecks + module Checks + class DaysAgoCheck + include HealthChecks::HealthCheckable + + attr_reader :days, :subject + + def initialize(args = {}, &block) + @days = args.fetch(:days) { 1 } + @subject = block + super(args) + end + + def failure_message + "#{ super }: #{ subject.call }" + end + + def success_message + "#{ super }: #{ subject.call }" + end + + def check + subject.call >= days.days.ago + end + + end + end +end diff --git a/lib/health_checks/health_checkable.rb b/lib/health_checks/health_checkable.rb new file mode 100644 index 000000000..5d674ca32 --- /dev/null +++ b/lib/health_checks/health_checkable.rb @@ -0,0 +1,28 @@ +module HealthChecks + module HealthCheckable + + attr_accessor :failure_message, :success_message + + def initialize(args = {}) + self.failure_message = args.fetch(:failure_message) { _('Failed') } + self.success_message = args.fetch(:success_message) { _('Success') } + end + + def name + self.class.to_s + end + + def check + raise NotImplementedError + end + + def ok? + check ? true : false + end + + def message + ok? ? success_message : failure_message + end + + end +end diff --git a/lib/health_checks/health_checks.rb b/lib/health_checks/health_checks.rb new file mode 100644 index 000000000..6f0c9de8e --- /dev/null +++ b/lib/health_checks/health_checks.rb @@ -0,0 +1,37 @@ +require 'health_checkable' + +Dir[File.dirname(__FILE__) + '/checks/*.rb'].each do |file| + require file +end + +module HealthChecks + extend self + + def all + @checks ||= [] + end + + def add(check) + if assert_valid_check(check) + all << check + check + else + false + end + end + + def each(&block) + all.each(&block) + end + + def ok? + all.all? { |check| check.ok? } + end + + private + + def assert_valid_check(check) + check.respond_to?(:check) + end + +end |