aboutsummaryrefslogtreecommitdiffstats
path: root/lib/health_checks
diff options
context:
space:
mode:
Diffstat (limited to 'lib/health_checks')
-rw-r--r--lib/health_checks/checks/days_ago_check.rb28
-rw-r--r--lib/health_checks/health_checkable.rb28
-rw-r--r--lib/health_checks/health_checks.rb37
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