87 lines
1.7 KiB
Ruby
87 lines
1.7 KiB
Ruby
#!/usr/bin/env ruby
|
|
|
|
libs = %W(
|
|
#{File.dirname(__FILE__)}/lib/mrsh/mrsh_machine.rb
|
|
#{File.dirname(__FILE__)}/../lib/mrsh_machine.rb
|
|
)
|
|
|
|
libs.each do |lib|
|
|
if File.exists?(lib) then
|
|
require lib
|
|
break
|
|
end
|
|
end
|
|
|
|
require 'thread'
|
|
require 'getoptlong'
|
|
require 'ostruct'
|
|
|
|
settings = Settings.new
|
|
|
|
hosts = settings.loadSystems
|
|
maxthreads = [settings.max_threads,hosts.length].min
|
|
threads = Array.new
|
|
|
|
orig_hosts = hosts
|
|
|
|
puts "\n"
|
|
|
|
if hosts.empty?
|
|
puts "No systems match requirements"
|
|
exit
|
|
end
|
|
|
|
Signal.trap("QUIT") do
|
|
puts
|
|
puts "Thread Report:"
|
|
t = Time.now
|
|
threads.each_with_index do |thr,i|
|
|
printf(" Thread: %d - Host: %-15s - %0.2f seconds\n", i, thr[:hosts].hostname, (t - thr[:start]))
|
|
end
|
|
puts
|
|
end
|
|
|
|
reporter = Reporter.new(settings)
|
|
|
|
loop do
|
|
while (hosts.size > 0 or threads.size > 0) do
|
|
if (hosts.size > 0 and (threads.size < maxthreads)) then
|
|
host = hosts.shift
|
|
|
|
thread = Thread.new(host) do |host|
|
|
Thread.current[:start] = Time.now
|
|
Thread.current[:host] = host
|
|
|
|
machine = Machine.new(host,settings)
|
|
machine.process
|
|
Thread.current[:end] = Time.now
|
|
Thread.current[:duration] = Thread.current[:end] - Thread.current[:start]
|
|
end
|
|
threads.push(thread)
|
|
end
|
|
|
|
threads.each do |thr|
|
|
if (thr.status = false) or (thr.status.nil?)
|
|
host = thr[:host]
|
|
host.duration = thr[:duration]
|
|
threads.delete(thr)
|
|
|
|
reporter.report(host)
|
|
end
|
|
|
|
if (threads.size == maxthreads) then
|
|
sleep(0.05)
|
|
end
|
|
end
|
|
end
|
|
|
|
if (settings.repeat)
|
|
hosts = orig_hosts
|
|
reporter.loop
|
|
else
|
|
break
|
|
end
|
|
end
|
|
|
|
exit(0)
|