diff --git a/LibreNMS/Device/Sensor.php b/LibreNMS/Device/Sensor.php index 85238cc473..1a7fc062be 100644 --- a/LibreNMS/Device/Sensor.php +++ b/LibreNMS/Device/Sensor.php @@ -127,12 +127,9 @@ class Sensor implements DiscoveryModule, PollerModule // validity not checked yet if (is_null($this->current)) { $sensor['sensor_oids'] = $this->oids; - $sensors = [$sensor]; - $prefetch = self::fetchSnmpData(device_by_id_cache($device_id), $sensors); - $data = static::processSensorData($sensors, $prefetch); - - $this->current = current($data); + $prefetch = self::fetchSnmpData(device_by_id_cache($device_id), [$sensor]); + $this->current = static::processSensorValue($prefetch, $this->aggregator, $this->divisor, $this->multiplier); $this->valid = is_numeric($this->current); } @@ -398,38 +395,41 @@ class Sensor implements DiscoveryModule, PollerModule $requested_oids = array_flip($sensor['sensor_oids']); $data = array_intersect_key($prefetch, $requested_oids); - // if no data set null and continue to the next sensor - if (empty($data)) { - $data[$sensor['sensor_id']] = null; - continue; - } - - if (count($data) > 1) { - // aggregate data - if ($sensor['sensor_aggregator'] == 'avg') { - $sensor_value = array_sum($data) / count($data); - } else { - // sum - $sensor_value = array_sum($data); - } - } else { - $sensor_value = current($data); - } - - if ($sensor['sensor_divisor'] && $sensor_value !== 0) { - $sensor_value = (cast_number($sensor_value) / $sensor['sensor_divisor']); - } - - if ($sensor['sensor_multiplier']) { - $sensor_value = (cast_number($sensor_value) * $sensor['sensor_multiplier']); - } - - $sensor_data[$sensor['sensor_id']] = $sensor_value; + $sensor_data[$sensor['sensor_id']] = self::processSensorValue($data, $sensor['sensor_aggregator'], $sensor['sensor_divisor'], $sensor['sensor_multiplier']); } return $sensor_data; } + protected static function processSensorValue(array $data, string $aggregator, int $divisor, int $multiplier): mixed + { + if (empty($data)) { + return null; + } + + if (count($data) > 1) { + // aggregate data + if ($aggregator == 'avg') { + $sensor_value = array_sum($data) / count($data); + } else { + // sum + $sensor_value = array_sum($data); + } + } else { + $sensor_value = current($data); + } + + if ($divisor && $sensor_value !== 0) { + $sensor_value = (cast_number($sensor_value) / $divisor); + } + + if ($multiplier) { + $sensor_value = (cast_number($sensor_value) * $multiplier); + } + + return $sensor_value; + } + /** * Get a list of unique oids from an array of sensors and break it into chunks. * diff --git a/LibreNMS/OS/ArrisDsr4410md.php b/LibreNMS/OS/ArrisDsr4410md.php index 21543c9dfe..c7659bb44f 100755 --- a/LibreNMS/OS/ArrisDsr4410md.php +++ b/LibreNMS/OS/ArrisDsr4410md.php @@ -25,9 +25,7 @@ class ArrisDsr4410md extends OS implements 'arris-dsr4410md', 0, 'Receive Signal Level', - null, - null, - 10 + divisor: 10 ), ]; } @@ -44,9 +42,7 @@ class ArrisDsr4410md extends OS implements 'arris-dsr4410md', 0, 'Receive SNR', - null, - null, - 10 + divisor: 10 ), ]; } diff --git a/LibreNMS/OS/HarmonyEnhanced.php b/LibreNMS/OS/HarmonyEnhanced.php index f770c82f77..a7f8cbf589 100644 --- a/LibreNMS/OS/HarmonyEnhanced.php +++ b/LibreNMS/OS/HarmonyEnhanced.php @@ -23,9 +23,7 @@ class HarmonyEnhanced extends OS implements WirelessRssiDiscovery, WirelessSnrDi 'harmony_enhanced', $index, 'RSL Radio ' . $index, - null, - null, - 10 + divisor: 10 ); } @@ -44,9 +42,7 @@ class HarmonyEnhanced extends OS implements WirelessRssiDiscovery, WirelessSnrDi 'harmony_enhanced', $index, 'SNR Radio ' . $index, - null, - null, - 10 + divisor: 10 ); } @@ -65,9 +61,7 @@ class HarmonyEnhanced extends OS implements WirelessRssiDiscovery, WirelessSnrDi 'harmony_enhanced', $index, 'TX Power Radio ' . $index, - null, - null, - 10 + divisor: 10 ); } diff --git a/phpstan-baseline.neon b/phpstan-baseline.neon index 745d2220f0..bab6037e47 100644 --- a/phpstan-baseline.neon +++ b/phpstan-baseline.neon @@ -95,11 +95,6 @@ parameters: count: 1 path: LibreNMS/Modules/Ospf.php - - - message: "#^Parameter \\#8 \\$multiplier of class LibreNMS\\\\Device\\\\WirelessSensor constructor expects int, null given\\.$#" - count: 2 - path: LibreNMS/OS/ArrisDsr4410md.php - - message: "#^Variable \\$sensors in empty\\(\\) always exists and is not falsy\\.$#" count: 1 @@ -110,11 +105,6 @@ parameters: count: 2 path: LibreNMS/OS/Ceraos.php - - - message: "#^Parameter \\#8 \\$multiplier of class LibreNMS\\\\Device\\\\WirelessSensor constructor expects int, null given\\.$#" - count: 3 - path: LibreNMS/OS/HarmonyEnhanced.php - - message: "#^Parameter \\#16 \\$entPhysicalIndex of class LibreNMS\\\\Device\\\\WirelessSensor constructor expects float\\|int\\|null, string given\\.$#" count: 1 diff --git a/tests/data/arris-dsr4410md.json b/tests/data/arris-dsr4410md.json index f595f12b9f..be2ee925d6 100644 --- a/tests/data/arris-dsr4410md.json +++ b/tests/data/arris-dsr4410md.json @@ -107,7 +107,7 @@ "sensor_type": "arris-dsr4410md", "sensor_descr": "Receive SNR", "sensor_divisor": 10, - "sensor_multiplier": 0, + "sensor_multiplier": 1, "sensor_aggregator": "sum", "sensor_current": 18.2, "sensor_prev": null, @@ -129,7 +129,7 @@ "sensor_type": "arris-dsr4410md", "sensor_descr": "Receive Signal Level", "sensor_divisor": 10, - "sensor_multiplier": 0, + "sensor_multiplier": 1, "sensor_aggregator": "sum", "sensor_current": -47.5, "sensor_prev": null, @@ -177,7 +177,7 @@ "sensor_type": "arris-dsr4410md", "sensor_descr": "Receive SNR", "sensor_divisor": 10, - "sensor_multiplier": 0, + "sensor_multiplier": 1, "sensor_aggregator": "sum", "sensor_current": 18.2, "sensor_prev": 18.2, @@ -199,7 +199,7 @@ "sensor_type": "arris-dsr4410md", "sensor_descr": "Receive Signal Level", "sensor_divisor": 10, - "sensor_multiplier": 0, + "sensor_multiplier": 1, "sensor_aggregator": "sum", "sensor_current": -47.5, "sensor_prev": -47.5, diff --git a/tests/data/harmony-enhanced.json b/tests/data/harmony-enhanced.json index 75c76431f6..0d5bd83912 100644 --- a/tests/data/harmony-enhanced.json +++ b/tests/data/harmony-enhanced.json @@ -2745,7 +2745,7 @@ "sensor_type": "harmony_enhanced", "sensor_descr": "SNR Radio 1", "sensor_divisor": 10, - "sensor_multiplier": 0, + "sensor_multiplier": 1, "sensor_aggregator": "sum", "sensor_current": 23.4, "sensor_prev": null, @@ -2767,7 +2767,7 @@ "sensor_type": "harmony_enhanced", "sensor_descr": "SNR Radio 2", "sensor_divisor": 10, - "sensor_multiplier": 0, + "sensor_multiplier": 1, "sensor_aggregator": "sum", "sensor_current": 23.2, "sensor_prev": null, @@ -2789,7 +2789,7 @@ "sensor_type": "harmony_enhanced", "sensor_descr": "RSL Radio 1", "sensor_divisor": 10, - "sensor_multiplier": 0, + "sensor_multiplier": 1, "sensor_aggregator": "sum", "sensor_current": -67.6, "sensor_prev": null, @@ -2811,7 +2811,7 @@ "sensor_type": "harmony_enhanced", "sensor_descr": "RSL Radio 2", "sensor_divisor": 10, - "sensor_multiplier": 0, + "sensor_multiplier": 1, "sensor_aggregator": "sum", "sensor_current": -67.9, "sensor_prev": null, @@ -2833,7 +2833,7 @@ "sensor_type": "harmony_enhanced", "sensor_descr": "TX Power Radio 1", "sensor_divisor": 10, - "sensor_multiplier": 0, + "sensor_multiplier": 1, "sensor_aggregator": "sum", "sensor_current": 24, "sensor_prev": null, @@ -2855,7 +2855,7 @@ "sensor_type": "harmony_enhanced", "sensor_descr": "TX Power Radio 2", "sensor_divisor": 10, - "sensor_multiplier": 0, + "sensor_multiplier": 1, "sensor_aggregator": "sum", "sensor_current": 24, "sensor_prev": null, @@ -2925,7 +2925,7 @@ "sensor_type": "harmony_enhanced", "sensor_descr": "SNR Radio 1", "sensor_divisor": 10, - "sensor_multiplier": 0, + "sensor_multiplier": 1, "sensor_aggregator": "sum", "sensor_current": 23.4, "sensor_prev": 23.4, @@ -2947,7 +2947,7 @@ "sensor_type": "harmony_enhanced", "sensor_descr": "SNR Radio 2", "sensor_divisor": 10, - "sensor_multiplier": 0, + "sensor_multiplier": 1, "sensor_aggregator": "sum", "sensor_current": 23.2, "sensor_prev": 23.2, @@ -2969,7 +2969,7 @@ "sensor_type": "harmony_enhanced", "sensor_descr": "RSL Radio 1", "sensor_divisor": 10, - "sensor_multiplier": 0, + "sensor_multiplier": 1, "sensor_aggregator": "sum", "sensor_current": -67.6, "sensor_prev": -67.6, @@ -2991,7 +2991,7 @@ "sensor_type": "harmony_enhanced", "sensor_descr": "RSL Radio 2", "sensor_divisor": 10, - "sensor_multiplier": 0, + "sensor_multiplier": 1, "sensor_aggregator": "sum", "sensor_current": -67.9, "sensor_prev": -67.9, @@ -3013,7 +3013,7 @@ "sensor_type": "harmony_enhanced", "sensor_descr": "TX Power Radio 1", "sensor_divisor": 10, - "sensor_multiplier": 0, + "sensor_multiplier": 1, "sensor_aggregator": "sum", "sensor_current": 24, "sensor_prev": 24, @@ -3035,7 +3035,7 @@ "sensor_type": "harmony_enhanced", "sensor_descr": "TX Power Radio 2", "sensor_divisor": 10, - "sensor_multiplier": 0, + "sensor_multiplier": 1, "sensor_aggregator": "sum", "sensor_current": 24, "sensor_prev": 24,