diff --git a/agent_based/bgp_peer.py b/agent_based/bgp_peer.py index 0f10cc652b0927e938409bc660e55e1afd367683..fa8a2c9f9ec73aa3c30a8266012033d38c8f0c80 100644 --- a/agent_based/bgp_peer.py +++ b/agent_based/bgp_peer.py @@ -31,6 +31,8 @@ # 2022-04-29: added upper/lower prefix limits from wato # added info if device is admin prefix limit capable (device_admin_limit) # 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 # # Example Agent Output: @@ -81,7 +83,22 @@ from cmk.base.plugins.agent_based.utils.bgp_peer import ( def parse_bgp_peer(string_table: StringTable) -> Optional[Dict[str, BgpPeer]]: peer_table = {} for entry in string_table: - bgp_peer = bgp_get_peer_entry(entry) + remote_addr, peer_state, admin_state, remote_as, in_updates, out_updates, in_messages, out_messages, \ + fsm_established_transitions, fsm_established_time, in_update_elapsed_time = entry + + bgp_peer = bgp_get_peer_entry( + remote_addr=remote_addr, + peer_state=peer_state, + admin_state=admin_state, + remote_as=remote_as, + in_updates=in_updates, + out_updates=out_updates, + in_messages=in_messages, + out_messages=out_messages, + fsm_established_transitions=fsm_established_transitions, + fsm_established_time=fsm_established_time, + in_update_elapsed_time=in_update_elapsed_time + ) if bgp_peer: peer_table.update(bgp_peer) return peer_table @@ -90,6 +107,7 @@ def parse_bgp_peer(string_table: StringTable) -> Optional[Dict[str, BgpPeer]]: def discovery_bgp_peer(params, section: Dict[str, BgpPeer]) -> DiscoveryResult: _item_parts = [ 'remote_address', + 'remote_as', 'address_family', 'routing_instance', ] @@ -200,6 +218,7 @@ register.snmp_section( '7', # bgpPeerRemoteAddr '2', # bgpPeerState '3', # bgpPeerAdminStatus + '9', # bgpPeerRemoteAs '10', # bgpPeerInUpdates '11', # bgpPeerOutUpdates '12', # bgpPeerInTotalMessages @@ -218,9 +237,10 @@ register.check_plugin( discovery_function=discovery_bgp_peer, discovery_default_parameters={ 'build_item': [ - # 'remote_address', - # 'address_family', - # 'routing_instance', + # 'remote_address', + 'remote_as', + # 'address_family', + # 'routing_instance', ] }, discovery_ruleset_name='discovery_bgp_peer', diff --git a/agent_based/utils/bgp_peer.py b/agent_based/utils/bgp_peer.py index 0284eb0075c839096823df495b2b6cb9a32b16e4..5044f8cfb02c896b6a7ab3f5ec77da79631da6cf 100644 --- a/agent_based/utils/bgp_peer.py +++ b/agent_based/utils/bgp_peer.py @@ -13,7 +13,8 @@ # 2022-04-29: added device_admin_limit # 2022-04-30: code cleanup/streamlining # 2022-05-09: added item to BgpPeer class, this is used in the discovery function -# +# 2022-05-11: changed bgp_get_peer_entry to get proper parameters instead of Nontransparent list +# added remote_as to BgpPeerItem import requests import json @@ -25,9 +26,11 @@ from dataclasses import dataclass class BgpPeerItem(TypedDict): remote_address: str + remote_as: str address_family: str routing_instance: str + @dataclass class BgpPeer: peer_state: int @@ -210,12 +213,19 @@ def bgp_get_ip_address_from_oid(oid_end): return ip_address -def bgp_get_peer_entry(peer: List) -> Optional[Dict[str, BgpPeer]]: - try: - remote_addr, peer_state, admin_state, in_updates, out_updates, in_messages, out_messages, \ - fsm_established_transitions, fsm_established_time, in_update_elapsed_time = peer - except ValueError: - return +def bgp_get_peer_entry( + remote_addr: str, + remote_as: str, + peer_state: str, + admin_state: str, + fsm_established_transitions: str, + fsm_established_time: str, + in_updates: Optional[str], + out_updates: Optional[str], + in_messages: Optional[str], + out_messages: Optional[str], + in_update_elapsed_time: Optional[str], +) -> Optional[Dict[str, BgpPeer]]: bgp_peer = BgpPeer( peer_state=int(peer_state), @@ -227,6 +237,7 @@ def bgp_get_peer_entry(peer: List) -> Optional[Dict[str, BgpPeer]]: metric_rate=[], item={ 'remote_address': remote_addr, + 'remote_as': f'AS{remote_as}', 'address_family': '', 'routing_instance': '', }, diff --git a/bgp_peer.mkp b/bgp_peer.mkp index d710de6e528646e7a828bb7a8182917ab739b04a..58bc433251708009dd4eca1bf321978f840f5dfe 100644 Binary files a/bgp_peer.mkp and b/bgp_peer.mkp differ diff --git a/packages/bgp_peer b/packages/bgp_peer index fd6a9142c85e6d903ac74aeda8353f337e422f9c..dfcc8b91512fea1eff3376ee8da651d54c404a8c 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': '20220509.v1.8', + 'version': '20220511.v1.8', '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 5e37eb5c8f0d3c87b198aec880155372f6609ffe..9f80635dbf9c874be52951b261447f9921bbacbd 100644 --- a/web/plugins/wato/bgp_peer.py +++ b/web/plugins/wato/bgp_peer.py @@ -15,7 +15,7 @@ # 2022-04-02: added bgp neighbour states # 2022-04-29: added upper/lower prefix limit # 2022-05-09: added discovery rule set -# +# 2022-05-11: added remote_as to build_item from cmk.gui.i18n import _ from cmk.gui.valuespec import ( @@ -206,6 +206,7 @@ rulespec_registry.register( def _valuespec_discovery_bgp_peer(): item_parts = [ # ('remote_address', 'Peer remote address'), + ('remote_as', 'Remote AS'), ('address_family', 'Address family'), ('routing_instance', 'Routing instance/VRF'), @@ -224,7 +225,7 @@ def _valuespec_discovery_bgp_peer(): 'instances/VRFs configured.' ), choices=item_parts, - default_value=[], + default_value=['remote_as'], )), ], )