From 6692bc13831c09105c243054d19626ba28cddfb9 Mon Sep 17 00:00:00 2001
From: "th.l" <thl-cmk@outlook.com>
Date: Mon, 5 Sep 2022 19:33:43 +0200
Subject: [PATCH] update project

---
 agent_based/bgp_peer.py      |  51 +++---
 bgp_peer.mkp                 | Bin 15450 -> 15203 bytes
 packages/bgp_peer            |   2 +-
 web/plugins/wato/bgp_peer.py | 306 ++++++++++++++++++-----------------
 4 files changed, 179 insertions(+), 180 deletions(-)

diff --git a/agent_based/bgp_peer.py b/agent_based/bgp_peer.py
index fa8a2c9..a36a35f 100644
--- a/agent_based/bgp_peer.py
+++ b/agent_based/bgp_peer.py
@@ -1,24 +1,13 @@
 #!/usr/bin/env python3
 # -*- coding: utf-8 -*-
 
-###############################################################################
-#    This program is free software: you can redistribute it and/or modify
-#    it under the terms of the GNU General Public License as published by
-#    the Free Software Foundation, either version 3 of the License, or
-#    (at your option) any later version.
-#
-#    This program is distributed in the hope that it will be useful,
-#    but WITHOUT ANY WARRANTY; without even the implied warranty of
-#    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-#    GNU General Public License for more details.
-#
-#    You should have received a copy of the GNU General Public License
-#    along with this program.  If not, see <http://www.gnu.org/licenses/>.
-###############################################################################
+# License: GNU General Public License v2
 
-###############################################################################
-# Author: Thomas Wollner (tw@wollner-net.de)
-###############################################################################
+# Author: thl-cmk[at]outlook[dot]com
+# URL   : https://thl-cmk.hopto.org
+# Date  : 2021-10-25
+
+# based on the BGP peer plugin by Thomas Wollner (tw@wollner-net.de)
 #
 # 2021-08-20: rewritten for CMK 2.0 by thl-cmk[at]outlook[dot]com
 # 2021-08-21: added more perfdata, added metrics file
@@ -33,6 +22,7 @@
 # 2022-05-09: made item name configurable (don't use address-family/routing-instance/VRF)
 # 2022-05-11: changed bgp_get_peer_entry to get proper parameters instead of Nontransparent list
 #             added remote_as to BgpPeerItem
+# 2022-09-05: added missing wato parameters to register.check_plugin check_default_parameters
 #
 
 # Example Agent Output:
@@ -49,7 +39,7 @@
 # .1.3.6.1.2.1.15.3.1.11.192.168.254.2 = Counter32: 5
 # .1.3.6.1.2.1.15.3.1.14.192.168.254.2 = Hex-STRING: 04 00
 # .1.3.6.1.2.1.15.3.1.16.192.168.254.2 = Gauge32: 6586822
-###############################################################################
+#
 
 import time
 from typing import Dict, Optional
@@ -122,20 +112,8 @@ def discovery_bgp_peer(params, section: Dict[str, BgpPeer]) -> DiscoveryResult:
 
 
 def check_bgp_peer(item, params, section: Dict[str, BgpPeer]) -> CheckResult:
-    # default monitoring states for bgpPeerState
-    neighborstate = {
-        '1': 2,  # idle
-        '2': 1,  # connect
-        '3': 1,  # active
-        '4': 1,  # opensent
-        '5': 1,  # openconfirm
-        '6': 0,  # established
-    }
-
     item = params.get('internal_item', item)
-
-    neighborstate.update(params.get('neighborstate', neighborstate))  # update neighbor status with params
-
+    neighborstate = params['neighborstate']
     peer_not_found_state = params['peernotfound']
 
     for bgp_connection, bgp_alias, not_found_state in params.get('peer_list', []):
