mirror of
https://github.com/librenms/librenms.git
synced 2024-10-07 16:52:45 +00:00
Fix sensor discovery fetch issue (#15193)
* Fix sensor discovery fetch issue * value is not in an array * Fix type * remove exception... * Update HarmonyEnhanced * update test data
This commit is contained in:
@@ -127,12 +127,9 @@ class Sensor implements DiscoveryModule, PollerModule
|
|||||||
// validity not checked yet
|
// validity not checked yet
|
||||||
if (is_null($this->current)) {
|
if (is_null($this->current)) {
|
||||||
$sensor['sensor_oids'] = $this->oids;
|
$sensor['sensor_oids'] = $this->oids;
|
||||||
$sensors = [$sensor];
|
|
||||||
|
|
||||||
$prefetch = self::fetchSnmpData(device_by_id_cache($device_id), $sensors);
|
$prefetch = self::fetchSnmpData(device_by_id_cache($device_id), [$sensor]);
|
||||||
$data = static::processSensorData($sensors, $prefetch);
|
$this->current = static::processSensorValue($prefetch, $this->aggregator, $this->divisor, $this->multiplier);
|
||||||
|
|
||||||
$this->current = current($data);
|
|
||||||
$this->valid = is_numeric($this->current);
|
$this->valid = is_numeric($this->current);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -398,38 +395,41 @@ class Sensor implements DiscoveryModule, PollerModule
|
|||||||
$requested_oids = array_flip($sensor['sensor_oids']);
|
$requested_oids = array_flip($sensor['sensor_oids']);
|
||||||
$data = array_intersect_key($prefetch, $requested_oids);
|
$data = array_intersect_key($prefetch, $requested_oids);
|
||||||
|
|
||||||
// if no data set null and continue to the next sensor
|
$sensor_data[$sensor['sensor_id']] = self::processSensorValue($data, $sensor['sensor_aggregator'], $sensor['sensor_divisor'], $sensor['sensor_multiplier']);
|
||||||
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;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
return $sensor_data;
|
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.
|
* Get a list of unique oids from an array of sensors and break it into chunks.
|
||||||
*
|
*
|
||||||
|
@@ -25,9 +25,7 @@ class ArrisDsr4410md extends OS implements
|
|||||||
'arris-dsr4410md',
|
'arris-dsr4410md',
|
||||||
0,
|
0,
|
||||||
'Receive Signal Level',
|
'Receive Signal Level',
|
||||||
null,
|
divisor: 10
|
||||||
null,
|
|
||||||
10
|
|
||||||
),
|
),
|
||||||
];
|
];
|
||||||
}
|
}
|
||||||
@@ -44,9 +42,7 @@ class ArrisDsr4410md extends OS implements
|
|||||||
'arris-dsr4410md',
|
'arris-dsr4410md',
|
||||||
0,
|
0,
|
||||||
'Receive SNR',
|
'Receive SNR',
|
||||||
null,
|
divisor: 10
|
||||||
null,
|
|
||||||
10
|
|
||||||
),
|
),
|
||||||
];
|
];
|
||||||
}
|
}
|
||||||
|
@@ -23,9 +23,7 @@ class HarmonyEnhanced extends OS implements WirelessRssiDiscovery, WirelessSnrDi
|
|||||||
'harmony_enhanced',
|
'harmony_enhanced',
|
||||||
$index,
|
$index,
|
||||||
'RSL Radio ' . $index,
|
'RSL Radio ' . $index,
|
||||||
null,
|
divisor: 10
|
||||||
null,
|
|
||||||
10
|
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -44,9 +42,7 @@ class HarmonyEnhanced extends OS implements WirelessRssiDiscovery, WirelessSnrDi
|
|||||||
'harmony_enhanced',
|
'harmony_enhanced',
|
||||||
$index,
|
$index,
|
||||||
'SNR Radio ' . $index,
|
'SNR Radio ' . $index,
|
||||||
null,
|
divisor: 10
|
||||||
null,
|
|
||||||
10
|
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -65,9 +61,7 @@ class HarmonyEnhanced extends OS implements WirelessRssiDiscovery, WirelessSnrDi
|
|||||||
'harmony_enhanced',
|
'harmony_enhanced',
|
||||||
$index,
|
$index,
|
||||||
'TX Power Radio ' . $index,
|
'TX Power Radio ' . $index,
|
||||||
null,
|
divisor: 10
|
||||||
null,
|
|
||||||
10
|
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@@ -95,11 +95,6 @@ parameters:
|
|||||||
count: 1
|
count: 1
|
||||||
path: LibreNMS/Modules/Ospf.php
|
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\\.$#"
|
message: "#^Variable \\$sensors in empty\\(\\) always exists and is not falsy\\.$#"
|
||||||
count: 1
|
count: 1
|
||||||
@@ -110,11 +105,6 @@ parameters:
|
|||||||
count: 2
|
count: 2
|
||||||
path: LibreNMS/OS/Ceraos.php
|
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\\.$#"
|
message: "#^Parameter \\#16 \\$entPhysicalIndex of class LibreNMS\\\\Device\\\\WirelessSensor constructor expects float\\|int\\|null, string given\\.$#"
|
||||||
count: 1
|
count: 1
|
||||||
|
@@ -107,7 +107,7 @@
|
|||||||
"sensor_type": "arris-dsr4410md",
|
"sensor_type": "arris-dsr4410md",
|
||||||
"sensor_descr": "Receive SNR",
|
"sensor_descr": "Receive SNR",
|
||||||
"sensor_divisor": 10,
|
"sensor_divisor": 10,
|
||||||
"sensor_multiplier": 0,
|
"sensor_multiplier": 1,
|
||||||
"sensor_aggregator": "sum",
|
"sensor_aggregator": "sum",
|
||||||
"sensor_current": 18.2,
|
"sensor_current": 18.2,
|
||||||
"sensor_prev": null,
|
"sensor_prev": null,
|
||||||
@@ -129,7 +129,7 @@
|
|||||||
"sensor_type": "arris-dsr4410md",
|
"sensor_type": "arris-dsr4410md",
|
||||||
"sensor_descr": "Receive Signal Level",
|
"sensor_descr": "Receive Signal Level",
|
||||||
"sensor_divisor": 10,
|
"sensor_divisor": 10,
|
||||||
"sensor_multiplier": 0,
|
"sensor_multiplier": 1,
|
||||||
"sensor_aggregator": "sum",
|
"sensor_aggregator": "sum",
|
||||||
"sensor_current": -47.5,
|
"sensor_current": -47.5,
|
||||||
"sensor_prev": null,
|
"sensor_prev": null,
|
||||||
@@ -177,7 +177,7 @@
|
|||||||
"sensor_type": "arris-dsr4410md",
|
"sensor_type": "arris-dsr4410md",
|
||||||
"sensor_descr": "Receive SNR",
|
"sensor_descr": "Receive SNR",
|
||||||
"sensor_divisor": 10,
|
"sensor_divisor": 10,
|
||||||
"sensor_multiplier": 0,
|
"sensor_multiplier": 1,
|
||||||
"sensor_aggregator": "sum",
|
"sensor_aggregator": "sum",
|
||||||
"sensor_current": 18.2,
|
"sensor_current": 18.2,
|
||||||
"sensor_prev": 18.2,
|
"sensor_prev": 18.2,
|
||||||
@@ -199,7 +199,7 @@
|
|||||||
"sensor_type": "arris-dsr4410md",
|
"sensor_type": "arris-dsr4410md",
|
||||||
"sensor_descr": "Receive Signal Level",
|
"sensor_descr": "Receive Signal Level",
|
||||||
"sensor_divisor": 10,
|
"sensor_divisor": 10,
|
||||||
"sensor_multiplier": 0,
|
"sensor_multiplier": 1,
|
||||||
"sensor_aggregator": "sum",
|
"sensor_aggregator": "sum",
|
||||||
"sensor_current": -47.5,
|
"sensor_current": -47.5,
|
||||||
"sensor_prev": -47.5,
|
"sensor_prev": -47.5,
|
||||||
|
@@ -2745,7 +2745,7 @@
|
|||||||
"sensor_type": "harmony_enhanced",
|
"sensor_type": "harmony_enhanced",
|
||||||
"sensor_descr": "SNR Radio 1",
|
"sensor_descr": "SNR Radio 1",
|
||||||
"sensor_divisor": 10,
|
"sensor_divisor": 10,
|
||||||
"sensor_multiplier": 0,
|
"sensor_multiplier": 1,
|
||||||
"sensor_aggregator": "sum",
|
"sensor_aggregator": "sum",
|
||||||
"sensor_current": 23.4,
|
"sensor_current": 23.4,
|
||||||
"sensor_prev": null,
|
"sensor_prev": null,
|
||||||
@@ -2767,7 +2767,7 @@
|
|||||||
"sensor_type": "harmony_enhanced",
|
"sensor_type": "harmony_enhanced",
|
||||||
"sensor_descr": "SNR Radio 2",
|
"sensor_descr": "SNR Radio 2",
|
||||||
"sensor_divisor": 10,
|
"sensor_divisor": 10,
|
||||||
"sensor_multiplier": 0,
|
"sensor_multiplier": 1,
|
||||||
"sensor_aggregator": "sum",
|
"sensor_aggregator": "sum",
|
||||||
"sensor_current": 23.2,
|
"sensor_current": 23.2,
|
||||||
"sensor_prev": null,
|
"sensor_prev": null,
|
||||||
@@ -2789,7 +2789,7 @@
|
|||||||
"sensor_type": "harmony_enhanced",
|
"sensor_type": "harmony_enhanced",
|
||||||
"sensor_descr": "RSL Radio 1",
|
"sensor_descr": "RSL Radio 1",
|
||||||
"sensor_divisor": 10,
|
"sensor_divisor": 10,
|
||||||
"sensor_multiplier": 0,
|
"sensor_multiplier": 1,
|
||||||
"sensor_aggregator": "sum",
|
"sensor_aggregator": "sum",
|
||||||
"sensor_current": -67.6,
|
"sensor_current": -67.6,
|
||||||
"sensor_prev": null,
|
"sensor_prev": null,
|
||||||
@@ -2811,7 +2811,7 @@
|
|||||||
"sensor_type": "harmony_enhanced",
|
"sensor_type": "harmony_enhanced",
|
||||||
"sensor_descr": "RSL Radio 2",
|
"sensor_descr": "RSL Radio 2",
|
||||||
"sensor_divisor": 10,
|
"sensor_divisor": 10,
|
||||||
"sensor_multiplier": 0,
|
"sensor_multiplier": 1,
|
||||||
"sensor_aggregator": "sum",
|
"sensor_aggregator": "sum",
|
||||||
"sensor_current": -67.9,
|
"sensor_current": -67.9,
|
||||||
"sensor_prev": null,
|
"sensor_prev": null,
|
||||||
@@ -2833,7 +2833,7 @@
|
|||||||
"sensor_type": "harmony_enhanced",
|
"sensor_type": "harmony_enhanced",
|
||||||
"sensor_descr": "TX Power Radio 1",
|
"sensor_descr": "TX Power Radio 1",
|
||||||
"sensor_divisor": 10,
|
"sensor_divisor": 10,
|
||||||
"sensor_multiplier": 0,
|
"sensor_multiplier": 1,
|
||||||
"sensor_aggregator": "sum",
|
"sensor_aggregator": "sum",
|
||||||
"sensor_current": 24,
|
"sensor_current": 24,
|
||||||
"sensor_prev": null,
|
"sensor_prev": null,
|
||||||
@@ -2855,7 +2855,7 @@
|
|||||||
"sensor_type": "harmony_enhanced",
|
"sensor_type": "harmony_enhanced",
|
||||||
"sensor_descr": "TX Power Radio 2",
|
"sensor_descr": "TX Power Radio 2",
|
||||||
"sensor_divisor": 10,
|
"sensor_divisor": 10,
|
||||||
"sensor_multiplier": 0,
|
"sensor_multiplier": 1,
|
||||||
"sensor_aggregator": "sum",
|
"sensor_aggregator": "sum",
|
||||||
"sensor_current": 24,
|
"sensor_current": 24,
|
||||||
"sensor_prev": null,
|
"sensor_prev": null,
|
||||||
@@ -2925,7 +2925,7 @@
|
|||||||
"sensor_type": "harmony_enhanced",
|
"sensor_type": "harmony_enhanced",
|
||||||
"sensor_descr": "SNR Radio 1",
|
"sensor_descr": "SNR Radio 1",
|
||||||
"sensor_divisor": 10,
|
"sensor_divisor": 10,
|
||||||
"sensor_multiplier": 0,
|
"sensor_multiplier": 1,
|
||||||
"sensor_aggregator": "sum",
|
"sensor_aggregator": "sum",
|
||||||
"sensor_current": 23.4,
|
"sensor_current": 23.4,
|
||||||
"sensor_prev": 23.4,
|
"sensor_prev": 23.4,
|
||||||
@@ -2947,7 +2947,7 @@
|
|||||||
"sensor_type": "harmony_enhanced",
|
"sensor_type": "harmony_enhanced",
|
||||||
"sensor_descr": "SNR Radio 2",
|
"sensor_descr": "SNR Radio 2",
|
||||||
"sensor_divisor": 10,
|
"sensor_divisor": 10,
|
||||||
"sensor_multiplier": 0,
|
"sensor_multiplier": 1,
|
||||||
"sensor_aggregator": "sum",
|
"sensor_aggregator": "sum",
|
||||||
"sensor_current": 23.2,
|
"sensor_current": 23.2,
|
||||||
"sensor_prev": 23.2,
|
"sensor_prev": 23.2,
|
||||||
@@ -2969,7 +2969,7 @@
|
|||||||
"sensor_type": "harmony_enhanced",
|
"sensor_type": "harmony_enhanced",
|
||||||
"sensor_descr": "RSL Radio 1",
|
"sensor_descr": "RSL Radio 1",
|
||||||
"sensor_divisor": 10,
|
"sensor_divisor": 10,
|
||||||
"sensor_multiplier": 0,
|
"sensor_multiplier": 1,
|
||||||
"sensor_aggregator": "sum",
|
"sensor_aggregator": "sum",
|
||||||
"sensor_current": -67.6,
|
"sensor_current": -67.6,
|
||||||
"sensor_prev": -67.6,
|
"sensor_prev": -67.6,
|
||||||
@@ -2991,7 +2991,7 @@
|
|||||||
"sensor_type": "harmony_enhanced",
|
"sensor_type": "harmony_enhanced",
|
||||||
"sensor_descr": "RSL Radio 2",
|
"sensor_descr": "RSL Radio 2",
|
||||||
"sensor_divisor": 10,
|
"sensor_divisor": 10,
|
||||||
"sensor_multiplier": 0,
|
"sensor_multiplier": 1,
|
||||||
"sensor_aggregator": "sum",
|
"sensor_aggregator": "sum",
|
||||||
"sensor_current": -67.9,
|
"sensor_current": -67.9,
|
||||||
"sensor_prev": -67.9,
|
"sensor_prev": -67.9,
|
||||||
@@ -3013,7 +3013,7 @@
|
|||||||
"sensor_type": "harmony_enhanced",
|
"sensor_type": "harmony_enhanced",
|
||||||
"sensor_descr": "TX Power Radio 1",
|
"sensor_descr": "TX Power Radio 1",
|
||||||
"sensor_divisor": 10,
|
"sensor_divisor": 10,
|
||||||
"sensor_multiplier": 0,
|
"sensor_multiplier": 1,
|
||||||
"sensor_aggregator": "sum",
|
"sensor_aggregator": "sum",
|
||||||
"sensor_current": 24,
|
"sensor_current": 24,
|
||||||
"sensor_prev": 24,
|
"sensor_prev": 24,
|
||||||
@@ -3035,7 +3035,7 @@
|
|||||||
"sensor_type": "harmony_enhanced",
|
"sensor_type": "harmony_enhanced",
|
||||||
"sensor_descr": "TX Power Radio 2",
|
"sensor_descr": "TX Power Radio 2",
|
||||||
"sensor_divisor": 10,
|
"sensor_divisor": 10,
|
||||||
"sensor_multiplier": 0,
|
"sensor_multiplier": 1,
|
||||||
"sensor_aggregator": "sum",
|
"sensor_aggregator": "sum",
|
||||||
"sensor_current": 24,
|
"sensor_current": 24,
|
||||||
"sensor_prev": 24,
|
"sensor_prev": 24,
|
||||||
|
Reference in New Issue
Block a user