class Mrsk::Utils::HealthcheckPoller TRAEFIK_HEALTHY_DELAY = 2 class HealthcheckError < StandardError; end class << self def wait_for_healthy(pause_after_ready: false, &block) attempt = 1 max_attempts = MRSK.config.healthcheck["max_attempts"] begin case status = block.call when "healthy" sleep TRAEFIK_HEALTHY_DELAY if pause_after_ready when "running" # No health check configured sleep MRSK.config.readiness_delay if pause_after_ready else raise HealthcheckError, "container not ready (#{status})" end rescue HealthcheckError => e if attempt <= max_attempts info "#{e.message}, retrying in #{attempt}s (attempt #{attempt}/#{max_attempts})..." sleep attempt attempt += 1 retry else raise end end info "Container is healthy!" end private def info(message) SSHKit.config.output.info(message) end end end