From cd400b56c63265e52e5d10dbedb2fde3820028b8 Mon Sep 17 00:00:00 2001
From: "th.l" <thl-cmk@outlook.com>
Date: Mon, 23 Jan 2023 18:14:53 +0100
Subject: [PATCH] update project

---
 CHANGELOG                       |   4 ++++
 agent_based/bgp_peer.py         |  27 +++++++++++++++++++++++----
 agent_based/inv_bgp_peer.py     |   7 ++++++-
 agent_based/utils/bgp_peer.py   |  24 ++++++++++++++----------
 bgp_peer.mkp                    | Bin 15376 -> 15608 bytes
 packages/bgp_peer               |   6 +++---
 web/plugins/metrics/bgp_peer.py |   2 +-
 7 files changed, 51 insertions(+), 19 deletions(-)

diff --git a/CHANGELOG b/CHANGELOG
index b76f66a..c644463 100644
--- a/CHANGELOG
+++ b/CHANGELOG
@@ -25,3 +25,7 @@
             changed IPv6 address format to lower case as required by rfc5952 section-4.3 (this affects IPv6 items)
 2022-09-05: added missing wato parameters to register.check_plugin check_default_parameters
 2022-09-05: added internal_item to WATO as hidden_key to avoid warnings on cmk updates (THX to Jay2k1 for reporting the issue)
+2022-09-11: optimized internal flow: > alias > not found > admin down > peer state > ...
+2023-01-21: changed to always yield fsm_established_time (not only if beep connects, but also on all other states)
+2023-01-20: add description to BgpPeerItem (for Arista)
+2023-01-22: fix output for admin_state
diff --git a/agent_based/bgp_peer.py b/agent_based/bgp_peer.py
index 58c4bbe..0427531 100644
--- a/agent_based/bgp_peer.py
+++ b/agent_based/bgp_peer.py
@@ -23,8 +23,12 @@
 # 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
-# 2022-09-10: made more reliable on limited data (fsm_established_time and admin_state) (THX to martin[dot]pechstein[at]posteo[dot]de)
+# 2022-09-10: made more reliable on limited data (fsm_established_time and admin_state)
+#             (THX to martin[dot]pechstein[at]posteo[dot]de)
 # 2022-09-11: optimized internal flow: > alias > not found > admin down > peer state > ...
+# 2023-01-21: changed to always yield fsm_established_time (not only if beep connects, but also on all other states)
+# 2023-01-22: fix output for admin_state
+#
 
 # Example Agent Output:
 # BGP4-MIB
