85 lines
		
	
	
		
			2.5 KiB
		
	
	
	
		
			Ruby
		
	
	
	
	
	
			
		
		
	
	
			85 lines
		
	
	
		
			2.5 KiB
		
	
	
	
		
			Ruby
		
	
	
	
	
	
| 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
 |