Sha256: 506093c843a78f3e2d2459b4113b9c5958e3fb76891f0a3451c5a68b715bf54c
Contents?: true
Size: 1.46 KB
Versions: 2
Compression:
Stored size: 1.46 KB
Contents
# frozen_string_literal: true require "webrick" require "anycable/server" module AnyCable # Server for HTTP healthchecks. # # Basic usage: # # # create a new healthcheck server for a specified # # gRPC server lisening on the port # health_server = AnyCable::HealthServer.new(grpc_server, port) # # # start health server in background # health_server.start # # # stop health server # health_server.stop class HealthServer SUCCESS_RESPONSE = [200, "Ready"].freeze FAILURE_RESPONSE = [503, "Not Ready"].freeze attr_reader :grpc_server, :port, :path, :server def initialize(grpc_server, port:, path: "/health", logger: AnyCable.logger) @grpc_server = grpc_server @port = port @path = path @logger = logger @server = build_server end def start return if running? Thread.new { server.start } logger.info "HTTP health server is listening on localhost:#{port} and mounted at \"#{path}\"" end def stop return unless running? server.shutdown end def running? server.status == :Running end private attr_reader :logger def build_server WEBrick::HTTPServer.new( Port: port, Logger: logger, AccessLog: [] ).tap do |server| server.mount_proc path do |_, res| res.status, res.body = grpc_server.running? ? SUCCESS_RESPONSE : FAILURE_RESPONSE end end end end end
Version data entries
2 entries across 2 versions & 1 rubygems
Version | Path |
---|---|
anycable-0.6.0 | lib/anycable/health_server.rb |
anycable-0.6.0.rc1 | lib/anycable/health_server.rb |