mirror of
https://github.com/librenms/librenms.git
synced 2024-10-07 16:52:45 +00:00
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:
@@ -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'],
|
||||
|
||||
@@ -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'],
|
||||
|
||||
@@ -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'],
|
||||
|
||||
@@ -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'],
|
||||
|
||||
1138
tests/data/deltaups_rfc1628string.json
Normal file
1138
tests/data/deltaups_rfc1628string.json
Normal file
File diff suppressed because it is too large
Load Diff
46
tests/snmpsim/deltaups_rfc1628string.snmprec
Normal file
46
tests/snmpsim/deltaups_rfc1628string.snmprec
Normal 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|
|
||||
Reference in New Issue
Block a user