From 410fea15c3de63087fbe6dcb6f8bf2fd2ae0ce09 Mon Sep 17 00:00:00 2001
From: Thl CMK <thl-cmk@outlook.com>
Date: Thu, 4 Jun 2020 19:33:11 +0200
Subject: [PATCH] update project

---
 checks/cisco_bgp_peer              | 175 +++++++++++++----------------
 cisco_bgp_peer.mkp                 | Bin 9133 -> 9081 bytes
 packages/cisco_bgp_peer            |   2 +-
 web/plugins/wato/cisco_bgp_peer.py |  14 +--
 4 files changed, 88 insertions(+), 103 deletions(-)

diff --git a/checks/cisco_bgp_peer b/checks/cisco_bgp_peer
index 64a2a7a..afad587 100644
--- a/checks/cisco_bgp_peer
+++ b/checks/cisco_bgp_peer
@@ -3,7 +3,7 @@
 #
 # Cisco BGP Peer
 #
-# Author: Th.L.
+# Author: thl-cmk[at]outlook[dot]com / thl-cmk.hopto.org
 # Date  : 2017-12-26
 #
 # Monitor status of Cisco BGP Peer (IPv4 and IPv6)
@@ -20,6 +20,7 @@
 # 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)
 # 02.03.2020: changed handling of perfdata, add only data the are really there (not None, instead of setting them to 0)
+# 04.06.2020: code cleanup --> changed isdigit test to try/except loop, changed peer.get test to try/except loop
 #
 
 #
@@ -277,33 +278,25 @@ def parse_cisco_bgp_peer(info):
             prefixclearthreshold, advertisedprefixes, suppressedprefixes, withdrawnprefixes = entry
 
             remoteaddr = cisco_bgp_get_peer(entry[0])
-            peer = {'remoteaddr': remoteaddr}
-
-            peer.update({'addrfamilyname': addrfamilyname})
-
-            if prefixadminlimit.isdigit():
-                peer.update({'prefixadminlimit':int(prefixadminlimit)})
-
-            if prefixthreshold.isdigit():
-                peer.update({'prefixthreshold':int(prefixthreshold)})
-
-            if prefixclearthreshold.isdigit():
-                peer.update({'prefixclearthreshold':int(prefixclearthreshold)})
-
-            if acceptedprefixes.isdigit():
-                peer.update({'acceptedprefixes':int(acceptedprefixes)})
-
-            if advertisedprefixes.isdigit():
-                peer.update({'advertisedprefixes':int(advertisedprefixes)})
-
-            if deniedprefixes.isdigit():
-                peer.update({'deniedprefixes':int(deniedprefixes)})
-
-            if suppressedprefixes.isdigit():
-                peer.update({'suppressedprefixes':int(suppressedprefixes)})
-
-            if withdrawnprefixes.isdigit():
-                peer.update({'withdrawnprefixes':int(withdrawnprefixes)})
+            peer = {
+                'remoteaddr': remoteaddr,
+                'addrfamilyname': addrfamilyname
+            }
+
+            for key, value in [
+                ('prefixadminlimit', prefixadminlimit),
+                ('prefixthreshold', prefixthreshold),
+                ('prefixclearthreshold', prefixclearthreshold),
+                ('acceptedprefixes', acceptedprefixes),
+                ('advertisedprefixes', advertisedprefixes),
+                ('deniedprefixes', deniedprefixes),
+                ('suppressedprefixes', suppressedprefixes),
+                ('withdrawnprefixes', withdrawnprefixes),
+            ]:
+                try:
+                    peer[key] = int(value)
+                except ValueError:
+                    pass
 
             peer_prefixes.update({'%s %s' % (remoteaddr, addrfamilyname): peer})
 
@@ -313,8 +306,7 @@ def parse_cisco_bgp_peer(info):
             remoteaddr = cisco_bgp_get_peer(entry[0])
             addrfamilyname = ''
 
-            peer = {'remoteaddr': remoteaddr,
-                    }
+            peer = {'remoteaddr': remoteaddr,}
 
             peer_prefixes.update({'%s %s' % (remoteaddr, addrfamilyname): peer})
 
@@ -335,26 +327,22 @@ def parse_cisco_bgp_peer(info):
                 'prevstate': int(prevstate),
                 }
 
