Skip to content

Commit

Permalink
Fix sensor discovery fetch issue (librenms#15193)
Browse files Browse the repository at this point in the history
* Fix sensor discovery fetch issue

* value is not in an array

* Fix type

* remove exception...

* Update HarmonyEnhanced

* update test data
  • Loading branch information
murrant committed Aug 4, 2023
1 parent 65b4db8 commit 523e76d
Show file tree
Hide file tree
Showing 6 changed files with 49 additions and 69 deletions.
56 changes: 28 additions & 28 deletions LibreNMS/Device/Sensor.php
Original file line number Diff line number Diff line change
Expand Up @@ -127,12 +127,9 @@ public function __construct(
// 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);
}

Expand Down Expand Up @@ -398,36 +395,39 @@ protected static function processSensorData($sensors, $prefetch)
$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;
}
$sensor_data[$sensor['sensor_id']] = self::processSensorValue($data, $sensor['sensor_aggregator'], $sensor['sensor_divisor'], $sensor['sensor_multiplier']);
}

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);
}
return $sensor_data;
}

if ($sensor['sensor_divisor'] && $sensor_value !== 0) {
$sensor_value = (cast_number($sensor_value) / $sensor['sensor_divisor']);
}
protected static function processSensorValue(array $data, string $aggregator, int $divisor, int $multiplier): mixed
{
if (empty($data)) {
return null;
}

if ($sensor['sensor_multiplier']) {
$sensor_value = (cast_number($sensor_value) * $sensor['sensor_multiplier']);
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);
}

$sensor_data[$sensor['sensor_id']] = $sensor_value;
if ($divisor && $sensor_value !== 0) {
$sensor_value = (cast_number($sensor_value) / $divisor);
}

return $sensor_data;
if ($multiplier) {
$sensor_value = (cast_number($sensor_value) * $multiplier);
}

return $sensor_value;
}

/**
Expand Down
8 changes: 2 additions & 6 deletions LibreNMS/OS/ArrisDsr4410md.php
Original file line number Diff line number Diff line change
Expand Up @@ -25,9 +25,7 @@ public function discoverWirelessRssi()
'arris-dsr4410md',
0,
'Receive Signal Level',
null,
null,
10
divisor: 10
),
];
}
Expand All @@ -44,9 +42,7 @@ public function discoverWirelessSnr()
'arris-dsr4410md',
0,
'Receive SNR',
null,
null,
10
divisor: 10
),
];
}
Expand Down
12 changes: 3 additions & 9 deletions LibreNMS/OS/HarmonyEnhanced.php
Original file line number Diff line number Diff line change
Expand Up @@ -23,9 +23,7 @@ public function discoverWirelessRssi()
'harmony_enhanced',
$index,
'RSL Radio ' . $index,
null,
null,
10
divisor: 10
);
}

Expand All @@ -44,9 +42,7 @@ public function discoverWirelessSnr()
'harmony_enhanced',
$index,
'SNR Radio ' . $index,
null,
null,
10
divisor: 10
);
}

Expand All @@ -65,9 +61,7 @@ public function discoverWirelessPower()
'harmony_enhanced',
$index,
'TX Power Radio ' . $index,
null,
null,
10
divisor: 10
);
}

Expand Down
10 changes: 0 additions & 10 deletions phpstan-baseline.neon
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand All @@ -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
Expand Down
8 changes: 4 additions & 4 deletions tests/data/arris-dsr4410md.json
Original file line number Diff line number Diff line change
Expand Up @@ -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,
Expand All @@ -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,
Expand Down Expand Up @@ -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,
Expand All @@ -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,
Expand Down
24 changes: 12 additions & 12 deletions tests/data/harmony-enhanced.json
Original file line number Diff line number Diff line change
Expand Up @@ -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,
Expand All @@ -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,
Expand All @@ -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,
Expand All @@ -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,
Expand All @@ -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,
Expand All @@ -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,
Expand Down Expand Up @@ -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,
Expand All @@ -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,
Expand All @@ -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,
Expand All @@ -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,
Expand All @@ -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,
Expand All @@ -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,
Expand Down

0 comments on commit 523e76d

Please sign in to comment.