ぼざクリ タグ広場 https://hub.nizika.monster
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

48 lines
1.0 KiB

  1. #!/usr/bin/env ruby
  2. # A sample pre-connect check
  3. #
  4. # Warms DNS before connecting to hosts in parallel
  5. #
  6. # These environment variables are available:
  7. # KAMAL_RECORDED_AT
  8. # KAMAL_PERFORMER
  9. # KAMAL_VERSION
  10. # KAMAL_HOSTS
  11. # KAMAL_ROLE (if set)
  12. # KAMAL_DESTINATION (if set)
  13. # KAMAL_RUNTIME
  14. hosts = ENV["KAMAL_HOSTS"].split(",")
  15. results = nil
  16. max = 3
  17. elapsed = Benchmark.realtime do
  18. results = hosts.map do |host|
  19. Thread.new do
  20. tries = 1
  21. begin
  22. Socket.getaddrinfo(host, 0, Socket::AF_UNSPEC, Socket::SOCK_STREAM, nil, Socket::AI_CANONNAME)
  23. rescue SocketError
  24. if tries < max
  25. puts "Retrying DNS warmup: #{host}"
  26. tries += 1
  27. sleep rand
  28. retry
  29. else
  30. puts "DNS warmup failed: #{host}"
  31. host
  32. end
  33. end
  34. tries
  35. end
  36. end.map(&:value)
  37. end
  38. retries = results.sum - hosts.size
  39. nopes = results.count { |r| r == max }
  40. puts "Prewarmed %d DNS lookups in %.2f sec: %d retries, %d failures" % [ hosts.size, elapsed, retries, nopes ]