class Rack::HaproxyStatus::Endpoint

Constants

InvalidStatus
VALID_STATES

Public Class Methods

new(path:, io: ::File, extra_checks: []) click to toggle source
# File lib/rack/haproxy_status.rb, line 11
def initialize(path:, io: ::File, extra_checks: [])
  @path = path
  @io = io
  @extra_checks = extra_checks
end

Public Instance Methods

call(env) click to toggle source
# File lib/rack/haproxy_status.rb, line 17
def call(env)
  balancer_member = balancer_member?
  extra_checks_all_successful = extra_checks_all_successful?
  http_code = balancer_member && extra_checks_all_successful ? 200 : 503
  status = extra_checks_all_successful ? 'ok' : 'error'

  [
    http_code,
    {'Content-Type' => 'application/json'},
    [JSON.generate(status: status, member: balancer_member?)]
  ]
rescue InvalidStatus
  [500, {'Content-Type' => 'application/json'}, ['{"status": "unknown status"}']]
end

Private Instance Methods

balancer_member?() click to toggle source
# File lib/rack/haproxy_status.rb, line 34
def balancer_member?
  state = @io.read(@path).strip
  raise InvalidStatus, "Invalid state: #{state}" unless VALID_STATES.include?(state)
  state == "on"
end
extra_checks_all_successful?() click to toggle source
# File lib/rack/haproxy_status.rb, line 40
def extra_checks_all_successful?
  @extra_checks.map { |check| check.call() }.all?
end