-        if state.isdigit():
-            peer.update({'state': int(state)})
-        if adminstatus.isdigit():
-            peer.update({'adminstate': int(adminstatus)})
-        if localas.isdigit():
-            peer.update({'localas': int(localas)})
-        if remoteas.isdigit():
-            peer.update({'remoteas': int(remoteas)})
-        if inupdates.isdigit():
-            peer.update({'inupdates':int(inupdates)})
-        if outupdates.isdigit():
-            peer.update({'outupdates': int(outupdates)})
-        if intotalmessages.isdigit():
-            peer.update({'intotalmessages': int(intotalmessages)})
-        if outtotalmessages.isdigit():
-            peer.update({'outtotalmessages': int(outtotalmessages)})
-        if fsmestablishedtransitions.isdigit():
-            peer.update({'fsmestablishedtransitions': int(fsmestablishedtransitions)})
-        if inupdates.isdigit():
-            peer.update({'fsmestablishedtime': int(fsmestablishedtime)})
+        for key, value in [
+            ('state', state),
+            ('adminstate', adminstatus),
+            ('localas', localas),
+            ('remoteas', remoteas),
+            ('inupdates', inupdates),
+            ('outupdates', outupdates),
+            ('intotalmessages', intotalmessages),
+            ('outtotalmessages', outtotalmessages),
+            ('fsmestablishedtransitions', fsmestablishedtransitions),
+            ('fsmestablishedtime', fsmestablishedtime),
+        ]:
+            try:
+                peer[key] = int(value)
+            except ValueError:
+                pass
 
         peer_table.update({'%s' % cisco_bgp_get_peer(oid_end): peer})
 
@@ -437,20 +425,23 @@ def check_cisco_bgp_peer(item, params, parsed):
         if peer.get('localas') == 0:
             peer.update({'localas': params.get('useaslocalas')})
 
-        infotext_values = params.get('infotext_values')
+        infotext_values = params.get('infotext_values', [])
 
         if alias != '':
             infotext += ', Alias: %s' % alias
-        if 'remoteid' in infotext_values:
-            infotext += ', Remote ID: %s' % peer.get('remoteid')
-        if 'remoteas' in infotext_values:
-            infotext += ', Remote AS: %s' % peer.get('remoteas')
-        if 'localaddr' in infotext_values:
-            infotext += ', Local address: %s' % peer.get('localaddr')
-        if 'localid' in infotext_values:
-            infotext += ', Local ID: %s' % peer.get('localid')
-        if 'localas' in infotext_values:
-            infotext += ', Local AS: %s' % peer.get('localas')
+
+        for key, value in [
+            ('remoteid', ', Remote ID: %s'),
+            ('remoteas', ', Remote AS: %s'),
+            ('localaddr', ', Local address: %s'),
+            ('localid', ', Local ID: %s'),
+            ('localas', ', Local AS: %s'),
+        ]:
+            try:
+                if key not in infotext_values:
+                    infotext += value % peer[key]
+            except KeyError:
+                pass
 
         peerstate = peer.get('state')
         adminstate = peer.get('adminstate')
@@ -520,7 +511,7 @@ def check_cisco_bgp_peer(item, params, parsed):
                 else:
                     longoutput += '\n{}: {}'.format(entry[0], entry[1])
 
-        if prefixadminlimit is not None and acceptedprefixes is not None and prefixadminlimit is not None and warnthreshold is not None:
+        if prefixadminlimit is not None and acceptedprefixes is not None and warnthreshold is not None:
             if acceptedprefixes >= prefixadminlimit:
                 yield 2, 'Prefix admin limit reached (%d/%d)' % (acceptedprefixes, prefixadminlimit)
             elif prefixthreshold > 0:
@@ -533,39 +524,33 @@ def check_cisco_bgp_peer(item, params, parsed):
             perfdata.append(('acceptedprefixes', acceptedprefixes))
 
         now_time = time.time()