@@ -68,6 +72,8 @@ from cmk.base.plugins.agent_based.agent_based_api.v1.type_defs import (
 from cmk.base.plugins.agent_based.utils.bgp_peer import (
     BgpPeer,
     bgp_get_peer_entry,
+    bgp_adminstate,
+    bgp_peerstate,
 )
 
 
@@ -130,16 +136,29 @@ def check_bgp_peer(item, params, section: Dict[str, BgpPeer]) -> CheckResult:
         yield Result(state=State(peer_not_found_state), summary='Item not found in SNMP data')
         return
 
+    if peer.description:
+        yield Result(state=State.OK, summary=f'[{peer.description}]', details=' ')
+
     if peer.admin_state == 1:  # shutdown
-        yield Result(state=State(params['admindown']), summary=f'Admin state: {peer.peer_statestr}')
+        yield Result(state=State(params['admindown']), summary=f'Admin state: {bgp_adminstate(peer.admin_state)}')
         return
 
-    yield Result(state=State(neighborstate.get(str(peer.peer_state))), notice=f'Peer state: {peer.peer_statestr}')
+    yield Result(
+        state=State(neighborstate.get(str(peer.peer_state))),
+        notice=f'Peer state: {bgp_peerstate(peer.peer_state)}'
+    )
+
+    if peer.fsm_established_time:  # always yield fsm_established time
+        yield Metric(
+            name=f'bgp_peer_fsmestablishedtime',
+            value=peer.fsm_established_time,
+            boundaries=(0, None)
+        )
 
     if not peer.peer_state == 6:  # not established
         return
 
-    if peer.fsm_established_time:  # fms_time not None
+    if peer.fsm_established_time:  # if peer is established use fsm_established_time as uptime
         yield from check_levels(
             value=peer.fsm_established_time,
             label='Uptime',
diff --git a/agent_based/inv_bgp_peer.py b/agent_based/inv_bgp_peer.py
index 0262c14..9ed2db7 100644
--- a/agent_based/inv_bgp_peer.py
+++ b/agent_based/inv_bgp_peer.py
@@ -10,6 +10,7 @@
 # inventory of bgp peers
 #
 # 2022-04-30: code cleanup/streamlining
+# 2023-01-17: always remove fsm_established_time
 #
 
 import time
@@ -102,8 +103,12 @@ def inventory_bgp_peers(params, section) -> InventoryResult:
                 pass
 
         fsm_established_time = bgp_peer.get('fsm_established_time')
-        if fsm_established_time:
+        try:
             bgp_peer.pop('fsm_established_time')
+        except KeyError:
+            pass
+
+        if fsm_established_time:
             peer_state = bgp_peer.get('peer_state')
             in_service = True
             not_in_service_time = params.get('not_in_service_time', 2592000)
diff --git a/agent_based/utils/bgp_peer.py b/agent_based/utils/bgp_peer.py
index 803d1c2..c3123f2 100644
--- a/agent_based/utils/bgp_peer.py
+++ b/agent_based/utils/bgp_peer.py
@@ -17,6 +17,7 @@
 #             added remote_as to BgpPeerItem
 # 2022-05-12: merged bgp_get_ip_address_from_oid with bgp_render_ip_address
 #             changed IPv6 address format to lower case as required by rfc5952 section-4.3 (this affects IPv6 items)
+# 2023-01-20: add description to BgpPeerItem (for Arista)
 
 #
 # https://ftp.ripe.net/ripe/asnames/asn.txt AS Name List
@@ -39,7 +40,7 @@ class BgpPeerItem(TypedDict):
 @dataclass
 class BgpPeer:
     peer_state: int
-    peer_statestr: str
+    # peer_statestr: str
     admin_statestr: str
     metric_rate: List[Tuple[str, int]]
     metric_count: List[Tuple[str, int]]
@@ -53,6 +54,7 @@ class BgpPeer:
     accepted_prefixes: Optional[int]
     peer_unavail_reason: Optional[int]
     peer_unavail_reason_str: Optional[str]
+    description: Optional[str]
 
 
 class InvBgpPeer(TypedDict):
@@ -215,18 +217,19 @@ def bgp_get_peer_entry(
         remote_as: str,
         peer_state: str,
         fsm_established_transitions: str,
-        fsm_established_time: Optional[str],
-        admin_state: Optional[str],
-        in_updates: Optional[str],
-        out_updates: Optional[str],
-        in_messages: Optional[str],
-        out_messages: Optional[str],
-        in_update_elapsed_time: Optional[str],
+        fsm_established_time: Optional[str] = None,
+        admin_state: Optional[str] = None,
+        in_updates: Optional[str] = None,
+        out_updates: Optional[str] = None,
+        in_messages: Optional[str] = None,
+        out_messages: Optional[str] = None,
+        in_update_elapsed_time: Optional[str] = None,
+        description: Optional[str] = None,
 ) -> Optional[Dict[str, BgpPeer]]:
 
     bgp_peer = BgpPeer(
         peer_state=int(peer_state),
-        peer_statestr=bgp_peerstate(int(peer_state)),
+        # peer_statestr=bgp_peerstate(int(peer_state)),
         admin_state=int(admin_state) if admin_state.isdigit() else None,
         admin_statestr=bgp_adminstate(int(admin_state) if admin_state.isdigit() else None),
         fsm_established_time=int(fsm_established_time) if fsm_established_time.isdigit() else None,
@@ -245,6 +248,7 @@ def bgp_get_peer_entry(
         accepted_prefixes=None,
         peer_unavail_reason=0,
         peer_unavail_reason_str='',
+        description=description if description else ''
     )
 
     for key, value in [
@@ -260,7 +264,7 @@ def bgp_get_peer_entry(
 
     for key, value in [
         ('fsmestablishedtransitions', fsm_established_transitions),
-        ('inupdateelapsedtime', in_update_elapsed_time),
+        # ('inupdateelapsedtime', in_update_elapsed_time),
     ]:
         try:
             bgp_peer.metric_count.append((key, int(value)))
diff --git a/bgp_peer.mkp b/bgp_peer.mkp
index d0b078c448371845ebd4ce3f5c2e79fd972788c5..f0effdd8dae4f037d446f186132bc65c83270bfc 100644
GIT binary patch
literal 15608
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

literal 15376
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
Dq`9&y

diff --git a/packages/bgp_peer b/packages/bgp_peer
index 1bb1006..ab8d268 100644
--- a/packages/bgp_peer
+++ b/packages/bgp_peer
@@ -1,4 +1,5 @@
-{'author': 'Th.L. (thl-cmk[at]outlook[dot]com)',
+{'2023-01-23: added support for Arista Networks\ndownload_url': 'https://thl-cmk.hopto.org',
+ 'author': 'Th.L. (thl-cmk[at]outlook[dot]com)',
  'description': 'based on BGP Peer State Check by Thomas Wollner\n'
                 '\n'
                 'Rewritten for CMK 2.0 by thl-cmk[at]outlook[dot]com\n'
@@ -8,7 +9,6 @@
                 '2021-11-08: added helper functions from cisco_bgp_peer\n'
                 '2021-11-14: merged with cisco_bgp_peer\n'
                 '2022-04-18: merged with huawei_bgp_peer\n',
- 'download_url': 'https://thl-cmk.hopto.org',
  'files': {'agent_based': ['bgp_peer.py',
                            'inv_bgp_peer.py',
                            'utils/bgp_peer.py'],
@@ -20,7 +20,7 @@
  'name': 'bgp_peer',
  'num_files': 8,
  'title': 'BGP Peer State Check',
- 'version': '20220911.v1.8b',
+ 'version': '20230123.v1.9',
  '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/metrics/bgp_peer.py b/web/plugins/metrics/bgp_peer.py
index 21c2c7f..57b58ff 100644
--- a/web/plugins/metrics/bgp_peer.py
+++ b/web/plugins/metrics/bgp_peer.py
@@ -222,4 +222,4 @@ perfometer_info.append({
     'metric': 'bgp_peer_fsmestablishedtime',
     'half_value': 2592000.0,  # ome month
     'exponent': 2,
-})
\ No newline at end of file
+})
-- 
GitLab