summaryrefslogtreecommitdiff
path: root/lib/gitlab/health_checks/simple_abstract_check.rb
diff options
context:
space:
mode:
Diffstat (limited to 'lib/gitlab/health_checks/simple_abstract_check.rb')
-rw-r--r--lib/gitlab/health_checks/simple_abstract_check.rb43
1 files changed, 43 insertions, 0 deletions
diff --git a/lib/gitlab/health_checks/simple_abstract_check.rb b/lib/gitlab/health_checks/simple_abstract_check.rb
new file mode 100644
index 00000000000..fbe1645c1b1
--- /dev/null
+++ b/lib/gitlab/health_checks/simple_abstract_check.rb
@@ -0,0 +1,43 @@
+module Gitlab
+ module HealthChecks
+ module SimpleAbstractCheck
+ include BaseAbstractCheck
+
+ def readiness
+ check_result = check
+ if is_successful?(check_result)
+ HealthChecks::Result.new(true)
+ elsif check_result.is_a?(Timeout::Error)
+ HealthChecks::Result.new(false, "#{human_name} check timed out")
+ else
+ HealthChecks::Result.new(false, "unexpected #{human_name} check result: #{check_result}")
+ end
+ end
+
+ def metrics
+ with_timing method(:check) do |result, elapsed|
+ Rails.logger.error("#{human_name} check returned unexpected result #{result}") unless is_successful?(result)
+ [
+ metric("#{metric_prefix}_timeout", result.is_a?(Timeout::Error) ? 1 : 0),
+ metric("#{metric_prefix}_success", is_successful?(result) ? 1 : 0),
+ metric("#{metric_prefix}_latency", elapsed)
+ ]
+ end
+ end
+
+ private
+
+ def metric_prefix
+ raise NotImplementedError
+ end
+
+ def is_successful?(result)
+ raise NotImplementedError
+ end
+
+ def check
+ raise NotImplementedError
+ end
+ end
+ end
+end