class Philae::CollectionProbe
Public Class Methods
new(*args)
click to toggle source
# File lib/philae/collection_probe.rb, line 3 def initialize(*args) raise ArgumentError, "can't be instantiate, use specialized class" end
Public Instance Methods
check()
click to toggle source
# File lib/philae/collection_probe.rb, line 11 def check results = [] result_queue = Queue.new probes.each do |probe| Thread.new do begin result = probe.check rescue StandardError => e result = { healthy: false, error: "probe #{probe.name} check failed: #{e.class} - #{e.message}", } end result[:probe] = probe result_queue.push result end end loop do results.push result_queue.pop break if results.count == probes.length end failed_results = results.select do |result| result[:healthy] == false end error = failed_results.map do |result| msg = "#{result[:probe].name}: #{result[:comment]} " msg += result[:code] if result[:code] msg += result[:error] if result[:error] next msg end.join(', ') if failed_results.count == probes.count return { healthy: false, comment: "All #{name} nodes are down", error: error } elsif failed_results.count > 0 return { healthy: true, comment: "#{failed_results.count} #{name} nodes are down: #{error}" } else return { healthy: true, comment: '' } end end
probes()
click to toggle source
# File lib/philae/collection_probe.rb, line 7 def probes raise ArgumentError, 'specialized class should implement :probes' end