-        rate_item = item.replace(' ', '_')
-
-        if prefixes.get('deniedprefixes', None) is not None:
-            deniedprefixes = get_rate('cisco_bgp_peer.%s.%s' % ('deniedprefixes', rate_item), now_time, prefixes.get('deniedprefixes', 0), onwrap=SKIP)
-            perfdata.append(('deniedprefixes', deniedprefixes))
-        if prefixes.get('advertisedprefixes', None) is not None:
-            advertisedprefixes = get_rate('cisco_bgp_peer.%s.%s' % ('advertisedprefixes', rate_item), now_time, prefixes.get('advertisedprefixes', 0), onwrap=SKIP)
-            perfdata.append(('advertisedprefixes', advertisedprefixes))
-        if prefixes.get('withdrawnprefixes', None) is not None:
-            withdrawnprefixes = get_rate('cisco_bgp_peer.%s.%s' % ('withdrawnprefixes', rate_item), now_time, prefixes.get('withdrawnprefixes', 0), onwrap=SKIP)
-            perfdata.append(('withdrawnprefixes', withdrawnprefixes))
-        if prefixes.get('suppressedprefixes', None) is not None:
-            suppressedprefixes = get_rate('cisco_bgp_peer.%s.%s' % ('suppressedprefixes', rate_item), now_time, prefixes.get('suppressedprefixes', 0), onwrap=SKIP)
-            perfdata.append(('suppressedprefixes', suppressedprefixes))
-
-        if peer.get('inupdates', None) is not None:
-            inupdates = get_rate('cisco_bgp_peer.%s.%s' % ('inupdates', rate_item), now_time, peer.get('inupdates', 0), onwrap=SKIP)
-            perfdata.append(('inupdates', inupdates))
-        if peer.get('outupdates', None) is not None:
-            outupdates = get_rate('cisco_bgp_peer.%s.%s' % ('outupdates', rate_item), now_time, peer.get('outupdates', 0), onwrap=SKIP)
-            perfdata.append(('outupdates', outupdates))
-        if peer.get('intotalmessages', None) is not None:
-            intotalmessages = get_rate('cisco_bgp_peer.%s.%s' % ('intotalmessages', rate_item), now_time, peer.get('intotalmessages', 0), onwrap=SKIP)
-            perfdata.append(('intotalmessages', intotalmessages))
-        if peer.get('outtotalmessages', None) is not None:
-            outtotalmessages = get_rate('cisco_bgp_peer.%s.%s' % ('outtotalmessages', rate_item), now_time, peer.get('outtotalmessages', 0), onwrap=SKIP)
-            perfdata.append(('outtotalmessages', outtotalmessages))
-        if peer.get('fsmestablishedtransitions', None) is not None:
-            perfdata.append(('fsmestablishedtransitions', peer.get('fsmestablishedtransitions')))
-        if peer.get('fsmestablishedtime', None) is not None:
-            perfdata.append(('fsmestablishedtime', peer.get('fsmestablishedtime')))
-        if peer.get('inupdateelapsedtime', None) is not None:
-            perfdata.append(('inupdateelapsedtime', peer.get('inupdateelapsedtime')))
+        rate_item = item.replace(' ', '_').replace(':','_')
+
+        for key in [
+            'deniedprefixes',
+            'advertisedprefixes',
+            'withdrawnprefixes',
+            'suppressedprefixes',
+            'inupdates',
+            'outupdates',
+            'intotalmessages',
+            'outtotalmessages',
+        ]:
+            try:
+                value = get_rate('cisco_bgp_peer.%s.%s' % (key, rate_item), now_time, prefixes[key], onwrap=SKIP)
+                perfdata.append((key, value))
+            except KeyError:
+                pass
+
+        for key in [
+            'fsmestablishedtransitions',
+            'fsmestablishedtime',
+            'inupdateelapsedtime'
+        ]:
+            try:
+                perfdata.append((key, peer[key]))
+            except KeyError:
+                pass
 
         if infotext[0:2] == ', ':
             infotext = infotext[2:]
diff --git a/cisco_bgp_peer.mkp b/cisco_bgp_peer.mkp
index f38a5837880c0e0eabf8b68b55b52d9765e19a5e..3eaaaaf107a4babd445587b9626d80b715129f7a 100644
GIT binary patch
literal 9081
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
F{0E55vd91c

literal 9133
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

diff --git a/packages/cisco_bgp_peer b/packages/cisco_bgp_peer
index 43fb940..e8b8f66 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': '20200302.v.0.2d',
+ 'version': '20200604.v.0.2c',
  'version.min_required': '1.2.8b8',
  'version.packaged': '1.4.0p38'}
\ No newline at end of file
diff --git a/web/plugins/wato/cisco_bgp_peer.py b/web/plugins/wato/cisco_bgp_peer.py
index a4257f7..19a18b4 100644
--- a/web/plugins/wato/cisco_bgp_peer.py
+++ b/web/plugins/wato/cisco_bgp_peer.py
@@ -4,7 +4,7 @@
 #
 # Check_MK cisco_bgp_peers WATO plugin
 #
-# Author: Th.L.
+# Author: thl-cmk[at]outlook[dot]com / thl-cmk.hopto.org
 # Date: 2017-12-25
 #
 #
@@ -12,7 +12,7 @@
 #
 
 
-infotext_values = [
+cisco_bgp_peer_infotext_values = [
     ('remoteid', 'Remote router ID'),
     ('remoteas', 'Remote autonomous system'),
     ('localaddr', 'Local peer IP address'),
@@ -56,10 +56,10 @@ register_check_parameters(
              )),
             ('infotext_values',
              ListChoice(
-                 title=_('Infotext values'),
-                 label=_('Infotext values'),
-                 help=_('Values to show in Infotext'),
-                 choices=infotext_values,
+                 title=_('Remove values from Infotext'),
+                 label=_('Remove values from infotext'),
+                 help=_('Select values to remove from check output.'),
+                 choices=cisco_bgp_peer_infotext_values,
                  default_value=[],
              )),
             ('peer_list',
@@ -68,7 +68,7 @@ register_check_parameters(
                      title=('BGP Peers'),
                      elements=[
                          TextUnicode(
-                             title=_('BGP Peer item name'),
+                             title=_('BGP Peer item name (without "Cisco BGP peer")'),
                              help=_('The configured value must match a BGP item reported by the monitored '
                                     'device. For example: "10.194.115.98 IPv4 Unicast"'),
                              allow_empty=False,
-- 
GitLab