SNMP counters validation (#11037)

* SNMP counters validation

Validation step added before counters are updated in table 'bill_port_counters'.

Avoid wrong data to be added to the table in case the SNMP polling function return an invalid value.

check --> https://community.librenms.org/t/wrong-billing-record-in-delta/8540

* SNMP counters validation #11037

--> Fixed lin identation.

*Updated message to be printed out in logs.

* SNMP counters validation #11037

Fixed blank spaces.

* SNMP counters validation #11037

Removing white spaces

* SNMP counters validation #11037

Sorry, more white spaces...
This commit is contained in:
ccperilla 2020-01-24 22:44:55 +11:00 committed by Kevin Krumm
parent 2960fc10f5
commit 21a8ebc31e
1 changed files with 22 additions and 7 deletions

View File

@ -88,15 +88,30 @@ foreach ($query->get(['bill_id', 'bill_name']) as $bill) {
$port_data['in_delta'] = '0';
$port_data['out_delta'] = '0';
}
//////////////////////////////////CountersValidation$DB-Update
echo "\nDB SNMP counters received.\n";
echo " in_measurement: ",$port_data['in_measurement']," out_measurement: ",$port_data['out_measurement'],"\n";
echo " The data types are --> in_measurement:".gettype($port_data['in_measurement'])." and out_measurement: ".gettype($port_data['out_measurement'])."\n";
//For debugging
logfile("\n****$now: ".$bill->bill_name."\nDB SNMP counters received.");
logfile("in_measurement: ".$port_data['in_measurement']." out_measurement: ".$port_data['out_measurement']."\nThe data types are. in_measurement:".gettype($port_data['in_measurement'])." and out_measurement: ".gettype($port_data['out_measurement']));
logfile("IN_delta: ".$port_data['in_delta']." OUT_delta: ".$port_data['out_delta']."\nLast_IN_delta: ".$port_data['last_in_delta']." last_OUT_delta: ".$port_data['last_out_delta']);
// NOTE: casting to string for mysqli bug (fixed by mysqlnd)
$fields = array('timestamp' => $now, 'in_counter' => (string)set_numeric($port_data['in_measurement']), 'out_counter' => (string)set_numeric($port_data['out_measurement']), 'in_delta' => (string)set_numeric($port_data['in_delta']), 'out_delta' => (string)set_numeric($port_data['out_delta']));
if (dbUpdate($fields, 'bill_port_counters', "`port_id`='" . mres($port_id) . "' AND `bill_id`='$bill_id'") == 0) {
$fields['bill_id'] = $bill_id;
$fields['port_id'] = $port_id;
dbInsert($fields, 'bill_port_counters');
if (is_numeric($port_data['in_measurement']) && is_numeric($port_data['out_measurement'])) {
echo "Nice, valid counters 'in/out_measurement', lets use them\n";
logfile("Nice, valid counters 'in/out_measurement', lets use them");
// NOTE: casting to string for mysqli bug (fixed by mysqlnd)
$fields = array('timestamp' => $now, 'in_counter' => (string)set_numeric($port_data['in_measurement']), 'out_counter' => (string)set_numeric($port_data['out_measurement']), 'in_delta' => (string)set_numeric($port_data['in_delta']), 'out_delta' => (string)set_numeric($port_data['out_delta']));
if (dbUpdate($fields, 'bill_port_counters', "`port_id`='" . mres($port_id) . "' AND `bill_id`='$bill_id'") == 0) {
$fields['bill_id'] = $bill_id;
$fields['port_id'] = $port_id;
dbInsert($fields, 'bill_port_counters');
}
} else {
echo "WATCH out! - Wrong counters. Table 'bill_port_counters' not updated\n";
logfile("WATCH out! - Wrong counters. Table 'bill_port_counters' not updated");
}
////////////////////////////////EndCountersValidation&DB-Update
$delta = ($delta + $port_data['in_delta'] + $port_data['out_delta']);
$in_delta = ($in_delta + $port_data['in_delta']);
$out_delta = ($out_delta + $port_data['out_delta']);