From 8c45fb2e338433c546a6e578c27d991af76e382f Mon Sep 17 00:00:00 2001 From: "th.l" <thl-cmk@outlook.com> Date: Wed, 7 Jun 2023 18:26:46 +0200 Subject: [PATCH] update project --- agent_based/cisco_eigrp_as_info.py | 39 +- agent_based/cisco_eigrp_interface.py | 40 +- agent_based/cisco_eigrp_peers.py | 24 +- agent_based/cisco_eigrp_topology_table.py | 25 +- cisco_eigrp-0.3.0-20230607.mkp | Bin 0 -> 14092 bytes cisco_eigrp.mkp | Bin 14434 -> 14092 bytes gui/metrics/cisco_eigrp.py | 500 ++++++++++++++++++++++ gui/wato/cisco_eigrp_interface.py | 76 ++++ gui/wato/cisco_eigrp_peers.py | 63 +++ gui/wato/cisco_eigrp_topology_table.py | 54 +++ packages/cisco_eigrp | 15 +- 11 files changed, 767 insertions(+), 69 deletions(-) create mode 100644 cisco_eigrp-0.3.0-20230607.mkp create mode 100644 gui/metrics/cisco_eigrp.py create mode 100644 gui/wato/cisco_eigrp_interface.py create mode 100644 gui/wato/cisco_eigrp_peers.py create mode 100644 gui/wato/cisco_eigrp_topology_table.py diff --git a/agent_based/cisco_eigrp_as_info.py b/agent_based/cisco_eigrp_as_info.py index dbb2b15..97d25a2 100644 --- a/agent_based/cisco_eigrp_as_info.py +++ b/agent_based/cisco_eigrp_as_info.py @@ -12,8 +12,9 @@ # 2018-02-11: removed unnecessary OIDs # 2018-08-06: modified scan function # 2019-10-16: added support for IPv6 and VRFs, added parser function +# 2023-06-07: moved gui files to ~/local/lib/chek_mk/gui/plugins/... # -# + # snmpwalk sample # # thl@surfbox-ii:~$ snmpwalk -v2c -c router-01 -ObentU simulant .1.3.6.1.4.1.9.9.449.1.2.1.1 @@ -43,20 +44,18 @@ # # sample info # [ -# [u'65536.10', u'1', u'7081', u'6637', u'37', u'45', u'0', u'0', u'0', u'0', u'26', u'32', u'2', u'0', u'0', u'0', u'1', u'\n\xa7\xdc\xfd', u'10', u'0'] +# ['65536.10', '1', '7081', '6637', '37', '45', '0', '0', '0', '0', '26', '32', '2', '0', '0', '0', '1', '\n\xa7\xdc\xfd', '10', '0'] # ] # # from time import time -from dataclasses import dataclass -from typing import Optional, List +from typing import List from cmk.base.plugins.agent_based.agent_based_api.v1 import ( register, Service, Result, - check_levels, State, SNMPTree, all_of, @@ -75,13 +74,14 @@ from cmk.base.plugins.agent_based.agent_based_api.v1.type_defs import ( StringTable, ) -_InetAddressType = {0: 'unknown', - 1: 'ipv4', - 2: 'ipv6', - 3: 'ipv4z', - 4: 'ipv6z', - 16: 'dns', - } +_InetAddressType = { + 0: 'unknown', + 1: 'ipv4', + 2: 'ipv6', + 3: 'ipv4z', + 4: 'ipv6z', + 16: 'dns', +} def _render_ip_address(bytestring): @@ -99,9 +99,10 @@ def parse_cisco_eigrp_as_info(string_table: List[StringTable]): ASTable = {} ASInfo, VrfInfo = string_table - for OID_END, cEigrpNbrCount, cEigrpHellosSent, cEigrpHellosRcvd, cEigrpUpdatesSent, cEigrpUpdatesRcvd, cEigrpQueriesSent, \ - cEigrpQueriesRcvd, cEigrpRepliesSent, cEigrpRepliesRcvd, cEigrpAcksSent, cEigrpAcksRcvd, cEigrpInputQHighMark, cEigrpInputQDrops, \ - cEigrpSiaQueriesSent, cEigrpSiaQueriesRcvd, cEigrpAsRouterIdType, cEigrpAsRouterId, cEigrpTopoRoutes, cEigrpXmitPendReplies in ASInfo: + for OID_END, cEigrpNbrCount, cEigrpHellosSent, cEigrpHellosRcvd, cEigrpUpdatesSent, cEigrpUpdatesRcvd, \ + cEigrpQueriesSent, cEigrpQueriesRcvd, cEigrpRepliesSent, cEigrpRepliesRcvd, cEigrpAcksSent, cEigrpAcksRcvd, \ + cEigrpInputQHighMark, cEigrpInputQDrops, cEigrpSiaQueriesSent, cEigrpSiaQueriesRcvd, cEigrpAsRouterIdType, \ + cEigrpAsRouterId, cEigrpTopoRoutes, cEigrpXmitPendReplies in ASInfo: cEigrpVrfId = int(OID_END.split('.')[0]) cEigrpAS = OID_END.split('.')[1] @@ -147,11 +148,13 @@ def parse_cisco_eigrp_as_info(string_table: List[StringTable]): if cEigrpVrfName == 'default' and cEigrpAddrFammily == 'IPv4': ASTable.update({cEigrpVrfId: {'ServiceText': cEigrpAS, 'cEigrpVrfId': cEigrpVrfId}}) elif cEigrpVrfName == 'default' and cEigrpAddrFammily == 'IPv6': - ASTable.update({cEigrpVrfId:{'ServiceText': '%s IPv6' % cEigrpAS, 'cEigrpVrfId': cEigrpVrfId}}) + ASTable.update({cEigrpVrfId: {'ServiceText': f'{cEigrpAS} IPv6', 'cEigrpVrfId': cEigrpVrfId}}) elif cEigrpVrfName != 'default' and cEigrpAddrFammily == 'IPv4': - ASTable.update({cEigrpVrfId:{'ServiceText': '%s VRF %s' % (cEigrpAS, cEigrpVrfName), 'cEigrpVrfId': cEigrpVrfId}}) + ASTable.update({cEigrpVrfId: {'ServiceText': f'{cEigrpAS} VRF {cEigrpVrfName}', + 'cEigrpVrfId': cEigrpVrfId}}) elif cEigrpVrfName != 'default' and cEigrpAddrFammily == 'IPv6': - ASTable.update({cEigrpVrfId:{'ServiceText': '%s IPv6 VRF %s' % (cEigrpAS, cEigrpVrfName), 'cEigrpVrfId': cEigrpVrfId}}) + ASTable.update({cEigrpVrfId: {'ServiceText': f'{cEigrpAS} IPv6 VRF {cEigrpVrfName}', + 'cEigrpVrfId': cEigrpVrfId}}) return [ASTable, ASInfoTable] ########################################################################### diff --git a/agent_based/cisco_eigrp_interface.py b/agent_based/cisco_eigrp_interface.py index fcf25df..53d3d44 100644 --- a/agent_based/cisco_eigrp_interface.py +++ b/agent_based/cisco_eigrp_interface.py @@ -15,7 +15,9 @@ # 2019-10-14: added support for hamc-sha-256 authentication, md5 moved to warn, none moved to crit # 2019-10-16: added support for IPv6 and VRFs, added data parser function # 2019-10-31: changed item from interface long-name to interface short name +# 2023-06-07: moved gui files to ~/local/lib/chek_mk/gui/plugins/... # + # snmpwalk sample # # OMD[mysite]:~$ snmpwalk -ObentU -v2c -c router-01 simulant .1.3.6.1.4.1.9.9.449.1.5.1.1 @@ -107,34 +109,32 @@ # sample info # [ # [ -# [u'65536.10.1', u'0', u'0', u'0', u'0', u'0', u'0', u'0', u'0', u'5', u'0', u'0', u'0', u'0', u'0', u'0', u'0', u'0', u'0', u'0', u'1', u''], -# [u'65536.10.7', u'0', u'0', u'0', u'0', u'0', u'0', u'0', u'0', u'5', u'0', u'0', u'0', u'0', u'0', u'0', u'0', u'0', u'0', u'0', u'1', u''], -# [u'65536.10.8', u'1', u'0', u'0', u'1', u'0', u'0', u'50', u'0', u'1', u'0', u'0', u'0', u'64', u'66', u'0', u'0', u'1', u'0', u'0', u'2', u'KEY-EIGRP-10'], -# [u'65536.10.9', u'1', u'0', u'0', u'19', u'23', u'0', u'84', u'0', u'1', u'0', u'0', u'18', u'40', u'27', u'1', u'2', u'0', u'5', u'3', u'2', u'KEY-EIGRP-10'] +# ['65536.10.1', '0', '0', '0', '0', '0', '0', '0', '0', '5', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '1', ''], +# ['65536.10.7', '0', '0', '0', '0', '0', '0', '0', '0', '5', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '1', ''], +# ['65536.10.8', '1', '0', '0', '1', '0', '0', '50', '0', '1', '0', '0', '0', '64', '66', '0', '0', '1', '0', '0', '2', 'KEY-EIGRP-10'], +# ['65536.10.9', '1', '0', '0', '19', '23', '0', '84', '0', '1', '0', '0', '18', '40', '27', '1', '2', '0', '5', '3', '2', 'KEY-EIGRP-10'] # ], # [ -# [u'1', u'GigabitEthernet0/0/0'], -# [u'2', u'GigabitEthernet0/0/1'], -# [u'3', u'GigabitEthernet0/0/2'], -# [u'4', u'GigabitEthernet0/0/3'], -# [u'5', u'GigabitEthernet0'], -# [u'6', u'Null0'], -# [u'7', u'Loopback0'], -# [u'8', u'Tunnel10'], -# [u'9', u'Tunnel101'] +# ['1', 'GigabitEthernet0/0/0'], +# ['2', 'GigabitEthernet0/0/1'], +# ['3', 'GigabitEthernet0/0/2'], +# ['4', 'GigabitEthernet0/0/3'], +# ['5', 'GigabitEthernet0'], +# ['6', 'Null0'], +# ['7', 'Loopback0'], +# ['8', 'Tunnel10'], +# ['9', 'Tunnel101'] # ] # ] # -from time import mktime, gmtime from dataclasses import dataclass -from typing import Optional, List, Dict +from typing import List, Dict from cmk.base.plugins.agent_based.agent_based_api.v1 import ( register, Service, Result, - check_levels, State, SNMPTree, all_of, @@ -226,7 +226,7 @@ def parse_cisco_eigrp_interface(string_table: List[StringTable]) -> Dict[str, Ei cEigrpHelloInterval, cEigrpUMcasts, cEigrpRMcasts, cEigrpUUcasts, cEigrpRUcasts, cEigrpMcastExcepts, \ cEigrpCRpkts, cEigrpAcksSuppressed, cEigrpRetransSent, cEigrpOOSrvcd, cEigrpAuthMode, \ cEigrpAuthKeyChain in EigrpInterfaces: - + cEigrpVrfId = int(OID_END.split('.')[0]) cEigrpAS = OID_END.split('.')[1] cEigrpIfIndex = int(OID_END.split('.')[2]) @@ -235,7 +235,7 @@ def parse_cisco_eigrp_interface(string_table: List[StringTable]) -> Dict[str, Ei if int(ifindex) == cEigrpIfIndex: # compare interface index if not int(iftype) == 24: # skip Loopback interfaces cEigrpIfName = _get_short_if_name(ifname) - + if cEigrpIfName != '': cEigrpVrfName = '' for VrfId, VrfName in VrfInfo: @@ -246,7 +246,7 @@ def parse_cisco_eigrp_interface(string_table: List[StringTable]) -> Dict[str, Ei cEigrpAddrFammily = 'IPv4' else: cEigrpAddrFammily = 'IPv6' - + ServiceText = '' if cEigrpVrfName == 'default' and cEigrpAddrFammily == 'IPv4': ServiceText = f'{cEigrpIfName} on AS {cEigrpAS}' @@ -278,7 +278,7 @@ def parse_cisco_eigrp_interface(string_table: List[StringTable]) -> Dict[str, Ei cEigrpOOSrvcd=int(cEigrpOOSrvcd), cEigrpAuthMode=_eigrp_authmode(int(cEigrpAuthMode)), cEigrpAuthKeyChain=cEigrpAuthKeyChain, - ) + ) return EigrpIfTable diff --git a/agent_based/cisco_eigrp_peers.py b/agent_based/cisco_eigrp_peers.py index 4183fb4..fb57307 100644 --- a/agent_based/cisco_eigrp_peers.py +++ b/agent_based/cisco_eigrp_peers.py @@ -16,7 +16,9 @@ # 2019-10-15: added initial support for IPv6, code cleanup (parser function) # 2019-10-16: added VRF support, fixed ipv4 address rendering # 2021-08-02: rewritten for CMK 2.0 +# 2023-06-07: moved gui files to ~/local/lib/chek_mk/gui/plugins/... # + # ToDo: state_peer_not_found, alias, min_uptime_levels in WATO # # snmpwalk sample @@ -62,19 +64,19 @@ # sample info # [ # [ -# [u'65536.10.0', u'1', u'\n\xa7\xdd7', u'10', u'2', u'01:05:34', u'1', u'100', u'0', u'147', u'23.0/2.0', u'0', u'0'] +# ['65536.10.0', '1', '\n\xa7\xdd7', '10', '2', '01:05:34', '1', '100', '0', '147', '23.0/2.0', '0', '0'] # ], # [ -# [u'1', u'FastEthernet0', u'6'], -# [u'2', u'FastEthernet1', u'6'], -# [u'3', u'FastEthernet2', u'6'], -# [u'4', u'FastEthernet3', u'6'], -# [u'5', u'FastEthernet4', u'6'], -# [u'6', u'VoIP-Null0', u'1'], -# [u'7', u'Null0', u'1'], -# [u'8', u'Vlan1', u'53'], -# [u'9', u'Loopback0', u'24'], -# [u'10', u'Tunnel100', u'131'] +# ['1', 'FastEthernet0', '6'], +# ['2', 'FastEthernet1', '6'], +# ['3', 'FastEthernet2', '6'], +# ['4', 'FastEthernet3', '6'], +# ['5', 'FastEthernet4', '6'], +# ['6', 'VoIP-Null0', '1'], +# ['7', 'Null0', '1'], +# ['8', 'Vlan1', '53'], +# ['9', 'Loopback0', '24'], +# ['10', 'Tunnel100', '131'] # ] # ] # diff --git a/agent_based/cisco_eigrp_topology_table.py b/agent_based/cisco_eigrp_topology_table.py index 7321176..d675c4b 100644 --- a/agent_based/cisco_eigrp_topology_table.py +++ b/agent_based/cisco_eigrp_topology_table.py @@ -12,7 +12,9 @@ # 2018-02-11: removed unnecessary OIDs # 2018-08-06: modified scan function # 2019-10-16: added initial IPv6 support, added parser function +# 2023-06-07: moved gui files to ~/local/lib/chek_mk/gui/plugins/... # + # # snmpwalk sample # @@ -152,23 +154,22 @@ # # sample info # [ -# [u'65536.10.1.4.0.0.0.0.0', u'2', u'2', u'External', u'1', u'\n\xa7\xdd7', u'1', u'\n\xa7\xdd7', u'Tunnel100'], -# [u'65536.10.1.4.10.167.220.0.28', u'2', u'2', u'Internal', u'1', u'\n\xa7\xdd7', u'1', u'\n\xa7\xdd7', u'Tunnel100'], -# [u'65536.10.1.4.10.167.220.249.32', u'2', u'2', u'Internal', u'1', u'\n\xa7\xdd7', u'1', u'\n\xa7\xdd:', u'Tunnel100'], -# [u'65536.10.1.4.10.167.220.252.32', u'2', u'2', u'Internal', u'1', u'\n\xa7\xdd7', u'1', u'\n\xa7\xdd<', u'Tunnel100'], -# [u'65536.10.1.4.10.167.220.253.32', u'2', u'2', u'Connected', u'1', u'\x00\x00\x00\x00', u'1', u'\x00\x00\x00\x00', u'Loopback0'], -# [u'65536.10.1.4.10.167.220.255.32', u'2', u'2', u'Internal', u'1', u'\n\xa7\xdd7', u'1', u'\n\xa7\xdd7', u'Tunnel100'], -# [u'65536.10.1.4.10.167.221.0.24', u'2', u'2', u'Connected', u'1', u'\x00\x00\x00\x00', u'1', u'\x00\x00\x00\x00', u'Tunnel100'], -# [u'65536.10.1.4.192.168.57.0.24', u'2', u'2', u'Connected', u'1', u'\x00\x00\x00\x00', u'1', u'\x00\x00\x00\x00', u'Vlan1'], -# [u'65536.10.1.4.192.168.58.0.24', u'2', u'2', u'Internal', u'1', u'\n\xa7\xdd7', u'1', u'\n\xa7\xdd:', u'Tunnel100'], -# [u'65536.10.1.4.192.168.60.0.24', u'2', u'2', u'Internal', u'1', u'\n\xa7\xdd7', u'1', u'\n\xa7\xdd<', u'Tunnel100'] +# ['65536.10.1.4.0.0.0.0.0', '2', '2', 'External', '1', '\n\xa7\xdd7', '1', '\n\xa7\xdd7', 'Tunnel100'], +# ['65536.10.1.4.10.167.220.0.28', '2', '2', 'Internal', '1', '\n\xa7\xdd7', '1', '\n\xa7\xdd7', 'Tunnel100'], +# ['65536.10.1.4.10.167.220.249.32', '2', '2', 'Internal', '1', '\n\xa7\xdd7', '1', '\n\xa7\xdd:', 'Tunnel100'], +# ['65536.10.1.4.10.167.220.252.32', '2', '2', 'Internal', '1', '\n\xa7\xdd7', '1', '\n\xa7\xdd<', 'Tunnel100'], +# ['65536.10.1.4.10.167.220.253.32', '2', '2', 'Connected', '1', '\x00\x00\x00\x00', '1', '\x00\x00\x00\x00', 'Loopback0'], +# ['65536.10.1.4.10.167.220.255.32', '2', '2', 'Internal', '1', '\n\xa7\xdd7', '1', '\n\xa7\xdd7', 'Tunnel100'], +# ['65536.10.1.4.10.167.221.0.24', '2', '2', 'Connected', '1', '\x00\x00\x00\x00', '1', '\x00\x00\x00\x00', 'Tunnel100'], +# ['65536.10.1.4.192.168.57.0.24', '2', '2', 'Connected', '1', '\x00\x00\x00\x00', '1', '\x00\x00\x00\x00', 'Vlan1'], +# ['65536.10.1.4.192.168.58.0.24', '2', '2', 'Internal', '1', '\n\xa7\xdd7', '1', '\n\xa7\xdd:', 'Tunnel100'], +# ['65536.10.1.4.192.168.60.0.24', '2', '2', 'Internal', '1', '\n\xa7\xdd7', '1', '\n\xa7\xdd<', 'Tunnel100'] # ] # import re -from dataclasses import dataclass -from typing import Optional, List +from typing import List from cmk.base.plugins.agent_based.agent_based_api.v1 import ( register, diff --git a/cisco_eigrp-0.3.0-20230607.mkp b/cisco_eigrp-0.3.0-20230607.mkp new file mode 100644 index 0000000000000000000000000000000000000000..8d4ee446a86e32292281946bc1a3e2eb5d16bdd4 GIT binary patch literal 14092 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 P7xEg0bO)#d80h~1IY}{& literal 0 HcmV?d00001 diff --git a/cisco_eigrp.mkp b/cisco_eigrp.mkp index 1bc7b5846fbb3f1832c4d6111adc7afd5698b8fb..8d4ee446a86e32292281946bc1a3e2eb5d16bdd4 100644 GIT binary patch literal 14092 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 P7xEg0bO)#d80h~1IY}{& literal 14434 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 diff --git a/gui/metrics/cisco_eigrp.py b/gui/metrics/cisco_eigrp.py new file mode 100644 index 0000000..6815564 --- /dev/null +++ b/gui/metrics/cisco_eigrp.py @@ -0,0 +1,500 @@ +#!/usr/bin/env python3 +# -*- coding: utf-8 -*- +# +# License: GNU General Public License v2 +# +# Author: thl-cmk[at]outlook[dot]com +# URL : https://thl-cmk.hopto.org +# Date : 2017-12-26 +# +# Cisco EIGRP Peer metrics plugin +# +# missing a way to include hostname and service description +# + +from cmk.gui.i18n import _ + +from cmk.gui.plugins.metrics.utils import ( + metric_info, + graph_info, + perfometer_info, + unit_info, +) + +##################################################################################################################### +# +# define units for cisco_eigrp_* perfdata +# +##################################################################################################################### + + +unit_info['milliseconds'] = { + 'title': _('Milliseconds'), + 'symbol': 'ms', + 'render': lambda v: '%d' % v, + 'stepping': 'integer', # for vertical graph labels +} + +##################################################################################################################### +# +# define metrics for eigrp peer perfdata +# +##################################################################################################################### + +# define metrics for cisco_eigrp_peer perfdata + +metric_info['cisco_eigrp_peers_cEigrpUpTime'] = { + 'title': _('Peer uptime'), + 'unit': 's', + 'color': '26/a', +} +metric_info['cisco_eigrp_peers_cEigrpPktsEnqueued'] = { + 'title': _('Packets enqueued'), + 'unit': 'count', + 'color': '11/a', +} +metric_info['cisco_eigrp_peers_cEigrpRetrans'] = { + 'title': _('Retransmissions'), + 'unit': 'count', + 'color': '21/a', +} +metric_info['cisco_eigrp_peers_cEigrpRetries'] = { + 'title': _('Retries'), + 'unit': 'count', + 'color': '31/a', +} +metric_info['cisco_eigrp_peers_cEigrpSrtt'] = { + 'title': _('Smooth round trip time'), + 'unit': 'milliseconds', + 'color': '41/a', +} +metric_info['cisco_eigrp_peers_cEigrpRto'] = { + 'title': _('Retransmission timeout'), + 'unit': 'milliseconds', + 'color': '12/a', +} + +# define metrics for cisco_eigrp_interface perfdata + +metric_info['cisco_eigrp_interface_cEigrpPeerCount'] = { + 'title': _('Peer count'), + 'unit': 'count', + 'color': '26/a', +} +metric_info['cisco_eigrp_interface_cEigrpXmitReliableQ'] = { + 'title': _('Reliable queue length'), + 'unit': 'count', + 'color': '11/a', +} +metric_info['cisco_eigrp_interface_cEigrpXmitUnreliableQ'] = { + 'title': _('Unreliable queue length'), + 'unit': 'count', + 'color': '21/a', +} +metric_info['cisco_eigrp_interface_cEigrpMeanSrtt'] = { + 'title': _('Average smooth round trip time'), + 'unit': 'milliseconds', + 'color': '31/a', +} +metric_info['cisco_eigrp_interface_cEigrpPendingRoutes'] = { + 'title': _('Routing updates awaiting transmission'), + 'unit': 'count', + 'color': '41/a', +} +metric_info['cisco_eigrp_interface_cEigrpRMcasts'] = { + 'title': _('Reliable multicasts send'), + 'unit': 'count', + 'color': '12/a', +} +metric_info['cisco_eigrp_interface_cEigrpUMcasts'] = { + 'title': _('Unreliable multicasts send'), + 'unit': 'count', + 'color': '22/a', +} +metric_info['cisco_eigrp_interface_cEigrpUUcasts'] = { + 'title': _('Unreliable unicasts send'), + 'unit': 'count', + 'color': '32/a', +} +metric_info['cisco_eigrp_interface_cEigrpRUcasts'] = { + 'title': _('Reliable unicasts send'), + 'unit': 'count', + 'color': '42/a', +} +metric_info['cisco_eigrp_interface_cEigrpMcastExcepts'] = { + 'title': _('Multicast exceptions received'), + 'unit': 'count', + 'color': '25/a', +} +metric_info['cisco_eigrp_interface_cEigrpCRpkts'] = { + 'title': _('Conditional-Receive packets'), + 'unit': 'count', + 'color': '35/a', +} +metric_info['cisco_eigrp_interface_cEigrpAcksSuppressed'] = { + 'title': _('Suppressed acknowledgements'), + 'unit': 'count', + 'color': '45/a', +} +metric_info['cisco_eigrp_interface_cEigrpRetransSent'] = { + 'title': _('Retransmissions send'), + 'unit': 'count', + 'color': '16/a', +} +metric_info['cisco_eigrp_interface_cEigrpOOSrvcd'] = { + 'title': _('Out-of-sequence packets received'), + 'unit': 'count', + 'color': '26/b', +} + +# define metrics for cisco_eigrp_topology_table perfdata + +metric_info['cisco_eigrp_topology_table_routes'] = { + 'title': _('All routes'), + 'unit': 'count', + 'color': '26/a', +} +metric_info['cisco_eigrp_topology_table_activeroutes'] = { + 'title': _('Active routes'), + 'unit': 'count', + 'color': '11/a', +} +metric_info['cisco_eigrp_topology_table_siaroutes'] = { + 'title': _('Stuck in active (SIA) routes'), + 'unit': 'count', + 'color': '21/a', +} +metric_info['cisco_eigrp_topology_table_Connected'] = { + 'title': _('Connected'), + 'unit': 'count', + 'color': '31/a', +} +metric_info['cisco_eigrp_topology_table_Internal'] = { + 'title': _('Internal'), + 'unit': 'count', + 'color': '41/a', +} +metric_info['cisco_eigrp_topology_table_External'] = { + 'title': _('External'), + 'unit': 'count', + 'color': '12/a', +} +metric_info['cisco_eigrp_topology_table_Summary'] = { + 'title': _('Summary'), + 'unit': 'count', + 'color': '22/a', +} +metric_info['cisco_eigrp_topology_table_Static_redistributed'] = { + 'title': _('Static redistributed'), + 'unit': 'count', + 'color': '24/a', +} +metric_info['cisco_eigrp_topology_table_Inetaddress'] = { + 'title': _('Inet address'), + 'unit': 'count', + 'color': '15/a', +} + +# define metrics for cisco_eigrp_as_info perfdata + +metric_info['cisco_eigrp_as_info_cEigrpNbrCount'] = { + 'title': _('Neighbour count'), + 'unit': 'count', + 'color': '26/a', +} +metric_info['cisco_eigrp_as_info_cEigrpHellosSent'] = { + 'title': _('Hellos send'), + 'unit': '1/s', + 'color': '11/a', +} +metric_info['cisco_eigrp_as_info_cEigrpHellosRcvd'] = { + 'title': _('Hellos received'), + 'unit': '1/s', + 'color': '21/a', +} +metric_info['cisco_eigrp_as_info_cEigrpUpdatesSent'] = { + 'title': _('Updates send'), + 'unit': 'count', + 'color': '31/a', +} +metric_info['cisco_eigrp_as_info_cEigrpUpdatesRcvd'] = { + 'title': _('Updates received'), + 'unit': 'count', + 'color': '41/a', +} +metric_info['cisco_eigrp_as_info_cEigrpQueriesSent'] = { + 'title': _('Alternate route queries send'), + 'unit': 'count', + 'color': '12/a', +} +metric_info['cisco_eigrp_as_info_cEigrpQueriesRcvd'] = { + 'title': _('Alternate route queries received'), + 'unit': 'count', + 'color': '22/a', +} +metric_info['cisco_eigrp_as_info_cEigrpRepliesSent'] = { + 'title': _('Reply packets send'), + 'unit': 'count', + 'color': '32/a', +} +metric_info['cisco_eigrp_as_info_cEigrpRepliesRcvd'] = { + 'title': _('Reply packets received'), + 'unit': 'count', + 'color': '42/a', +} +metric_info['cisco_eigrp_as_info_cEigrpAcksSent'] = { + 'title': _('Acknowledgements send'), + 'unit': 'count', + 'color': '13/a', +} +metric_info['cisco_eigrp_as_info_cEigrpAcksRcvd'] = { + 'title': _('Acknowledgements received'), + 'unit': 'count', + 'color': '23/a', +} +metric_info['cisco_eigrp_as_info_cEigrpInputQHighMark'] = { + 'title': _('Highest number of packets in the input queue'), + 'unit': 'count', + 'color': '33/a', +} +metric_info['cisco_eigrp_as_info_cEigrpInputQDrops'] = { + 'title': _('Packets dropped from the input queue'), + 'unit': 'count', + 'color': '43/a', +} +metric_info['cisco_eigrp_as_info_cEigrpSiaQueriesSent'] = { + 'title': _('Stuck in active (SIA) queries sent'), + 'unit': 'count', + 'color': '14/a', +} +metric_info['cisco_eigrp_as_info_cEigrpSiaQueriesRcvd'] = { + 'title': _('Stuck in active (SIA) queries received'), + 'unit': 'count', + 'color': '24/a', +} +metric_info['cisco_eigrp_as_info_cEigrpTopoRoutes'] = { + 'title': _('Routes in the topology table'), + 'unit': 'count', + 'color': '34/a', +} +metric_info['cisco_eigrp_as_info_cEigrpXmitPendReplies'] = { + 'title': _('Outstanding replies expected to queries send'), + 'unit': 'count', + 'color': '44/a', +} + +###################################################################################################################### +# +# how to graph perdata for ciso_eigrp +# +###################################################################################################################### + +# graphs for cisco_eigrp_peer + +graph_info['cisco_eigrp_peer_uptime'] = { + 'title': _('Uptime'), + 'metrics': [ + ('cisco_eigrp_peers_cEigrpUpTime', 'area'), + ], +} + +graph_info['cisco_eigrp_peer_enqued'] = { + 'title': _('Packets enqueued'), + 'metrics': [ + ('cisco_eigrp_peers_cEigrpPktsEnqueued', 'line'), + ], +} + +graph_info['cisco_eigrp_peer_retransmission'] = { + 'title': _('Smooth round trip time / retransmission timeout'), + 'metrics': [ + ('cisco_eigrp_peers_cEigrpSrtt', 'line'), + ('cisco_eigrp_peers_cEigrpRto', 'line'), + ], +} +graph_info['cisco_eigrp_peer_error'] = { + 'title': _('Retransmissions / Retries'), + 'metrics': [ + ('cisco_eigrp_peers_cEigrpRetrans', 'line'), + ('cisco_eigrp_peers_cEigrpRetries', 'line'), + ], +} + +# graphs for cisco_eigrp_as_info + +graph_info['cisco_eigrp_as_info_neighbour_count'] = { + 'title': _('Neighbour count'), + 'metrics': [ + ('cisco_eigrp_as_info_cEigrpNbrCount', 'line'), + ], +} + +graph_info['cisco_eigrp_as_info_route_count'] = { + 'title': _('Routes in the topology table'), + 'metrics': [ + ('cisco_eigrp_as_info_cEigrpTopoRoutes', 'line'), + ], +} + +graph_info['cisco_eigrp_as_info_hellos'] = { + 'title': _('Hellos send/received'), + 'metrics': [ + ('cisco_eigrp_as_info_cEigrpHellosSent', 'line'), + ('cisco_eigrp_as_info_cEigrpHellosRcvd', '-line'), + ], +} + +graph_info['cisco_eigrp_as_info_packets'] = { + 'title': _('Packets send/received'), + 'metrics': [ + ('cisco_eigrp_as_info_cEigrpQueriesSent', 'line'), + ('cisco_eigrp_as_info_cEigrpUpdatesSent', 'line'), + ('cisco_eigrp_as_info_cEigrpRepliesSent', 'line'), + ('cisco_eigrp_as_info_cEigrpAcksSent', 'line'), + ('cisco_eigrp_as_info_cEigrpSiaQueriesSent', 'line'), + ('cisco_eigrp_as_info_cEigrpQueriesRcvd', '-line'), + ('cisco_eigrp_as_info_cEigrpUpdatesRcvd', '-line'), + ('cisco_eigrp_as_info_cEigrpRepliesRcvd', '-line'), + ('cisco_eigrp_as_info_cEigrpAcksRcvd', '-line'), + ('cisco_eigrp_as_info_cEigrpSiaQueriesRcvd', '-line'), + ], +} + +graph_info['cisco_eigrp_as_info_drops'] = { + 'title': _('Input queue drops / Queue hi mark'), + 'metrics': [ + ('cisco_eigrp_as_info_cEigrpInputQDrops', 'line'), + ('cisco_eigrp_as_info_cEigrpInputQHighMark', 'line'), + ], +} + +# graphs for cisco_eigrp_interface + +graph_info['cisco_eigrp_interface_peer_count'] = { + 'title': _('Peer count'), + 'metrics': [ + ('cisco_eigrp_interface_cEigrpPeerCount', 'line'), + ], +} + +graph_info['cisco_eigrp_interface_queue_length'] = { + 'title': _('Queue length'), + 'metrics': [ + ('cisco_eigrp_interface_cEigrpXmitReliableQ', 'line'), + ('cisco_eigrp_interface_cEigrpXmitUnreliableQ', 'line'), + ], +} + +graph_info['cisco_eigrp_interface_multicasts'] = { + 'title': _('Multicasts send'), + 'metrics': [ + ('cisco_eigrp_interface_cEigrpRMcasts', 'line'), + ('cisco_eigrp_interface_cEigrpUMcasts', 'line'), + ], +} + +graph_info['cisco_eigrp_interface_unicasts'] = { + 'title': _('Unicasts send'), + 'metrics': [ + ('cisco_eigrp_interface_cEigrpUUcasts', 'line'), + ('cisco_eigrp_interface_cEigrpRUcasts', 'line'), + ], +} + +graph_info['cisco_eigrp_interface_pendinf_routes'] = { + 'title': _('Pending Routes'), + 'metrics': [ + ('cisco_eigrp_interface_cEigrpPendingRoutes', 'line'), + ], +} + +graph_info['cisco_eigrp_interface_packets'] = { + 'title': _('Various packets'), + 'metrics': [ + ('cisco_eigrp_interface_cEigrpMcastExcepts', 'line'), + ('cisco_eigrp_interface_cEigrpCRpkts', 'line'), + ('cisco_eigrp_interface_cEigrpRetransSent', 'line'), + ('cisco_eigrp_interface_cEigrpOOSrvcd', 'line'), + ], +} + +graph_info['cisco_eigrp_interface_rtt'] = { + 'title': _('Average smooth round trip time'), + 'metrics': [ + ('cisco_eigrp_interface_cEigrpMeanSrtt', 'line'), + ], +} + +graph_info['cisco_eigrp_interface_ack_suppressed'] = { + 'title': _('Suppressed acknowledgements'), + 'metrics': [ + ('cisco_eigrp_interface_cEigrpAcksSuppressed', 'line'), + ], +} + +# define metrics for cisco_eigrp_topology_table perfdata + +graph_info['cisco_eigrp_topology_table_routes'] = { + 'title': _('Routes by origin type'), + 'metrics': [ + ('cisco_eigrp_topology_table_Inetaddress', 'line'), + ('cisco_eigrp_topology_table_Static_redistributed', 'line'), + ('cisco_eigrp_topology_table_Summary', 'line'), + ('cisco_eigrp_topology_table_External', 'line'), + ('cisco_eigrp_topology_table_Internal', 'line'), + ('cisco_eigrp_topology_table_Connected', 'line'), + ('cisco_eigrp_topology_table_routes', 'line'), + ], + 'optional_metrics': [ + 'cisco_eigrp_topology_table_Inetaddress', + 'cisco_eigrp_topology_table_Static_redistributed', + 'cisco_eigrp_topology_table_Summary', + 'cisco_eigrp_topology_table_External', + 'cisco_eigrp_topology_table_Internal', + 'cisco_eigrp_topology_table_Connected', + ] + # 'range': (0, 'cisco_eigrp_topology_table_routes:max') +} + +graph_info['cisco_eigrp_topology_table_active_sia'] = { + 'title': _('Stuck in active (SIA) / active routes'), + 'metrics': [ + ('cisco_eigrp_topology_table_siaroutes', 'line'), + ('cisco_eigrp_topology_table_activeroutes', 'line'), + ], +} + +###################################################################################################################### +# +# define perf-o-meter for cisco_eigrp +# +###################################################################################################################### + +# cisco_eigrp_peers peer uptime +perfometer_info.append({ + 'type': 'logarithmic', + 'metric': 'cisco_eigrp_peers_cEigrpUpTime', + 'half_value': 2592000.0, + 'exponent': 2, +}) + +# cisco_eigrp_interface send packets +perfometer_info.append({ + 'type': 'linear', + 'segments': ['cisco_eigrp_interface_cEigrpPeerCount'], + 'total': 50, +}) + +# cisco_eigrp_topology_table +perfometer_info.append({ + 'type': 'linear', + 'segments': ['cisco_eigrp_topology_table_routes'], + 'total': 1000, +}) + +# cisco_eigrp_as_info +perfometer_info.append({ + 'type': 'linear', + 'segments': ['cisco_eigrp_as_info_cEigrpNbrCount'], + 'total': 30, +}) diff --git a/gui/wato/cisco_eigrp_interface.py b/gui/wato/cisco_eigrp_interface.py new file mode 100644 index 0000000..d5bff84 --- /dev/null +++ b/gui/wato/cisco_eigrp_interface.py @@ -0,0 +1,76 @@ +#!/usr/bin/env python3 +# -*- coding: utf-8 -*- +# +# License: GNU General Public License v2 + +# Author: thl-cmk[at]outlook[dot]com +# URL : https://thl-cmk.hopto.org +# Date : 2017-12-27 +# +# Check_MK cisco_eigrp_peer WATO plugin +# +from cmk.gui.i18n import _ +from cmk.gui.valuespec import ( + Dictionary, + TextAscii, + MonitoringState, + ListChoice, +) + +from cmk.gui.plugins.wato.utils import ( + CheckParameterRulespecWithItem, + rulespec_registry, + RulespecGroupCheckParametersNetworking, +) + +_ignore_interfaces_auth = [ + (6, 'Ethernet CSMAD'), + (24, 'Loopback'), + (53, 'Proprietary Virtual (Cisco VLAN L3)'), + (131, 'Tunnel'), + (135, 'Layer 2 VLAN',), + (136, 'Layer 3 IP VLAN'), +] + + +def _parameter_valuespec_cisco_eigrp_interface(): + return Dictionary( + help=_(''), + elements=[ + ('ignore_interfaces_auth', + ListChoice( + title=_('no warning if EIRGP authentication not configured on selected interface types'), + help=_('no warning if EIRGP authentication not configured on selected interface types'), + choices=_ignore_interfaces_auth, + default_value=[], + )), + ('no_auth_state', + MonitoringState( + title=_('State to report when interface has no authentication configured'), + help=_( + 'State if an EIGRP enabled interface has no authentication configured. Default is critical'), + default_value=2, + ), + ), + + ('md5_auth_state', + MonitoringState( + title=_('State to report when interface uses MD5 authentication'), + help=_('State if an EIGRP enabled interface uses an MD5 hash as authentication method. ' + 'Default is warning'), + default_value=1, + ), + ), + ], + ) + + +rulespec_registry.register( + CheckParameterRulespecWithItem( + check_group_name='cisco_eigrp_interface', + group=RulespecGroupCheckParametersNetworking, + item_spec=lambda: TextAscii(title=_('Cisco EIGRP interface'), ), + match_type='dict', + parameter_valuespec=_parameter_valuespec_cisco_eigrp_interface, + title=lambda: _('Cisco EIGRP interface'), + )) diff --git a/gui/wato/cisco_eigrp_peers.py b/gui/wato/cisco_eigrp_peers.py new file mode 100644 index 0000000..00b6566 --- /dev/null +++ b/gui/wato/cisco_eigrp_peers.py @@ -0,0 +1,63 @@ +#!/usr/bin/env python3 +# -*- coding: utf-8 -*- +# +# License: GNU General Public License v2 + +# Author: thl-cmk[at]outlook[dot]com +# URL : https://thl-cmk.hopto.org +# Date : 2017-12-25 +# +# Check_MK cisco_eigrp_peer WATO plugin +# +from cmk.gui.i18n import _ +from cmk.gui.valuespec import ( + Dictionary, + Integer, + TextAscii, + Tuple, +) + +from cmk.gui.plugins.wato.utils import ( + CheckParameterRulespecWithItem, + rulespec_registry, + RulespecGroupCheckParametersNetworking, +) + + +def _parameter_valuespec_cisco_eigrp_peers(): + return Dictionary( + help=_(''), + elements=[ + ('minuptime', + Tuple( + title=_('Minimum uptime for peer. Default is 1/2 hours.'), + help=_('Set the time in seconds, a peer must be up before the peer is considered stable.' + 'If the peer uptime less then X, the check outcome is set to warning/critical.'), + elements=[ + Integer( + title=_('Warning below'), + unit='seconds', + default_value=7200, + help=_('The uptime in seconds below which a warning state is triggered. Default is 7200s'), + ), + Integer( + title=_('Critical below'), + unit='seconds', + default_value=3600, + help=_('The uptime in seconds below which a critical state is triggered. default is 3600s'), + ) + ], + )), + ], + ) + + +rulespec_registry.register( + CheckParameterRulespecWithItem( + check_group_name='cisco_eigrp_peers', + group=RulespecGroupCheckParametersNetworking, + item_spec=lambda: TextAscii(title=_('Cisco EIGRP peer'), ), + match_type='dict', + parameter_valuespec=_parameter_valuespec_cisco_eigrp_peers, + title=lambda: _('Cisco EIGRP peer'), + )) diff --git a/gui/wato/cisco_eigrp_topology_table.py b/gui/wato/cisco_eigrp_topology_table.py new file mode 100644 index 0000000..4cad6e8 --- /dev/null +++ b/gui/wato/cisco_eigrp_topology_table.py @@ -0,0 +1,54 @@ +#!/usr/bin/env python3 +# -*- coding: utf-8 -*- +# +# License: GNU General Public License v2 + +# Author: thl-cmk[at]outlook[dot]com +# URL : https://thl-cmk.hopto.org +# Date : 2017-12-27 +# +# +# Check_MK cisco_eigrp_topology_table WATO plugin +# +from cmk.gui.i18n import _ +from cmk.gui.valuespec import ( + Dictionary, + ListChoice, + TextAscii, +) + +from cmk.gui.plugins.wato.utils import ( + CheckParameterRulespecWithItem, + rulespec_registry, + RulespecGroupCheckParametersNetworking, +) + +_nowarnon = [('siaroutes', 'Stuck in active (SIA) routes'), + ('activeroutes', 'Active routes')] + + +def _parameter_valuespec_cisco_eigrp_topology_table(): + return Dictionary( + help=_(''), + elements=[ + ('nowarnon', + ListChoice( + title=_('no warning if EIRGP SIA/active route found'), + help=_('no warning if EIRGP Stuck in active (SIA) / active route found'), + choices=_nowarnon, + default_value=[], + ), + ) + ], + ) + + +rulespec_registry.register( + CheckParameterRulespecWithItem( + check_group_name='cisco_eigrp_topology_table', + group=RulespecGroupCheckParametersNetworking, + item_spec=lambda: TextAscii(title=_('Cisco EIGRP topology table'), ), + match_type='dict', + parameter_valuespec=_parameter_valuespec_cisco_eigrp_topology_table, + title=lambda: _('Cisco EIGRP topology table'), + )) diff --git a/packages/cisco_eigrp b/packages/cisco_eigrp index 2439a4c..912a9d0 100644 --- a/packages/cisco_eigrp +++ b/packages/cisco_eigrp @@ -13,14 +13,13 @@ 'cisco_eigrp_interface.py', 'cisco_eigrp_peers.py', 'cisco_eigrp_topology_table.py'], - 'web': ['plugins/wato/cisco_eigrp_peers.py', - 'plugins/wato/cisco_eigrp_interface.py', - 'plugins/wato/cisco_eigrp_topology_table.py', - 'plugins/metrics/cisco_eigrp.py']}, + 'gui': ['metrics/cisco_eigrp.py', + 'wato/cisco_eigrp_interface.py', + 'wato/cisco_eigrp_peers.py', + 'wato/cisco_eigrp_topology_table.py']}, 'name': 'cisco_eigrp', - 'num_files': 8, 'title': 'Cisco EIGRP checks', - 'version': '20210803.v.0.3', - 'version.min_required': '2.0.0', - 'version.packaged': '2021.09.20', + 'version': '0.3.0-20230607', + 'version.min_required': '2.1.0b1', + 'version.packaged': '2.1.0p21', 'version.usable_until': None} \ No newline at end of file -- GitLab