Создал скрипт, который проверяет статус проверки работоспособности и портов в файле .json, заполненном микросервисами. Итак, для каждого микросервиса из файла .json скрипт выведет статус HTTP и тело bodycheck и другие мелкие детали, и я хочу добавить сюда многопоточность, чтобы сразу вернуть весь вывод. Пожалуйста, смотрите ниже скрипт:Добавить многопоточность/совпадение в скрипте
#!/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
В любом случае сценарий возвращает сначала «Microservice: # {microservice}» и помещает «Port: # {port}», после чего он вернет узлы и только после STATUS. Как я могу вернуть все данные для каждого цикла вместе?
Влад, ознакомьтесь с методом 'map', это очень удобно. Вы можете упростить свой код, выполнив: 'threads = service.map ...'. Кроме того, 'service', вероятно, должен быть назван' services', чтобы указать множественное число. –