class WarmBlanket::WaitForPort

Waits for given port to be available

Constants

InvalidPort

Attributes

hostname[R]
logger[R]
port[R]
time_deadline[R]

Public Class Methods

new(hostname: 'localhost', port:, time_deadline: (Time.now + 90), logger: WarmBlanket.config.logger) click to toggle source
# File lib/warm_blanket/wait_for_port.rb, line 37
def initialize(hostname: 'localhost', port:, time_deadline: (Time.now + 90), logger: WarmBlanket.config.logger)
  port = Integer(port) rescue nil
  raise InvalidPort, "Invalid port (#{port.inspect})" unless (1...2**16).include?(port)

  @hostname = hostname
  @port = port
  @logger = logger
  @time_deadline = time_deadline
end

Public Instance Methods

call() click to toggle source
# File lib/warm_blanket/wait_for_port.rb, line 47
def call
  logger.debug "Waiting for #{hostname}:#{port} to be available"

  while true
    socket = nil
    begin
      socket = TCPSocket.new(hostname, port)
      logger.debug "Service at #{hostname}:#{port} is up"
      return true
    rescue StandardError => e
      logger.debug "Exception while waiting for port to be available #{e.class}: #{e.message}"
    ensure
      socket&.close
    end

    return false if Time.now >= time_deadline
    sleep 1
  end
end