From 3dc1e60cc18d4b06ca9499fa574c294f8ef0ac3a Mon Sep 17 00:00:00 2001 From: Thl CMK <thl-cmk@outlook.com> Date: Mon, 24 Feb 2020 21:48:33 +0100 Subject: [PATCH] update project --- checks/cisco_bgp_peer | 164 ++++++++++++++++++++++------------------ cisco_bgp_peer.mkp | Bin 9012 -> 9136 bytes packages/cisco_bgp_peer | 2 +- 3 files changed, 91 insertions(+), 75 deletions(-) diff --git a/checks/cisco_bgp_peer b/checks/cisco_bgp_peer index f4bc1b4..9fd01f2 100644 --- a/checks/cisco_bgp_peer +++ b/checks/cisco_bgp_peer @@ -18,6 +18,8 @@ # 29.05.2018: fixed longoutpout (removed not configured) # 02.11.2018: modified scanfunction (from "find 'cisco' =-1" to "'cisco' in OID" # 02.18.2019: added fix for empty values ("" instead of "0") sugested by Laurent Barbier (lbarbier[at]arkane-studios[dot]com) +# 24.02.2020: added workaround for missing cbgpPeer2AddrFamily (example L2VPN EVPN peers, Fix for jonale82[at]gmail[dot]com) +# # # @@ -208,8 +210,8 @@ def parse_cisco_bgp_peer(info): peer_ip = '' OID_END = OID_END.split('.') if int(OID_END[1]) == 4: # length of ip address - peer_ip = '.'.join(OID_END[2:6]) # ip v4 address - elif int(OID_END[1]) == 16: + peer_ip = '.'.join(OID_END[2:6]) # ipv4 address + elif int(OID_END[1]) == 16: # ipv6 address peer_ip = ':'.join('%02s' % hex(int(m))[2:] for m in OID_END[2:18]).replace(' ', '0').upper() peer_ip = bgp_shorten_ipv6_adress(peer_ip) @@ -261,81 +263,95 @@ def parse_cisco_bgp_peer(info): return names[int(byte1, 16)].get(int(byte2, 16)) + # bgp not active if info == [[], []]: return None - cbgpPeer2Table, cbgpPeer2AddrFamily = info + cbgpPeer2Entry, cbgpPeer2AddrFamily = info peer_prefixes = {} # create dictionary from cbgpPeer2AddrFamily ('remoteip addrfamilyname' as index) - for entry in cbgpPeer2AddrFamily: - oid_end, addrfamilyname, acceptedprefixes, deniedprefixes, prefixadminlimit, prefixthreshold, \ - prefixclearthreshold, advertisedprefixes, suppressedprefixes, withdrawnprefixes = entry + if len(cbgpPeer2AddrFamily) > 0 : + for entry in cbgpPeer2AddrFamily: + oid_end, addrfamilyname, acceptedprefixes, deniedprefixes, prefixadminlimit, prefixthreshold, \ + prefixclearthreshold, advertisedprefixes, suppressedprefixes, withdrawnprefixes = entry - remoteaddr = cisco_bgp_get_peer(oid_end) + remoteaddr = cisco_bgp_get_peer(oid_end) - # check if prefixadminlimit is set - if prefixadminlimit.isdigit(): - prefixadminlimit = int(prefixadminlimit) - else: - prefixadminlimit = 0 + # check if prefixadminlimit is set + if prefixadminlimit.isdigit(): + prefixadminlimit = int(prefixadminlimit) + else: + prefixadminlimit = 0 - # check if prefixthreshold is set - if prefixthreshold.isdigit(): - prefixthreshold = int(prefixthreshold) - else: - prefixthreshold = 0 + # check if prefixthreshold is set + if prefixthreshold.isdigit(): + prefixthreshold = int(prefixthreshold) + else: + prefixthreshold = 0 - # check if prefixclearthreshold is set - if prefixclearthreshold.isdigit(): - prefixclearthreshold = int(prefixclearthreshold) - else: - prefixclearthreshold = 0 + # check if prefixclearthreshold is set + if prefixclearthreshold.isdigit(): + prefixclearthreshold = int(prefixclearthreshold) + else: + prefixclearthreshold = 0 - if acceptedprefixes.isdigit(): - acceptedprefixes = int(acceptedprefixes) - else: - acceptedprefixes = 0 + if acceptedprefixes.isdigit(): + acceptedprefixes = int(acceptedprefixes) + else: + acceptedprefixes = 0 - if advertisedprefixes.isdigit(): - advertisedprefixes = int(advertisedprefixes) - else: - advertisedprefixes = 0 + if advertisedprefixes.isdigit(): + advertisedprefixes = int(advertisedprefixes) + else: + advertisedprefixes = 0 - # fix sugested by Laurent Barbier (lbarbier[at]arkane-studios[dot]com) - # some Cisco devices report not "0" if the value is 0, instead the report "". for example Nexus devices behave like this. - if deniedprefixes.isdigit(): - deniedprefixes = int(deniedprefixes) - else: - deniedprefixes = 0 + # fix sugested by Laurent Barbier (lbarbier[at]arkane-studios[dot]com) + # some Cisco devices report not "0" if the value is 0, instead the report "". for example Nexus devices behave like this. + if deniedprefixes.isdigit(): + deniedprefixes = int(deniedprefixes) + else: + deniedprefixes = 0 - if suppressedprefixes.isdigit(): - suppressedprefixes = int(suppressedprefixes) - else: - suppressedprefixes = 0 + if suppressedprefixes.isdigit(): + suppressedprefixes = int(suppressedprefixes) + else: + suppressedprefixes = 0 - if withdrawnprefixes.isdigit(): - withdrawnprefixes = int(withdrawnprefixes) - else: - withdrawnprefixes = 0 - - peer = {'remoteaddr': remoteaddr, - 'addrfamilyname': addrfamilyname, - 'acceptedprefixes': acceptedprefixes, - 'deniedprefixes': deniedprefixes, - 'prefixadminlimit': prefixadminlimit, - 'prefixthreshold': prefixthreshold, - 'prefixclearthreshold': prefixclearthreshold, - 'advertisedprefixes': advertisedprefixes, - 'suppressedprefixes': suppressedprefixes, - 'withdrawnprefixes': withdrawnprefixes, } - - peer_prefixes.update({'%s %s' % (remoteaddr, addrfamilyname): peer}) - - # create dictionary from cbgpPeer2Table (peer ip address as index) + if withdrawnprefixes.isdigit(): + withdrawnprefixes = int(withdrawnprefixes) + else: + withdrawnprefixes = 0 + + + peer = {'remoteaddr': remoteaddr, + 'addrfamilyname': addrfamilyname, + 'acceptedprefixes': acceptedprefixes, + 'deniedprefixes': deniedprefixes, + 'prefixadminlimit': prefixadminlimit, + 'prefixthreshold': prefixthreshold, + 'prefixclearthreshold': prefixclearthreshold, + 'advertisedprefixes': advertisedprefixes, + 'suppressedprefixes': suppressedprefixes, + 'withdrawnprefixes': withdrawnprefixes, } + + peer_prefixes.update({'%s %s' % (remoteaddr, addrfamilyname): peer}) + + # workaround: get remote ip from cbgpPeer2Entry if cbgpPeer2AddrFamilyName is missing :-( + elif len(cbgpPeer2Entry) > 0: + for entry in cbgpPeer2Entry: + remoteaddr = cisco_bgp_get_peer(entry[0]) + addrfamilyname = '' + + peer = {'remoteaddr': remoteaddr, + } + + peer_prefixes.update({'%s %s' % (remoteaddr, addrfamilyname): peer}) + + # create dictionary from cbgpPeer2Entry (peer ip address as index) peer_table = {} - for entry in cbgpPeer2Table: + for entry in cbgpPeer2Entry: oid_end, state, adminstatus, localaddr, localas, localidentifier, remoteas, remoteidentifier, inupdates, \ outupdates, intotalmessages, outtotalmessages, lasterror, fsmestablishedtransitions, fsmestablishedtime, \ inupdateelapsedtime, lasterrortxt, prevstate = entry @@ -494,10 +510,10 @@ def check_cisco_bgp_peer(item, params, parsed): ['Last error', peer.get('lasterror'), ''], ['Last error text', peer.get('lasterrortxt'), ''], ['Previous state', cisco_bgp_peerstate(peer.get('prevstate')), ''], - ['Address family name', prefixes.get('addrfamilyname'), ''], + ['Address family name', prefixes.get('addrfamilyname', 'unknown'), ''], ['Prefix admin limit (prefixes)', '%.0d' % prefixadminlimit, ''], ['Prefix threshold (prefixes/%)', '%.0d' % warnthreshold, '%.0d' % prefixthreshold], - ['Prefix clear threshold (%)', '%.0d' % prefixes.get('prefixclearthreshold'), ''] + ['Prefix clear threshold (%)', '%.0d' % prefixes.get('prefixclearthreshold', 0), ''] ] if params.get('htmloutput', False): @@ -512,8 +528,7 @@ def check_cisco_bgp_peer(item, params, parsed): longoutput = '\n' + table_bracket % (''.join([line_bracket % cell_seperator.join([cell_bracket % (entry[0], entry[1], entry[2])]) for entry in longoutput_data])) else: longoutput += '\nfor nicer output' \ - '\ndisable \'Escape HTML codes in plugin output\' in wato --> global settings and' \ - '\nenable HTML output in \'Parameters for this service\'' + '\ndisable \'Escape HTML codes in plugin output\' in wato --> global settings and enable HTML output in \'Parameters for this service\'' for entry in longoutput_data: if not entry[2] == '': longoutput += '\n{}: {} / {}'.format(entry[0], entry[1], entry[2]) @@ -537,16 +552,16 @@ def check_cisco_bgp_peer(item, params, parsed): now_time = time.time() rate_item = item.replace(' ', '_') - deniedprefixes = get_rate('cisco_bgp_peer.%s.%s' % ('deniedprefixes', rate_item), now_time, prefixes.get('deniedprefixes'), onwrap=SKIP) - advertisedprefixes = get_rate('cisco_bgp_peer.%s.%s' % ('advertisedprefixes', rate_item), now_time, prefixes.get('advertisedprefixes'), onwrap=SKIP) - withdrawnprefixes = get_rate('cisco_bgp_peer.%s.%s' % ('withdrawnprefixes', rate_item), now_time, prefixes.get('withdrawnprefixes'), onwrap=SKIP) - suppressedprefixes = get_rate('cisco_bgp_peer.%s.%s' % ('suppressedprefixes', rate_item), now_time, prefixes.get('suppressedprefixes'), onwrap=SKIP) + deniedprefixes = get_rate('cisco_bgp_peer.%s.%s' % ('deniedprefixes', rate_item), now_time, prefixes.get('deniedprefixes', 0), onwrap=SKIP) + advertisedprefixes = get_rate('cisco_bgp_peer.%s.%s' % ('advertisedprefixes', rate_item), now_time, prefixes.get('advertisedprefixes', 0), onwrap=SKIP) + withdrawnprefixes = get_rate('cisco_bgp_peer.%s.%s' % ('withdrawnprefixes', rate_item), now_time, prefixes.get('withdrawnprefixes', 0), onwrap=SKIP) + suppressedprefixes = get_rate('cisco_bgp_peer.%s.%s' % ('suppressedprefixes', rate_item), now_time, prefixes.get('suppressedprefixes', 0), onwrap=SKIP) - inupdates = get_rate('cisco_bgp_peer.%s.%s' % ('inupdates', rate_item), now_time, peer.get('inupdates'), onwrap=SKIP) - outupdates = get_rate('cisco_bgp_peer.%s.%s' % ('outupdates', rate_item), now_time, peer.get('outupdates'), onwrap=SKIP) + inupdates = get_rate('cisco_bgp_peer.%s.%s' % ('inupdates', rate_item), now_time, peer.get('inupdates', 0), onwrap=SKIP) + outupdates = get_rate('cisco_bgp_peer.%s.%s' % ('outupdates', rate_item), now_time, peer.get('outupdates', 0), onwrap=SKIP) - intotalmessages = get_rate('cisco_bgp_peer.%s.%s' % ('intotalmessages', rate_item), now_time, peer.get('intotalmessages'), onwrap=SKIP) - outtotalmessages = get_rate('cisco_bgp_peer.%s.%s' % ('outtotalmessages', rate_item), now_time, peer.get('outtotalmessages'), onwrap=SKIP) + intotalmessages = get_rate('cisco_bgp_peer.%s.%s' % ('intotalmessages', rate_item), now_time, peer.get('intotalmessages', 0), onwrap=SKIP) + outtotalmessages = get_rate('cisco_bgp_peer.%s.%s' % ('outtotalmessages', rate_item), now_time, peer.get('outtotalmessages', 0), onwrap=SKIP) # prefixes # 'unit', <value>, <warn-at>, <crit-at>, <min value>, <max value> @@ -593,7 +608,7 @@ check_info['cisco_bgp_peer'] = { 'parse_function' : parse_cisco_bgp_peer, 'snmp_scan_function' : lambda oid: 'cisco'in oid('.1.3.6.1.2.1.1.1.0').lower(), 'snmp_info' : [ - ('.1.3.6.1.4.1.9.9.187.1.2.5.1', # cbgpPeer2Table + ('.1.3.6.1.4.1.9.9.187.1.2.5.1', # CISCO-BGP4-MIB::cbgpPeer2Entry [OID_END, '3', # cbgpPeer2State '4', # cbgpPeer2AdminStatus @@ -627,5 +642,6 @@ check_info['cisco_bgp_peer'] = { '8.1.7', # cbgpPeer2SuppressedPrefixes '8.1.8', # cbgpPeer2WithdrawnPrefixes ]), - ] + ] + } diff --git a/cisco_bgp_peer.mkp b/cisco_bgp_peer.mkp index 7becccbd2f5418e3799b70d0a01a7e0583974830..92521c7a27cd8c8bfcb2839d5c687204a62670e6 100644 GIT binary patch literal 9136 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 literal 9012 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 EADeloMF0Q* diff --git a/packages/cisco_bgp_peer b/packages/cisco_bgp_peer index b52887b..12fb6a2 100644 --- a/packages/cisco_bgp_peer +++ b/packages/cisco_bgp_peer @@ -7,6 +7,6 @@ 'name': 'cisco_bgp_peer', 'num_files': 3, 'title': u'Cisco BGP Peer', - 'version': '20190218.v.0.2b', + 'version': '20200224.v.0.2c', 'version.min_required': '1.2.8b8', 'version.packaged': '1.4.0p35'} \ No newline at end of file -- GitLab