@@ -222,10 +222,8 @@ function collect_snmp_ups_data($ups) {
222222
223223 if ($ ups ['snmp_skipped ' ] != '' ) {
224224 $ skipped = explode (', ' , $ ups ['snmp_skipped ' ]);
225- $ update_skipped = false ;
226225 } else {
227226 $ skipped = array ();
228- $ update_skipped = true ;
229227 }
230228
231229 $ return_val = false ;
@@ -235,7 +233,18 @@ function collect_snmp_ups_data($ups) {
235233 $ ups ['snmp_priv_protocol ' ], $ ups ['snmp_context ' ], $ ups ['snmp_port ' ], $ ups ['snmp_timeout ' ], 1 , 'SNMP ' ,
236234 $ ups ['snmp_engine_id ' ]);
237235
236+ if ($ ups ['status ' ] != 3 ) {
237+ $ ups_down = true ;
238+ } else {
239+ $ ups_down = false ;
240+ }
241+
238242 if ($ value > 0 ) {
243+ /* UPS just came back up, retest possible snmp columns */
244+ if ($ ups_down ) {
245+ $ skipped = array ();
246+ }
247+
239248 $ return_val = true ;
240249
241250 db_execute_prepared ('UPDATE apcupsd_ups SET status = 3 WHERE id = ? ' , array ($ ups ['id ' ]));
@@ -250,14 +259,26 @@ function collect_snmp_ups_data($ups) {
250259 $ ups ['snmp_priv_protocol ' ], $ ups ['snmp_context ' ], $ ups ['snmp_port ' ], $ ups ['snmp_timeout ' ], 1 , 'SNMP ' ,
251260 $ ups ['snmp_engine_id ' ]);
252261
253- if ($ value != 'U ' ) {
254- debug ("SNMP Check for {$ data ['snmp_ci ' ]}, Key $ key, DB Column: {$ data ['db_column ' ]}, Rendered: $ value " );
262+ debug ("SNMP Check for {$ data ['snmp_ci ' ]}, Key $ key, DB Column: {$ data ['db_column ' ]}, Rendered: $ value " );
255263
264+ if ($ value != 'U ' ) {
256265 if (isset ($ data ['snmp_enum ' ])) {
257- $ prevalue = $ value ;
258- debug ("------------------ UPS ENUM $ key " );
259- $ value = $ data ['snmp_enum ' ][$ value ];
260- debug ("------------ $ prevalue ---- $ value " );
266+ if (is_numeric ($ value )) {
267+ $ prevalue = $ value ;
268+
269+ debug ("------------------ UPS ENUM $ key " );
270+
271+ if (isset ($ data ['snmp_enum ' ][$ value ])) {
272+ $ value = $ data ['snmp_enum ' ][$ value ];
273+ } else {
274+ $ value = 'Unknown ' ;
275+ }
276+
277+ debug ("------------ $ prevalue ---- $ value " );
278+ } else {
279+ cacti_log ("WARNING: SNMP Value from UPS Returns invalid ENUM values of $ value, Setting Skipped " , false , 'APCUPSD ' );
280+ $ skipped [] = $ key ;
281+ }
261282 }
262283
263284 switch ($ key ) {
@@ -267,9 +288,14 @@ function collect_snmp_ups_data($ups) {
267288 break ;
268289 case 'TIMELEFT ' :
269290 case 'DLOWBATT ' :
270- $ value /= 100 ;
271- $ value /= 60 ;
272- $ save [$ data ['db_column ' ]] = $ value ;
291+ if (is_numeric ($ value )) {
292+ $ value /= 100 ;
293+ $ value /= 60 ;
294+ $ save [$ data ['db_column ' ]] = $ value ;
295+ } else {
296+ $ save [$ data ['db_column ' ]] = 0 ;
297+ }
298+
273299 break ;
274300 case 'NOMPOWER ' :
275301 case 'NOMOUTV ' :
@@ -281,21 +307,21 @@ function collect_snmp_ups_data($ups) {
281307 break ;
282308 }
283309 } else {
284- debug ("SNMP Check for {$ data ['snmp_ci ' ]}, Key $ key, DB Column: {$ data ['db_column ' ]}, Rendered: No Data " );
310+ debug ("SNMP Check for {$ data ['snmp_ci ' ]}, Key $ key, DB Column: {$ data ['db_column ' ]}, Rendered: No Data, Set Skipping " );
285311
286- if ($ update_skipped ) {
287- $ skipped [] = $ key ;
288- }
312+ $ skipped [] = $ key ;
289313 }
290314 }
291315 }
292316 }
293317
294- if ($ update_skipped && cacti_sizeof ($ skipped )) {
318+ if (cacti_sizeof ($ skipped )) {
295319 db_execute_prepared ('UPDATE apcupsd_ups SET snmp_skipped = ? WHERE id = ? ' , array (implode (', ' , $ skipped ), $ ups ['id ' ]));
320+ } else {
321+ db_execute_prepared ('UPDATE apcupsd_ups SET snmp_skipped = "" WHERE id = ? ' , array ($ ups ['id ' ]));
296322 }
297323 } else {
298- db_execute_prepared ('UPDATE apcupsd_ups SET status = 1 WHERE id = ? ' , array ($ ups ['id ' ]));
324+ db_execute_prepared ('UPDATE apcupsd_ups SET status = 1, snmp_skipped = "" WHERE id = ? ' , array ($ ups ['id ' ]));
299325 }
300326
301327 $ save ['ups_end_rec ' ] = date ('Y-m-d H:i:s ' );
0 commit comments