マイクロサービスで実装された.jsonファイルからヘルスチェックとポートステータスをチェックするスクリプトを作成しました。 したがって、.jsonファイルのすべてのマイクロサービスに対して、スクリプトはHTTPステータスと健全性検査の本文およびその他の細かい詳細を出力します。また、すべての出力を一度に返すためにここにマルチスレッドを追加します。スクリプト内でマルチスレッド/コンカレントを追加する
#!/usr/bin/env ruby
... get the environment argument part...
file = File.read('./services.json')
data_hash = JSON.parse(file)
threads = []
service = data_hash.keys
service.each do |microservice|
threads << Thread.new do
begin
puts "Microservice: #{microservice}"
port = data_hash["#{microservice}"]['port']
puts "Port: #{port}"
nodes = "knife search 'chef_environment:#{env} AND recipe:#{microservice}' -i"
node = %x[ #{nodes} ].split
node.each do |n|
puts "Node: #{n}"
uri = URI("http://#{n}:#{port}/healthcheck?count=10")
res = Net::HTTP.get_response(uri)
status = Net::HTTP.get(uri)
puts res.code
puts status
puts res.message
end
rescue Net::ReadTimeout
puts "ReadTimeout Error"
next
end
end
end
threads.each do |thread|
thread.join
end
#!/usr/bin/env ruby
... get the environment argument part...
file = File.read('./services.json')
data_hash = JSON.parse(file)
threads = []
service = data_hash.keys
service.each do |microservice|
threads << Thread.new do
begin
puts "Microservice: #{microservice}"
port = data_hash["#{microservice}"]['port']
puts "Port: #{port}"
nodes = "knife search 'chef_environment:#{env} AND recipe:#{microservice}' -i"
node = %x[ #{nodes} ].split
node.each do |n|
puts "Node: #{n}"
uri = URI("http://#{n}:#{port}/healthcheck?count=10")
res = Net::HTTP.get_response(uri)
status = Net::HTTP.get(uri)
puts res.code
puts status
puts res.message
end
rescue Net::ReadTimeout
puts "ReadTimeout Error"
next
end
end
end
threads.each do |thread|
thread.join
end
とにかくこのスクリプトはputs「Microservice:#{microservice}」を返し、「Port:#{port}」を置きます。この後、STATUSの後にのみノードが返されます。 各ループのすべてのデータを一緒に返すにはどうすればよいですか?
Vlad、 'map'メソッドをチェックしてください。非常に便利です。 'threads = service.map ...'を実行することで、コードを単純化することができます。また、 'service'はおそらく複数形を示す' services'と名付けられるべきです。 –