@@ -251,6 +229,17 @@ register.check_plugin(
         'peernotfound': 2,
         'admindown': 1,
         'noprefixlimit': 1,
+        'accepted_prefixes_upper_levels': (None, None),
+        'accepted_prefixes_lower_levels': (None, None),
+        'neighborstate': {
+            '1': 2,  # idle
+            '2': 1,  # connect
+            '3': 1,  # active
+            '4': 1,  # opensent
+            '5': 1,  # openconfirm
+            '6': 0,  # established
+        },
+        'internal_item': None,
     },
     check_ruleset_name='bgp_peer',
 )
diff --git a/bgp_peer.mkp b/bgp_peer.mkp
index 685389e92076764703ab453c17472d4fd0001ac6..6e2180eca3d94dd4e65d876df55c747e87108fe9 100644
GIT binary patch
delta 15115
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

delta 15329
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

diff --git a/packages/bgp_peer b/packages/bgp_peer
index fc7af17..a896845 100644
--- a/packages/bgp_peer
+++ b/packages/bgp_peer
@@ -20,7 +20,7 @@
  'name': 'bgp_peer',
  'num_files': 8,
  'title': 'BGP Peer State Check',
- 'version': '20220512.v1.8',
+ 'version': '220905.v1.8a',
  'version.min_required': '2.0.0',
  'version.packaged': '2021.09.20',
  'version.usable_until': None}
\ No newline at end of file
diff --git a/web/plugins/wato/bgp_peer.py b/web/plugins/wato/bgp_peer.py
index 9f80635..8d5d1ba 100644
--- a/web/plugins/wato/bgp_peer.py
+++ b/web/plugins/wato/bgp_peer.py
@@ -16,6 +16,7 @@
 # 2022-04-29: added upper/lower prefix limit
 # 2022-05-09: added discovery rule set
 # 2022-05-11: added remote_as to build_item
