From 59f00dcc6bcc4f5ebe29762ba4ccb416a8627ad2 Mon Sep 17 00:00:00 2001 From: PipoCanaja <38363551+PipoCanaja@users.noreply.github.com> Date: Wed, 13 Mar 2019 09:03:18 +0100 Subject: [PATCH] Improved VRP stack state discovery with one member only to avoid unnecessary alarms (#9925) * VRP stack state improvement * tests * cleaning --- includes/definitions/discovery/vrp.yaml | 11 +--- includes/discovery/sensors/state/vrp.inc.php | 54 ++++++++++++++++++++ tests/data/vrp_5720-vrf.json | 12 ++--- 3 files changed, 61 insertions(+), 16 deletions(-) create mode 100644 includes/discovery/sensors/state/vrp.inc.php diff --git a/includes/definitions/discovery/vrp.yaml b/includes/definitions/discovery/vrp.yaml index f900936f2b..1fc813246f 100644 --- a/includes/definitions/discovery/vrp.yaml +++ b/includes/definitions/discovery/vrp.yaml @@ -21,6 +21,7 @@ modules: data: - oid: - entPhysicalName + - hwStackPortTable temperature: data: - @@ -156,14 +157,4 @@ modules: - { descr: Master, graph: 1, value: 1, generic: 0 } - { descr: Standby, graph: 1, value: 2, generic: 0 } - { descr: Slave, graph: 1, value: 3, generic: 0 } - - - oid: hwStackPortTable - value: hwStackPortStatus - num_oid: '.1.3.6.1.4.1.2011.5.25.183.1.21.1.5.{{ $index }}' - descr: 'Stack Port {{ $index }} Status' - group: Stack - state_name: hwStackPortStatus - states: - - { descr: Up, graph: 1, value: 1, generic: 0 } - - { descr: Down, graph: 1, value: 2, generic: 2 } diff --git a/includes/discovery/sensors/state/vrp.inc.php b/includes/discovery/sensors/state/vrp.inc.php new file mode 100644 index 0000000000..ec1f3b44ad --- /dev/null +++ b/includes/discovery/sensors/state/vrp.inc.php @@ -0,0 +1,54 @@ +. + * + * @package LibreNMS + * @link http://librenms.org + * @copyright 2019 PipoCanaja + * @author PipoCanaja + */ + +$stacked_device = count(array_keys($pre_cache['hwStackMemberInfoTable'])); +// If we have more than 1 device in the stack, then we should alert on stack ports not up + +if ($stacked_device > 1) { + $state_name = "hwStackPortStatus"; + $states = [ + ['value' => 1, 'generic' => 0, 'graph' => 0, 'descr' => 'Up'], + ['value' => 2, 'generic' => 2, 'graph' => 0, 'descr' => 'Down'], + ]; +} else { + $state_name = "hwStackPortStatusNotStacked"; + $states = [ + ['value' => 1, 'generic' => 3, 'graph' => 0, 'descr' => 'Up'], + ['value' => 2, 'generic' => 3, 'graph' => 0, 'descr' => 'Down'], + ]; +} + +foreach ($pre_cache['hwStackPortTable'] as $index => $data) { + $subindex = explode('.', $index); + $state_oid = '.1.3.6.1.4.1.2011.5.25.183.1.21.1.5.' . $index; + $state_descr = "Unit " . $subindex[0] . " stack-port " . $subindex[1] . " Status"; + $state = $data['hwStackPortStatus']; + $state_index = $index; + + create_state_index($state_name, $states); + + discover_sensor($valid['sensor'], 'state', $device, $state_oid, $state_index, $state_name, $state_descr, '1', '1', null, null, null, null, $state, 'snmp', null, null, null, 'Stack'); + create_sensor_to_state_index($device, $state_name, $state_index); +} diff --git a/tests/data/vrp_5720-vrf.json b/tests/data/vrp_5720-vrf.json index 8a3217c2ea..e019fd3c6d 100644 --- a/tests/data/vrp_5720-vrf.json +++ b/tests/data/vrp_5720-vrf.json @@ -34646,7 +34646,7 @@ "sensor_oid": ".1.3.6.1.4.1.2011.5.25.183.1.21.1.5.1.0", "sensor_index": "1.0", "sensor_type": "hwStackPortStatus", - "sensor_descr": "Stack Port 1.0 Status", + "sensor_descr": "Unit 1 stack-port 0 Status", "group": "Stack", "sensor_divisor": 1, "sensor_multiplier": 1, @@ -34670,7 +34670,7 @@ "sensor_oid": ".1.3.6.1.4.1.2011.5.25.183.1.21.1.5.1.1", "sensor_index": "1.1", "sensor_type": "hwStackPortStatus", - "sensor_descr": "Stack Port 1.1 Status", + "sensor_descr": "Unit 1 stack-port 1 Status", "group": "Stack", "sensor_divisor": 1, "sensor_multiplier": 1, @@ -34694,7 +34694,7 @@ "sensor_oid": ".1.3.6.1.4.1.2011.5.25.183.1.21.1.5.2.0", "sensor_index": "2.0", "sensor_type": "hwStackPortStatus", - "sensor_descr": "Stack Port 2.0 Status", + "sensor_descr": "Unit 2 stack-port 0 Status", "group": "Stack", "sensor_divisor": 1, "sensor_multiplier": 1, @@ -34718,7 +34718,7 @@ "sensor_oid": ".1.3.6.1.4.1.2011.5.25.183.1.21.1.5.2.1", "sensor_index": "2.1", "sensor_type": "hwStackPortStatus", - "sensor_descr": "Stack Port 2.1 Status", + "sensor_descr": "Unit 2 stack-port 1 Status", "group": "Stack", "sensor_divisor": 1, "sensor_multiplier": 1, @@ -34977,14 +34977,14 @@ { "state_name": "hwStackPortStatus", "state_descr": "Up", - "state_draw_graph": 1, + "state_draw_graph": 0, "state_value": 1, "state_generic_value": 0 }, { "state_name": "hwStackPortStatus", "state_descr": "Down", - "state_draw_graph": 1, + "state_draw_graph": 0, "state_value": 2, "state_generic_value": 2 }