Skip to content

Commit 4fd7411

Browse files
committed
QA: Fix snmp_skipped detection logic
1 parent 409dc02 commit 4fd7411

File tree

1 file changed

+43
-17
lines changed

1 file changed

+43
-17
lines changed

poller_apcupsd.php

Lines changed: 43 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -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

Comments
 (0)