+# 2022-09-05: added internal_item to avoid warnings on cmk updates
 
 from cmk.gui.i18n import _
 from cmk.gui.valuespec import (
@@ -39,157 +40,166 @@ from cmk.gui.plugins.wato import (
 
 
 def _parameter_valuespec_bgp_peer():
-    return Dictionary(elements=[
-        ('minuptime',
-         Tuple(
-             title=_('Minimum uptime for peer'),
-             orientation='horizontal',
-             help=_('Set the time in seconds, a peer must be up before the peer is considered sable.'),
-             elements=[
-                 Integer(title=_('Warning below'), unit='seconds', default_value=7200, minvalue=0),
-                 Integer(title=_('Critical below'), unit='seconds', default_value=3600, minvalue=0)
-             ],
-         )),
-        ('accepted_prefixes_upper_levels',
-         Tuple(
-             title=_('Accepted prefixes upper levels'),
-             help=_('The values from WATO are preferred to the values from the device.'),
-             orientation='horizontal',
-             elements=[
-                 Integer(title=_('Warning at'), minvalue=0, unit=_('prefixes'), size=5),
-                 Integer(title=_('Critical at'), minvalue=0, unit=_('prefixes'), size=5),
-             ],
-         )),
-        ('accepted_prefixes_lower_levels',
-         Tuple(
-             title=_('Accepted prefixes lower levels'),
-             orientation='horizontal',
-             elements=[
-                 Integer(title=_('Warning below'), minvalue=0, unit=_('prefixes'), size=5),
-                 Integer(title=_('Critical below'), minvalue=0, unit=_('prefixes'), size=5),
-             ],
-         )),
-        ('peernotfound',
-         MonitoringState(
-             default_value=2,
-             title=_('State if peer is no not found.'),
-             help=_('Default monitoring state if the peer is not found in the SNMP data')
-         )),
-        ('admindown',
-         MonitoringState(
-             default_value=1,
-             title=_('State if peer is admin shutdown.'),
-             help=_('Monitoring state if the peer is admin shutdown')
-         )),
-        ('neighborstate',
-         Dictionary(
-             title=_('State to report for BGP neighbor state'),
-             help=_('Map each BGP state to a CheckMK monitoring state'),
-             elements=[
-                 ('1',
-                  MonitoringState(
-                      title=_('1 - idle'),
-                      help=_('This is the first stage of the BGP FSM. BGP detects a start event, tries to initiate a '
-                             'TCP connection to the BGP peer, and also listens for a new connect from a peer router. '
-                             'If an error causes BGP to go back to the Idle state for a second time, the '
-                             'ConnectRetryTimer is set to 60 seconds and must decrement to zero before the connection '
-                             'is initiated again. Further failures to leave the Idle state result in the '
-                             'ConnectRetryTimer doubling in length from the previous time. '
-                             'Default monitoring state is "CRIT"'),
-                      default_value=2,
-                  )),
-                 ('2',
-                  MonitoringState(
-                      title=_('2 - connect'),
-                      help=_('In this state, BGP initiates the TCP connection. If the 3-way TCP handshake completes, '
-                             'the established BGP Session BGP process resets the ConnectRetryTimer and sends the Open '
-                             'message to the neighbor, and then changes to the OpenSent State.'
-                             'Default monitoring state is "WARN"'),
-                      default_value=1,
-                  )),
-                 ('3',
-                  MonitoringState(
-                      title=_('3 - active'),
-                      help=_('In this state, BGP starts a new 3-way TCP handshake. If a connection is established, '
-                             'an Open message is sent, the Hold Timer is set to 4 minutes, and the state moves to '
-                             'OpenSent. If this attempt for TCP connection fails, the state moves back to the Connect '
-                             'state and resets the ConnectRetryTimer. '
-                             'Default monitoring state is "WARN"'),
-                      default_value=1,
-                  )),
-                 ('4',
-                  MonitoringState(
-                      title=_('4 - opensent'),
-                      help=_('In this state, an Open message has been sent from the originating router and is awaiting '
-                             'an Open message from the other router. After the originating router receives the OPEN '
-                             'message from the other router, both OPEN messages are checked for errors. If the Open '
-                             'messages do not have any errors, the Hold Time is negotiated (using the lower value), '
-                             'and a KEEPALIVE message is sent (assuming the value is not set to zero). The connection '
-                             'state is then moved to OpenConfirm. If an error is found in the OPEN message, a '
-                             'Notification message is sent, and the state is moved back to Idle.'
-                             ' Default monitoring state is "WARN"'),
-                      default_value=1,
-                  )),
-                 ('5',
-                  MonitoringState(
-                      title=_('5 - openconfirm'),
-                      help=_('In this state, BGP waits for a Keepalive or Notification message. Upon receipt of a '
-                             'neighbor’s Keepalive, the state is moved to Established. If the hold timer expires, a '
-                             'stop event occurs, or a Notification message is received, and the state is moved to '
-                             'Idle. '
-                             'Default monitoring state is "WARN"'),
-                      default_value=1,
-                  )),
-                 ('6',
-                  MonitoringState(
-                      title=_('6 - established'),
-                      help=_('In this state, the BGP session is established. BGP neighbors exchange routes via Update '
-                             'messages. As Update and Keepalive messages are received, the Hold Timer is reset. If the '
-                             'Hold Timer expires, an error is detected and BGP moves the neighbor back to the Idle '
-                             'state. '
-                             'Default monitoring state is "OK"'),
-                      default_value=0,
-                  )),
-             ])),
-        ('noprefixlimit',
-         MonitoringState(
-             default_value=1,
-             title=_('State if no admin prefix limit/warn threshold is configured.'),
-             help=_('The admin prefix limit and warn threshold needs to be configured on the device. '
-                    'For example: "neighbor 172.17.10.10 maximum-prefix 10000 80". The threshold is in percentage '
-                    'of the prefix limit.')
-         )),
-        ('peer_list',
-         ListOf(
+    return Dictionary(
+        elements=[
+            ('minuptime',
              Tuple(
+                 title=_('Minimum uptime for peer'),
                  orientation='horizontal',
+                 help=_('Set the time in seconds, a peer must be up before the peer is considered sable.'),
                  elements=[
-                     TextUnicode(
-                         title=_('BGP Peer'),
-                         help=_('The configured value must match a BGP item reported by the monitored '
-                                'device. For example: "10.194.115.98" or "2A10:1CD0:1020:135::20 IPv6 Unicast"'),
-                         allow_empty=False,
-                         size=50,
-                     ),
-                     TextUnicode(
-                         title=_('BGP Peer Alias'),
-                         help=_('You can configure an individual alias here for the BGP peer matching '
-                                'the text configured in the "BGP Peer IP-address" field. The alias will '
-                                'be shown in the check info'),
-                         size=50,
-                     ),
-                     MonitoringState(
-                         default_value=2,
-                         title=_('State if not found'),
-                         help=_('You can configure an individual state if the BGP peer matching the text '
-                                'configured in the "BGP Peer IP-address" field is not found')
-                     ),
-                 ]),
-             add_label=_('Add BGP peer'),
-             movable=False,
-             title=_('BGP Peers'),
-         )),
-    ])
+                     Integer(title=_('Warning below'), unit='seconds', default_value=7200, minvalue=0),
+                     Integer(title=_('Critical below'), unit='seconds', default_value=3600, minvalue=0)
+                 ],
+             )),
+            ('accepted_prefixes_upper_levels',
+             Tuple(
+                 title=_('Accepted prefixes upper levels'),
+                 help=_('The values from WATO are preferred to the values from the device.'),
+                 orientation='horizontal',
+                 elements=[
+                     Integer(title=_('Warning at'), minvalue=0, unit=_('prefixes'), size=5),
+                     Integer(title=_('Critical at'), minvalue=0, unit=_('prefixes'), size=5),
+                 ],
+             )),
+            ('accepted_prefixes_lower_levels',
+             Tuple(
+                 title=_('Accepted prefixes lower levels'),
+                 orientation='horizontal',
+                 elements=[
+                     Integer(title=_('Warning below'), minvalue=0, unit=_('prefixes'), size=5),
+                     Integer(title=_('Critical below'), minvalue=0, unit=_('prefixes'), size=5),
+                 ],
+             )),
+            ('peernotfound',
+             MonitoringState(
+                 default_value=2,
+                 title=_('State if peer is no not found.'),
+                 help=_('Default monitoring state if the peer is not found in the SNMP data')
+             )),
+            ('admindown',
+             MonitoringState(
+                 default_value=1,
+                 title=_('State if peer is admin shutdown.'),
+                 help=_('Monitoring state if the peer is admin shutdown')
+             )),
+            ('neighborstate',
+             Dictionary(
+                 title=_('State to report for BGP neighbor state'),
+                 help=_('Map each BGP state to a CheckMK monitoring state'),
+                 elements=[
+                     ('1',
+                      MonitoringState(
+                          title=_('1 - idle'),
+                          help=_(
+                              'This is the first stage of the BGP FSM. BGP detects a start event, tries to initiate a '
+                              'TCP connection to the BGP peer, and also listens for a new connect from a peer router. '
+                              'If an error causes BGP to go back to the Idle state for a second time, the '
+                              'ConnectRetryTimer is set to 60 seconds and must decrement to zero before the connection '
+                              'is initiated again. Further failures to leave the Idle state result in the '
+                              'ConnectRetryTimer doubling in length from the previous time. '
+                              'Default monitoring state is "CRIT"'),
+                          default_value=2,
+                      )),
+                     ('2',
+                      MonitoringState(
+                          title=_('2 - connect'),
+                          help=_(
+                              'In this state, BGP initiates the TCP connection. If the 3-way TCP handshake completes, '
+                              'the established BGP Session BGP process resets the ConnectRetryTimer and sends the Open '
+                              'message to the neighbor, and then changes to the OpenSent State.'
+                              'Default monitoring state is "WARN"'),
+                          default_value=1,
+                      )),
+                     ('3',
+                      MonitoringState(
+                          title=_('3 - active'),
+                          help=_('In this state, BGP starts a new 3-way TCP handshake. If a connection is established, '
+                                 'an Open message is sent, the Hold Timer is set to 4 minutes, and the state moves to '
+                                 'OpenSent. If this attempt for TCP connection fails, the state moves back to the Connect '
+                                 'state and resets the ConnectRetryTimer. '
+                                 'Default monitoring state is "WARN"'),
+                          default_value=1,
+                      )),
+                     ('4',
+                      MonitoringState(
+                          title=_('4 - opensent'),
+                          help=_(
+                              'In this state, an Open message has been sent from the originating router and is awaiting '
+                              'an Open message from the other router. After the originating router receives the OPEN '
+                              'message from the other router, both OPEN messages are checked for errors. If the Open '
+                              'messages do not have any errors, the Hold Time is negotiated (using the lower value), '
+                              'and a KEEPALIVE message is sent (assuming the value is not set to zero). The connection '
+                              'state is then moved to OpenConfirm. If an error is found in the OPEN message, a '
+                              'Notification message is sent, and the state is moved back to Idle.'
+                              ' Default monitoring state is "WARN"'),
+                          default_value=1,
+                      )),
+                     ('5',
+                      MonitoringState(
+                          title=_('5 - openconfirm'),
+                          help=_('In this state, BGP waits for a Keepalive or Notification message. Upon receipt of a '
+                                 'neighbor’s Keepalive, the state is moved to Established. If the hold timer expires, a '
+                                 'stop event occurs, or a Notification message is received, and the state is moved to '
+                                 'Idle. '
+                                 'Default monitoring state is "WARN"'),
+                          default_value=1,
+                      )),
+                     ('6',
+                      MonitoringState(
+                          title=_('6 - established'),
+                          help=_(
+                              'In this state, the BGP session is established. BGP neighbors exchange routes via Update '
+                              'messages. As Update and Keepalive messages are received, the Hold Timer is reset. If the '
+                              'Hold Timer expires, an error is detected and BGP moves the neighbor back to the Idle '
+                              'state. '
+                              'Default monitoring state is "OK"'),
+                          default_value=0,
+                      )),
+                 ])),
+            ('noprefixlimit',
+             MonitoringState(
+                 default_value=1,
+                 title=_('State if no admin prefix limit/warn threshold is configured.'),
+                 help=_('The admin prefix limit and warn threshold needs to be configured on the device. '
+                        'For example: "neighbor 172.17.10.10 maximum-prefix 10000 80". The threshold is in percentage '
+                        'of the prefix limit.')
+             )),
+            ('peer_list',
+             ListOf(
+                 Tuple(
+                     orientation='horizontal',
+                     elements=[
+                         TextUnicode(
+                             title=_('BGP Peer'),
+                             help=_('The configured value must match a BGP item reported by the monitored '
+                                    'device. For example: "10.194.115.98" or "2A10:1CD0:1020:135::20 IPv6 Unicast"'),
+                             allow_empty=False,
+                             size=50,
+                         ),
+                         TextUnicode(
+                             title=_('BGP Peer Alias'),
+                             help=_('You can configure an individual alias here for the BGP peer matching '
+                                    'the text configured in the "BGP Peer IP-address" field. The alias will '
+                                    'be shown in the check info'),
+                             size=50,
+                         ),
+                         MonitoringState(
+                             default_value=2,
+                             title=_('State if not found'),
+                             help=_('You can configure an individual state if the BGP peer matching the text '
+                                    'configured in the "BGP Peer IP-address" field is not found')
+                         ),
+                     ]),
+                 add_label=_('Add BGP peer'),
+                 movable=False,
+                 title=_('BGP Peers'),
+             )),
+            ('internal_item',  # added by plugin discovery function
+             TextUnicode()),
+        ],
+        hidden_keys=['internal_item'],
+    )
 
 
 rulespec_registry.register(
-- 
GitLab