lib/arborist/monitor/snmp/ups/battery.rb
changeset 23 a363d4d5a895
parent 22 d36032444b99
child 26 54f2f57cc0b0
equal deleted inserted replaced
22:d36032444b99 23:a363d4d5a895
    78 	def format_battery( snmp )
    78 	def format_battery( snmp )
    79 		info = {}
    79 		info = {}
    80 
    80 
    81 		# basic info that's always available
    81 		# basic info that's always available
    82 		info[ :status ] = snmp.get( oid: OIDS[:battery_status] )
    82 		info[ :status ] = snmp.get( oid: OIDS[:battery_status] )
    83 		info[ :capacity ] = snmp.get( oid: OIDS[:est_charge_remaining] )
    83 		info[ :capacity ] = snmp.get( oid: OIDS[:est_charge_remaining] ) rescue nil
    84 		info[ :temperature ] = snmp.get( oid: OIDS[:battery_temperature] )
    84 		info[ :temperature ] = snmp.get( oid: OIDS[:battery_temperature] ) rescue nil
    85 		info[ :minutes_remaining ]  = snmp.get( oid: OIDS[:est_minutes_remaining] )
    85 		info[ :minutes_remaining ]  = snmp.get( oid: OIDS[:est_minutes_remaining] ) rescue nil
    86 
    86 
    87 		# don't report voltage if the UPS doesn't
    87 		# don't report voltage if the UPS doesn't
    88 		voltage = snmp.get( oid: OIDS[:battery_voltage] ) rescue nil
    88 		voltage = snmp.get( oid: OIDS[:battery_voltage] ) rescue nil
    89 		info[ :voltage ] = voltage / 10 if voltage
    89 		info[ :voltage ] = voltage / 10 if voltage
    90 
    90 
    94 
    94 
    95 		# see if we are on battery
    95 		# see if we are on battery
    96 		info[ :seconds_on_battery ] = snmp.get( oid: OIDS[:seconds_on_battery] ) rescue 0
    96 		info[ :seconds_on_battery ] = snmp.get( oid: OIDS[:seconds_on_battery] ) rescue 0
    97 		info[ :in_use ] = ( info[ :seconds_on_battery ] != 0 )
    97 		info[ :in_use ] = ( info[ :seconds_on_battery ] != 0 )
    98 
    98 
    99 		return { battery: info }
    99 		return { battery: info.compact }
   100 	end
   100 	end
   101 
   101 
   102 	### Parse SNMP-provided information and alert based on thresholds.
   102 	### Parse SNMP-provided information and alert based on thresholds.
   103 	###
   103 	###
   104 	def check_battery( host, snmp )
   104 	def check_battery( host, snmp )
   113 		capacity    = info.dig( :battery, :capacity )
   113 		capacity    = info.dig( :battery, :capacity )
   114 		temperature = info.dig( :battery, :temperature )
   114 		temperature = info.dig( :battery, :temperature )
   115 		warnings	= []
   115 		warnings	= []
   116 
   116 
   117 		if in_use
   117 		if in_use
   118 			mins = info.dig( :battery, :minutes_remaining )
   118 			mins = info.dig( :battery, :minutes_remaining ) || "(unknown)"
   119 			warnings << "UPS on battery - %s minute(s) remaning." % [ mins ]
   119 			warnings << "UPS on battery - %s minute(s) remaning." % [ mins ]
   120 		end
   120 		end
   121 
   121 
   122 		warnings << BATTERY_STATUS[ status ] if status != 2
   122 		warnings << BATTERY_STATUS[ status ] if status != 2
   123 
   123 
   124 		warnings << "Battery remaining capacity %0.1f%% less than %0.1f percent" %
   124 		warnings << "Battery remaining capacity %0.1f%% less than %0.1f percent" %
   125 			[ capacity, cap_warn ] if capacity <= cap_warn
   125 			[ capacity, cap_warn ] if capacity && capacity <= cap_warn
   126 
   126 
   127 		warnings << "Battery temperature %dC greater than %dC" %
   127 		warnings << "Battery temperature %dC greater than %dC" %
   128 			[ temperature, temp_warn ] if temperature >= temp_warn
   128 			[ temperature, temp_warn ] if temperature && temperature >= temp_warn
   129 
   129 
   130 		info[ :warning ] = warnings.join( "\n" ) unless warnings.empty?
   130 		info[ :warning ] = warnings.join( "\n" ) unless warnings.empty?
   131 		self.results[ host ] = info
   131 		self.results[ host ] = info
   132 
   132 
   133 	end
   133 	end