sundry/mrsh/lib/mrsh_reporter.rb

85 lines
2.5 KiB
Ruby
Raw Permalink Normal View History

2014-12-23 12:24:23 -05:00
class Reporter
def initialize(settings)
@config = settings
commentwidth = 60
@formats = Hash.new
@formats[:ping] = "%15s ]-%s%4%s---------------------------------------------------[ %-4s / %-5s ]-\n"
@formats[:header] = "%15s ]-BEGIN-------------------------------------------------[ %-4s / %-5s ]-\n"
@formats[:content] = "%15s ]- %s\n"
@formats[:footer] = "%15s ]-END----------------------------------------------------[%3d]-[ %s%6.2f%s ]-\n"
@colors = {
:online => '',
:offline => ''.
:nodns => '',
:loop => '',
:reset => ''.
:comment1 => '',
:comment2 => ''
}
if (@config.ansi)
@colors = {
:online => '\e[0;32m',
:offline => '\e[0;31m'.
:nodns => '\e[7;31;48m',
:loop => '\e[0;35m',
:reset => '\e[0m'.
:comment1 => '\e[0;37m',
:comment2 => '\e[0;36m'
}
end
end
def loop
puts
printf @formats[:ping], "LOOP", @colors[:loop], 'LOOP', @colors[:reset], "UP", "DOWN"
puts
end
def report(host)
if (@config.command.nil? or host.status != :online or not host.rpc?)
report_ping(host)
elsif (@config.output_path)
report_file(host)
else
report_plain(host)
end
end
def report_ping(host)
printf @formats[:ping], host.hostname, @colors[host.status], host_status(host), @colors[:reset], host.room, host.grid
if (host.ping_output)
host.ping_output.each do |line|
printf @formats[:content], host.hostname, line
end
end
end
def report_file(host)
printf @formats[:header], host.hostname, host.room, host.grid
File.open(File.join(@config.output_path, "#{host.hostname}.#{Time.now.strftime('%Y%m%d%H%M%S')}"),"w") do |file|
host.output.each do |time,line|
file.puts line
end
end
printf @formats[:footer], host.hostname, host.returncode, @colors[:comment1], host.duration, @colors[:reset]
end
def report_plain(host)
printf @formats[:header], host.hostname, host.room, host.grid
host.output.each do |time,line|
file.puts line
end
printf @formats[:footer], host.hostname, host.returncode, @colors[:comment1], host.duration, @colors[:reset]
end
def host_status(host)
case host.status
when :nodns
"!DNS"
when :offline
"DOWN"
when :online
" UP"
else
"UNKN"
end
end
end
end