40 lines
		
	
	
		
			725 B
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
		
		
			
		
	
	
			40 lines
		
	
	
		
			725 B
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
|  | # vim: ft=ruby | ||
|  | 
 | ||
|  | class Network < Worker | ||
|  | 	require 'open3' | ||
|  | 
 | ||
|  | 	def mainloop() | ||
|  | 		self.write "checking..." | ||
|  | 
 | ||
|  | 		while true do | ||
|  | 			self.write network_status | ||
|  | 			sleep(10) | ||
|  | 		end | ||
|  | 	end | ||
|  | 
 | ||
|  | 	def network_status | ||
|  | 		hosts = @my_config['hosts'] | ||
|  | 
 | ||
|  | 		net_fail = 0 | ||
|  | 		Open3.popen2("fping", "-u", *hosts) do |i,o,t| | ||
|  | 			hosts_down = o.each_line.count | ||
|  | 			hosts_up = hosts.count - hosts_down | ||
|  | 
 | ||
|  | 			if hosts_down == 0 | ||
|  | 				fg_colour = @my_config['ok_colour'] | ||
|  | 			elsif hosts_down == hosts.count | ||
|  | 				fg_colour = @my_config['crit_colour'] | ||
|  | 			else | ||
|  | 				fg_colour = @my_config['warn_colour'] | ||
|  | 			end | ||
|  | 
 | ||
|  | 			@rstr = "%%{F%s}%s/%s%%{F-}" % [ fg_colour, hosts_up, hosts.count ] | ||
|  | 		end | ||
|  | 
 | ||
|  | 		return @rstr | ||
|  | 	end | ||
|  | end | ||
|  | 
 | ||
|  | Modules.add("network", "Network") | ||
|  | Modules.add("warp", "Network") |