RFC1628 - Force cast on some values before doing arithmetic (#14613)

* Force cast on some values before doing arithmetic

Some devices (like Delta InsightPower G3 Mini SNMP Card) return STRING instead of numerical value.

A few lines after, when doing a division on it, everything go bad ( / $divisor).

I added force casting, no more crash and the values are OK.

* Using helper cast_number() instead of intval()

* Fix style

* Add test data

* Stop using deprecated function cast_number
This commit is contained in:
fufroma
2023-08-01 05:18:26 +02:00
committed by GitHub
parent 3541a582bb
commit c030b0c00e
6 changed files with 1200 additions and 0 deletions

View File

@@ -1,5 +1,7 @@
<?php
use LibreNMS\Util\Number;
echo 'RFC1628 ';
$battery_current = snmp_get($device, 'upsBatteryCurrent.0', '-OqvU', 'UPS-MIB');
@@ -38,6 +40,7 @@ foreach ($output_current as $index => $data) {
$data['upsOutputCurrent'] = $data['upsOutputCurrent'][0];
$oid .= '.0';
}
$data['upsOutputCurrent'] = Number::cast($data['upsOutputCurrent']);
discover_sensor(
$valid['sensor'],
@@ -69,6 +72,7 @@ foreach ($input_current as $index => $data) {
$data['upsInputCurrent'] = $data['upsInputCurrent'][0];
$oid .= '.0';
}
$data['upsInputCurrent'] = Number::cast($data['upsInputCurrent']);
discover_sensor(
$valid['sensor'],
@@ -100,6 +104,7 @@ foreach ($bypass_current as $index => $data) {
$data['upsBypassCurrent'] = $data['upsBypassCurrent'][0];
$oid .= '.0';
}
$data['upsBypassCurrent'] = Number::cast($data['upsBypassCurrent']);
discover_sensor(
$valid['sensor'],

View File

@@ -1,5 +1,7 @@
<?php
use LibreNMS\Util\Number;
echo 'RFC1628 ';
$input_freq = snmpwalk_group($device, 'upsInputFrequency', 'UPS-MIB');
@@ -14,6 +16,7 @@ foreach ($input_freq as $index => $data) {
$data['upsInputFrequency'] = $data['upsInputFrequency'][0];
$freq_oid .= '.0';
}
$data['upsInputFrequency'] = Number::cast($data['upsInputFrequency']);
discover_sensor(
$valid['sensor'],

View File

@@ -1,5 +1,7 @@
<?php
use LibreNMS\Util\Number;
echo 'RFC1628 ';
$load_data = snmpwalk_group($device, 'upsOutputPercentLoad', 'UPS-MIB');
@@ -19,6 +21,7 @@ foreach ($load_data as $index => $data) {
if (count($load_data) > 1) {
$descr .= " $index";
}
$value = Number::cast($value);
discover_sensor(
$valid['sensor'],

View File

@@ -1,5 +1,7 @@
<?php
use LibreNMS\Util\Number;
echo 'RFC1628 ';
$battery_volts = snmp_get($device, 'upsBatteryVoltage.0', '-OqvU', 'UPS-MIB');
@@ -40,6 +42,7 @@ foreach ($output_volts as $index => $data) {
$upsOutputVoltage_value = $data['upsOutputVoltage'][0];
$volt_oid .= '.0';
}
$upsOutputVoltage_value = Number::cast($upsOutputVoltage_value);
discover_sensor(
$valid['sensor'],
@@ -74,6 +77,7 @@ foreach ($input_volts as $index => $data) {
$upsInputVoltage_value = $data['upsInputVoltage'][0];
$volt_oid .= '.0';
}
$upsInputVoltage_value = Number::cast($upsInputVoltage_value);
discover_sensor(
$valid['sensor'],
@@ -105,6 +109,7 @@ foreach ($bypass_volts as $index => $data) {
$data['upsBypassVoltage'] = $data['upsBypassVoltage'][0];
$volt_oid .= '.0';
}
$data['upsBypassVoltage'] = Number::cast($data['upsBypassVoltage']);
discover_sensor(
$valid['sensor'],

View File

File diff suppressed because it is too large Load Diff

View File

@@ -0,0 +1,46 @@
1.3.6.1.2.1.1.1.0|4|Mini-SNMP
1.3.6.1.2.1.1.2.0|6|1.3.6.1.4.1.2254.2.5
1.3.6.1.2.1.1.5.0|4|<private>
1.3.6.1.2.1.33.1.2.1.0|2|2
1.3.6.1.2.1.33.1.2.2.0|2|0
1.3.6.1.2.1.33.1.2.3.0|2|338
1.3.6.1.2.1.33.1.2.4.0|2|29
1.3.6.1.2.1.33.1.2.5.0|2|554
1.3.6.1.2.1.33.1.2.6.0|5|
1.3.6.1.2.1.33.1.2.7.0|2|14
1.3.6.1.2.1.33.1.3.3.1.2.1|2|500
1.3.6.1.2.1.33.1.3.3.1.2.2|5|
1.3.6.1.2.1.33.1.3.3.1.2.3|5|
1.3.6.1.2.1.33.1.3.3.1.3.1|2|2360
1.3.6.1.2.1.33.1.3.3.1.3.2|5|
1.3.6.1.2.1.33.1.3.3.1.3.3|5|
1.3.6.1.2.1.33.1.3.3.1.4.1|5|
1.3.6.1.2.1.33.1.3.3.1.4.2|5|
1.3.6.1.2.1.33.1.3.3.1.4.3|5|
1.3.6.1.2.1.33.1.3.3.1.5.1|5|
1.3.6.1.2.1.33.1.3.3.1.5.2|5|
1.3.6.1.2.1.33.1.3.3.1.5.3|5|
1.3.6.1.2.1.33.1.4.1.0|2|3
1.3.6.1.2.1.33.1.4.2.0|2|500
1.3.6.1.2.1.33.1.4.4.1.2.1|2|2300
1.3.6.1.2.1.33.1.4.4.1.2.2|5|
1.3.6.1.2.1.33.1.4.4.1.2.3|5|
1.3.6.1.2.1.33.1.4.4.1.3.1|2|0
1.3.6.1.2.1.33.1.4.4.1.3.2|5|
1.3.6.1.2.1.33.1.4.4.1.3.3|5|
1.3.6.1.2.1.33.1.4.4.1.4.1|2|122
1.3.6.1.2.1.33.1.4.4.1.4.2|5|
1.3.6.1.2.1.33.1.4.4.1.4.3|5|
1.3.6.1.2.1.33.1.4.4.1.5.1|2|8
1.3.6.1.2.1.33.1.4.4.1.5.2|5|
1.3.6.1.2.1.33.1.4.4.1.5.3|5|
1.3.6.1.2.1.33.1.5.1.0|2|500
1.3.6.1.2.1.33.1.5.3.1.2.1|2|2350
1.3.6.1.2.1.33.1.5.3.1.2.2|5|
1.3.6.1.2.1.33.1.5.3.1.2.3|5|
1.3.6.1.2.1.33.1.5.3.1.3.1|2|0
1.3.6.1.2.1.33.1.5.3.1.3.2|5|
1.3.6.1.2.1.33.1.5.3.1.3.3|5|
1.3.6.1.2.1.33.1.5.3.1.4.1|2|0
1.3.6.1.2.1.33.1.5.3.1.4.2|5|
1.3.6.1.2.1.33.1.5.3.1.4.3|5|