hawkular/hawkular-client-ruby

View on GitHub
.travis/wait_for_services.rb

Summary

Maintainability
A
0 mins
Test Coverage
#!/usr/bin/env ruby
require 'net/http'
require 'json'

services = {
  'hawkular-services' => {
    url: 'http://localhost:8080/hawkular/status',
    is_ready: -> (response) { response.code == '200' }
  },
  'metrics' => {
    url: 'http://localhost:8081/hawkular/metrics/status',
    is_ready: -> (response) { response.code == '200' && JSON.parse(response.body)['MetricsService'] == 'STARTED' }
  },
  'alerts' => {
    url: 'http://localhost:8080/hawkular/alerts/status',
    is_ready: -> (response) { response.code == '200' && JSON.parse(response.body)['status'] == 'UP' }
  },
  'inventory' => {
    url: 'http://localhost:8080/hawkular/inventory/status',
    is_ready: -> (response) { response.code == '200' && JSON.parse(response.body)['status'] == 'UP' }
  }
}

wait_time = 5
max_attempts = 50

attempt = 0
services.each do |name, service|
  loop do
    uri = URI(service[:url])
    begin
      response = Net::HTTP.get_response(uri)
      break if service[:is_ready].call(response)
      puts "Waiting for: #{name}"
    rescue
      puts 'Waiting for Hawkular-Services to accept connections'
    end
    if attempt < max_attempts
      sleep wait_time
      attempt += 1
    else
      puts "Can't connect to [#{name}] using url [#{service[:url]}] after [#{attempt}] attemps"
      exit 1
    end
  end
end
puts 'Waiting 1 minute for agent to complete it\'s first round...'
sleep 60
puts 'Hawkular-services started successfully... '