Sha256: 37f80c2bb931d0c0a44bf6c330da5d615f94a9328c0c93e88a0aa37937c71a9e

Contents?: true

Size: 1.01 KB

Versions: 67

Compression:

Stored size: 1.01 KB

Contents

#!/usr/bin/env ruby

# A sample pre-connect check
#
# Warms DNS before connecting to hosts in parallel
#
# These environment variables are available:
# KAMAL_RECORDED_AT
# KAMAL_PERFORMER
# KAMAL_VERSION
# KAMAL_HOSTS
# KAMAL_ROLE (if set)
# KAMAL_DESTINATION (if set)
# KAMAL_RUNTIME

hosts = ENV["KAMAL_HOSTS"].split(",")
results = nil
max = 3

elapsed = Benchmark.realtime do
  results = hosts.map do |host|
    Thread.new do
      tries = 1

      begin
        Socket.getaddrinfo(host, 0, Socket::AF_UNSPEC, Socket::SOCK_STREAM, nil, Socket::AI_CANONNAME)
      rescue SocketError
        if tries < max
          puts "Retrying DNS warmup: #{host}"
          tries += 1
          sleep rand
          retry
        else
          puts "DNS warmup failed: #{host}"
          host
        end
      end

      tries
    end
  end.map(&:value)
end

retries = results.sum - hosts.size
nopes = results.count { |r| r == max }

puts "Prewarmed %d DNS lookups in %.2f sec: %d retries, %d failures" % [ hosts.size, elapsed, retries, nopes ]

Version data entries

67 entries across 59 versions & 8 rubygems

Version Path
itsi-0.1.11 sandbox/itsi_sandbox_rails/.kamal/hooks/pre-connect.sample
itsi-0.1.9 sandbox/itsi_sandbox_rails/.kamal/hooks/pre-connect.sample
itsi-0.1.8 sandbox/itsi_sandbox_rails/.kamal/hooks/pre-connect.sample
kamal-2.5.3 lib/kamal/cli/templates/sample_hooks/pre-connect.sample
hot_docs-0.0.0 website/.kamal/hooks/pre-connect.sample
clerk-sdk-ruby-4.0.1 apps/rails-full/.kamal/hooks/pre-connect.sample
clerk-sdk-ruby-4.0.1 apps/rails-api/.kamal/hooks/pre-connect.sample
kamal-2.5.2 lib/kamal/cli/templates/sample_hooks/pre-connect.sample
kamal-2.5.1 lib/kamal/cli/templates/sample_hooks/pre-connect.sample
kamal-2.5.0 lib/kamal/cli/templates/sample_hooks/pre-connect.sample
clerk-sdk-ruby-4.0.0 apps/rails-api/.kamal/hooks/pre-connect.sample
clerk-sdk-ruby-4.0.0 apps/rails-full/.kamal/hooks/pre-connect.sample
clerk-sdk-ruby-4.0.0.beta7 apps/rails-full/.kamal/hooks/pre-connect.sample
clerk-sdk-ruby-4.0.0.beta7 apps/rails-api/.kamal/hooks/pre-connect.sample
clerk-sdk-ruby-4.0.0.beta6 apps/rails-api/.kamal/hooks/pre-connect.sample
clerk-sdk-ruby-4.0.0.beta6 apps/rails-full/.kamal/hooks/pre-connect.sample
clerk-sdk-ruby-4.0.0.beta5 apps/rails-api/.kamal/hooks/pre-connect.sample
clerk-sdk-ruby-4.0.0.beta5 apps/rails-full/.kamal/hooks/pre-connect.sample
clerk-sdk-ruby-4.0.0.beta4 apps/rails-api/.kamal/hooks/pre-connect.sample
clerk-sdk-ruby-4.0.0.beta4 apps/rails-full/.kamal/hooks/pre-connect.sample