class GrpcServer::Engine

Constants

DEFAULT_ENV
DEFAULT_GRACEFUL_SHUTDOWN_SIGNALS
DEFAULT_HOST
DEFAULT_PORT
DEFAULT_THREADS

Public Class Methods

new(host: DEFAULT_HOST, port: DEFAULT_PORT, threads: DEFAULT_THREADS, env: DEFAULT_ENV, interceptors: [], signals: DEFAULT_GRACEFUL_SHUTDOWN_SIGNALS, logger: nil) click to toggle source

@param [String] host @param [Integer] port @param [Integer] threads the size of the thread pool the server uses to

run its threads. No more concurrent requests can be made than the
size of the thread pool

@param [String] env @param [Array<GRPC::ServerInterceptor>] interceptors An array of

GRPC::ServerInterceptor objects that will be used for intercepting
server handlers to provide extra functionality.

@param [Array<String>] signals List of String representing signals that

the user would like to send to the server for graceful shutdown

@param [Logger] logger

# File lib/grpc_server/engine.rb, line 28
def initialize(host:         DEFAULT_HOST,
               port:         DEFAULT_PORT,
               threads:      DEFAULT_THREADS,
               env:          DEFAULT_ENV,
               interceptors: [],
               signals:      DEFAULT_GRACEFUL_SHUTDOWN_SIGNALS,
               logger:       nil)
  @host    = host
  @port    = port
  @threads = threads
  @env     = env
  @logger  = logger || Logger.new($stdout)
  @signals = signals

  @server = GRPC::RpcServer.new(
    pool_size:    @threads,
    interceptors: interceptors,
  )
  @server.add_http2_port("#{@host}:#{@port}", :this_port_is_insecure)

  # Setup Health Cheker.
  # cf. https://github.com/grpc/grpc/blob/master/doc/health-checking.md
  @server.handle(health_checker)
  register_service_to_health_checker!(service: "")
end

Public Instance Methods

run() click to toggle source
# File lib/grpc_server/engine.rb, line 60
def run
  @logger.info("gRPC server starting...")
  @logger.info("* Max threads: #{@threads}")
  @logger.info("* Environment: #{@env}")
  @logger.info("* Listening on tcp://#{@host}:#{@port}")
  @logger.info("Use Ctrl-C to stop")
  @server.run_till_terminated_or_interrupted(@signals)
  @logger.info("Exiting")
end
set_handler(service) click to toggle source

@param [GRPC::GenericService] service

# File lib/grpc_server/engine.rb, line 55
def set_handler(service)
  @server.handle(service)
  register_service_to_health_checker!(service: service.service_name)
end
stop() click to toggle source
# File lib/grpc_server/engine.rb, line 70
def stop
  @server.stop
end

Private Instance Methods

health_checker() click to toggle source

@return [Grpc::Health::Checker]

# File lib/grpc_server/engine.rb, line 85
def health_checker
  @health_checker ||= Grpc::Health::Checker.new
end
register_service_to_health_checker!(service:) click to toggle source

@param [String] service

# File lib/grpc_server/engine.rb, line 77
def register_service_to_health_checker!(service:)
  health_checker.add_status(
    service,
    Grpc::Health::V1::HealthCheckResponse::ServingStatus::SERVING,
  )
end