class Hanami::Events::CloudPubsub::HealthCheckServer

Simple server for health checks

Attributes

logger[R]
runner[R]

Public Class Methods

new(runner, logger) click to toggle source
# File lib/hanami/events/cloud_pubsub/health_check_server.rb, line 10
def initialize(runner, logger)
  @runner = runner
  @logger = logger
end

Public Instance Methods

run_in_background(on_shutdown: nil) click to toggle source
# File lib/hanami/events/cloud_pubsub/health_check_server.rb, line 25
def run_in_background(on_shutdown: nil)
  prom = Concurrent::Promise.execute do
    start
    on_shutdown&.call(@server)
  end

  prom.catch { |err| logger.error(err) }
end
shutdown() click to toggle source
# File lib/hanami/events/cloud_pubsub/health_check_server.rb, line 20
def shutdown
  logger.info 'Shutting down healthcheck server'
  @server.shutdown
end
start() click to toggle source
# File lib/hanami/events/cloud_pubsub/health_check_server.rb, line 15
def start
  logger.info 'Starting healthcheck server on port 0.0.0.0:8081'
  start_server
end

Private Instance Methods

health_endpoint(_env) click to toggle source
# File lib/hanami/events/cloud_pubsub/health_check_server.rb, line 63
def health_endpoint(_env)
  headers = { 'Content-Type' => 'text/plain' }
  status = runner.healthy? ? 200 : 503
  body = [runner.debug_info]
  [status, headers, body]
end
rack_app() click to toggle source
# File lib/hanami/events/cloud_pubsub/health_check_server.rb, line 52
def rack_app
  health_endpoint_app = method(:health_endpoint)

  Rack::Builder.new do |builder|
    builder.use Rack::Deflater
    builder.use Yabeda::Prometheus::Exporter if defined?(Yabeda::Prometheus::Exporter)

    builder.run health_endpoint_app
  end
end
start_server() click to toggle source
# File lib/hanami/events/cloud_pubsub/health_check_server.rb, line 38
def start_server
  require 'rack'

  Rack::Handler::WEBrick.run(
    rack_app,
    AccessLog: [],
    Host: '0.0.0.0',
    Port: 8081,
    Logger: WEBrick::Log.new('/dev/null')
  ) do |server|
    @server = server
  end
end