@@ -222,10 +222,8 @@ function collect_snmp_ups_data($ups) {
222
222
223
223
if ($ ups ['snmp_skipped ' ] != '' ) {
224
224
$ skipped = explode (', ' , $ ups ['snmp_skipped ' ]);
225
- $ update_skipped = false ;
226
225
} else {
227
226
$ skipped = array ();
228
- $ update_skipped = true ;
229
227
}
230
228
231
229
$ return_val = false ;
@@ -235,7 +233,18 @@ function collect_snmp_ups_data($ups) {
235
233
$ ups ['snmp_priv_protocol ' ], $ ups ['snmp_context ' ], $ ups ['snmp_port ' ], $ ups ['snmp_timeout ' ], 1 , 'SNMP ' ,
236
234
$ ups ['snmp_engine_id ' ]);
237
235
236
+ if ($ ups ['status ' ] != 3 ) {
237
+ $ ups_down = true ;
238
+ } else {
239
+ $ ups_down = false ;
240
+ }
241
+
238
242
if ($ value > 0 ) {
243
+ /* UPS just came back up, retest possible snmp columns */
244
+ if ($ ups_down ) {
245
+ $ skipped = array ();
246
+ }
247
+
239
248
$ return_val = true ;
240
249
241
250
db_execute_prepared ('UPDATE apcupsd_ups SET status = 3 WHERE id = ? ' , array ($ ups ['id ' ]));
@@ -250,14 +259,26 @@ function collect_snmp_ups_data($ups) {
250
259
$ ups ['snmp_priv_protocol ' ], $ ups ['snmp_context ' ], $ ups ['snmp_port ' ], $ ups ['snmp_timeout ' ], 1 , 'SNMP ' ,
251
260
$ ups ['snmp_engine_id ' ]);
252
261
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 " );
255
263
264
+ if ($ value != 'U ' ) {
256
265
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
+ }
261
282
}
262
283
263
284
switch ($ key ) {
@@ -267,9 +288,14 @@ function collect_snmp_ups_data($ups) {
267
288
break ;
268
289
case 'TIMELEFT ' :
269
290
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
+
273
299
break ;
274
300
case 'NOMPOWER ' :
275
301
case 'NOMOUTV ' :
@@ -281,21 +307,21 @@ function collect_snmp_ups_data($ups) {
281
307
break ;
282
308
}
283
309
} 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 " );
285
311
286
- if ($ update_skipped ) {
287
- $ skipped [] = $ key ;
288
- }
312
+ $ skipped [] = $ key ;
289
313
}
290
314
}
291
315
}
292
316
}
293
317
294
- if ($ update_skipped && cacti_sizeof ($ skipped )) {
318
+ if (cacti_sizeof ($ skipped )) {
295
319
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 ' ]));
296
322
}
297
323
} 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 ' ]));
299
325
}
300
326
301
327
$ save ['ups_end_rec ' ] = date ('Y-m-d H:i:s ' );
0 commit comments