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 |