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 zcma*pV?!N)0)XLcdvV!1*|zIsENj_VwQAY!WZPP9naeuaSUTBt??1Tr+xr9F4-Z8Q z64D%ru?ftlg`K;F^EY!Fmv1gsR&J~S4gd!S7YBgNi;aT~V9DnA-397G#Lj)aJ^A_k zTd*syj2+cDji=tSs9GAmtF;k(1hcF47W4X9k<8ehG*v6j;l5Q*UqBZ$1PYnFDR(@Z z)toL}x(Jh-IBsOgWdrnhPC`#MZ_8ntpV*W?;!+^S^+N5w!W|B|0y&+$)P2OB%zXT6 z!H}G!KTtpcv2A>#30SJ}<bV9(D7m~g-u>7nXR!NYE|;w@$6&YPHwIze<Kg1Nz-{Gk zhwr(pMPTmCmuV&sVZ#2lZQnXvzd&&lf&N8mu}?SUc*d~pT3xw(lYo<fP>ILQxtR-c z0r!~=Hqgr=ik-M{M)J>>mFd)E&@ryP%CRMUfl#{RD>u^El!0K3kfed!=nAZP2X8QY zF)x+A28C&QI_jS`e1jp^@|ac?dNf#l*dV1fO6L6O9K)~HD&-#dnq5*XuURjJxI5n2 zofv@#XG<uIn%Np1t^*wxhJ0**AGMED$l_oK&aH3Y*s8IgDD7@eXU*3y>A@l+V<08H ztZCLq6fAy9<7Chkt3Wn3@MOI2n>EC0uBPUc@GKf<#XvJ&HM{7JovmJn*jy>l<g59` z)TXuP@n$>fOcVR^2Mm*1cEm1I=J|P~;MLzA?UQ@q&*-JQDg9Zfrhug~cft3NZ)(kv zGn5v|EhK*9ZnXqw%%kXDPBpXZNfLh5LMkxP!PEt`=m9pw3_H_TN$e~<Zuw?mJqGOT zRBf+MUp)rkt^ToA(@&yDW4Z7wD{n5|_c}e)`Kxbxy?8pGwiAlJU$yRQk=zoCH1qY6 zD)~ysMLve+_5Mp}eGPhixcd2i^^Wax>D}@fI>%t~i5}3fzWOOP{Nda@(uD5#gCvXX zN1js#-{u7dxXz(`{WvjZ9W7jQx&gg5)1jJ}&~l3)4)xSjXjJZti_f4x>kr*cJF`G* zc#bXyIEeNdjd{Fe${2t2)Ff|KMhTY2*)jZ1ZIF;}LIM{;c#^80=G2@=Nl;w;-3RzH zduZJj(_zQE=`(!1*XF#B^PKPDQ>`*cp`*|Douq5Fv3aJDQo2<r<k|%I`ECrmMe_b} zd7@VLd1wqpP|E*p>9x<+?_+RU5aP{7=56DNXk68GpW_j9j`L4dWZkv?k28kN=5<i= zlJSab|5${vGcT$wKPBu``#mYt!DY0Fpy~VVuZFEJfqmhD(TT{Mh5x$3!8~#-*(cXX zK*{#-K!^1Hw2OM8MC8r02E@#fl+{?Zo>mfbU1WmwRb-A8j&ZA`FhVLX20YpY_|}bk zl$#P<FF5Xlcky3o_lT~z5*u#*;{}QSykB*zEhfJPiwbTJKYN^pEt;`NZ+~+W9&<q? z-+D?Ui>hPEe<3>=t}kp8{)|^h0Q&+AyR<xb*BJ6QyYWIR4@W@!Rz>%*CVhPW3Uw{+ z9(Kemy4R)X9W#2Kv3*f4VX{>N66;9}cD}d?P^P)&p}eG#QL=35vXe5OaL^VEfv{Jk z`b;m@^rFAuJ@C@3ESsz7_gvBv%~3WMI&CsTo^>DzE$V_R5G+?HKCWYX^gvnyB4PGH zte;Bimmq3IQo{COMKp3wq*(7)V(=C5I$TUUnTV^=&F;y4+aG?}SpOtlSTt8ehYpl0 zxS5jH9&~XDc~+7$8^dj<&}1VGAM=z+p_^qGg3ZJ?hvy88e{XxqK~gr$H+_0+7YMs+ zUfo|G>}0q&{7<xH7oCO2&Wm^24G-a<xy=CZp2H)S<Ue70cPCbgelNSV797+*uV4GS zMFusn6%cPl0^W8zmP6uI4)*Nr1Y)>d3u+$WuPaP;2Ti_803}_R=0KMBXls}>AZO&b z;GcmZy#}a02x7Z(sLW>~+)1his-~8bLkPa<deDMxf!0tk-W{Ed1mEQUO#I2irg|Mq zi7Hx+a5~v;Jg3;|5j~`P|8djzDS?x^iJ75Jn6L1-mXmy$`liCLs7B+GeijCQ4_qaO za+a~^Kc=qWhBc9bCEe2sJx@`ir%2fPgpq=>z7*}6UPKwV@Ox5*?IrP7|6(!pQ1bNh zE=To?0Pyc#<wwzDIJHmJV9>kBL(*FWls=$XWgKm4t05xcQ8|2(6a(CcR;dBc3M{K( z>xuS=vctMcTVs;(LlGf<i2bD06*b0I(4Hva0DdP-y*YUw-(`=Wptl6Vi!ns-RqsR` zLPD9Il5jqB{nq2`tAgZB62>k`=Ec5huX?4e1~&e=d@#eZzeJC9#gBIt!015<RAWtA zg7${{83WX+POUG@Xtp@N)Gp$f(1;ziD8`A<*RG0dSyr#UV7{Dbbkkl=;j9?YVBIjI zMG4T0vIOd<_t?{PrCo@xTz@J`?<+bnX`E|U<cJah*YLIKIh4~b#<(XqiT3UBj*3Ai zVtG;h#h?m~rgwX^VmXTnj@rRSeY-Q2RwpNCU6{+XX0ajFFA*h6WKR|Ee}(%?5V!xZ zR$gxN-MI0dzf#0@g@1#XZt(mFS8*-BsPGlPqlAX{D@DzIIYR%aKa2iEFJ3!bO$DjE zTwV`0uDAes>xv?TI5F8|gDMiHh}otGk%^96>cc;8r3V1^PqNv`iuad;#7+y;vkCU? zzyxvUMHe!;1S$@IeY<%AC;Lm}Nhq<&8a0a9GGvE*gLEX6c>3o@q)BD`{-f#nea?XM z_>a$ZfY?*nlvvS9-F|4G)Iq{&IHJF&(Td9TD3=Q2!@O(m*Sp%;j<N%4bX&dA!+?gC z=nb>sjT278?fR^3Kb%LOx5Z1&{HGsdG^WOeg4RJ4l7)GMynzsIYkQ9P%IL8jSLu;K zCYV7voC=oylScC@s)pCNGv7DcH%!Nc;xZLJ$4<M2&tAtYcH1Ux=Z9B3!s1m5w+S!& zD@lo$9sF1c*S{jQQZ3jYoYym5&4zxyUj70hY7ao0`gv;A4^z{-YbA0*|Cudx7k94p z%mQ?9XtQAe)F;sdrxX_{$>~hT?*?Qie40D2VP3_-K}sh~wf2lM6w9L-r;8qvr(#&_ z;!Iy&>6u<LB(!OCi)A9(bCRykouFS<kxKlR3E-IBOE&+Co4-uavlMu#yAfjLP+eUl z1YhSha#jAsXVUGRzcu79sdt!)ng7k-BwlDXL>2S=Fyss0Q<@XwVjCXm9D~y9N6Tf* zF(cL&;J}bO+ERx?G9ZyJQvJU97uDkF6@0<1JqwQgWX26I)I}=R<B`qrFC#)*Cc3n? zGAm14BRcWNZq@WPC16W6XAULfv{qw(A6*VfQu<V4NidmzigCe6<@d#hB%fMcTr12j zJJaf6NI0d^m6t=z&9w*rCFmw-%92!CVp}zb-0-V_v_;<pj(cX7m#4D!;u}#L@9D<K zA37RNrwrH!#DyZZ&X|P;i-Vo6MfQmA?uvu!Zkt8c1PgQ;AZ5z~1B3i?`@Zc)J5IHp zNSNDtF+ZaT=XB~(dmT~Ku%nt~h>Lrm&<QZFez)a`8Sfd2no#7BCR$8lR!}$x5AvzW z+k8hoh<Lq)@uNg-3k!2rYtwV(#O;MtewXUVUAo_qJSTH7-U`Db1^_V*;(5_txQ$-f zz?Y7X9}v>to}KSht90y<$LqCL*;nv`j^B|XzJ_%8QzBv|Z1cp>tg?!U%5zb?9G7z2 ze*N~lzgQiMTKARvC)_9_Dt`(taZeZcc>Gf)y-AkHapxtoTo}EuWbKh6;GSN)Y;d@^ zC2}-kvU<Q<VI)`0sQ4{<0e?1`UjLr)v2=2GRmk&Xi<zwK2!E?CAN5Q#(^qkIP3reg zj5RQb%ll9HpokL{z2%bSM-Ipb@euooz5~|{ncWrH1de!-3wBsinNERoP2ee0O~p^9 z5Lp$4t9fQYVMTbRD!V|dq`BBFR|Tb6L}5{f541OZ>KMc9{JNNvQ_a(k82UGir<66$ z#eey-R+rgUscNlS^QQK%qOJ*Vh05aaqEO9kFpH%`xvbQ-qP=1qm}p5{q)I$j8zvYo zm6kxlyt&SH>|!~hc!e<H>RUO=r;#|qjR2`?;uRx-IAfxx#y8c@&HTtWBbfE>1xq3Y z<HSs&vyhy$jUUnyJB3dKUxrL3zDni_I1wrQTjVEP`w9PZq8sJ7eH~w2j*0$4QElwu z*LxHeC<VI!hNgl~z_g4RrL%w;#u_NY0q`N_RZ`(rk_LTGM^+kX*BMM@#OF~>qTc2o zMoqKU+<tru@j{N5AKQ|W(32@UpB9r}wAi|-JK?o)hD<VPBmJ=RSdBnFnO_YfFX10` ze6fw}-I`2L^*mBM#VzXj6vq$?e1m9AT66BPT#2(R<7-po)6pIH9ColBu7kIw5^hhY zbEgAlJU?VEU@An#-yOixJ9N$<RRT+LOF;fcZFKv1`arDG_3jfS06G!6UaV^m3BGmQ z`R$Fyx6j1nhHD-EP_}F}Dk)SA|8S_8R?a6GUJdGr_E7ouI+$#}h2Vrz(r!TV4<*#z zF5!?^tDZ=AW6tmzJI+F+#$E(dt&$5~;5~ttO45TxQlKcp=Y4~8#Z?V_-p#Kf(q9Fm z8E07b#3KL9lLEa01n=uIFB7*<&F9|t{P>(g3Z!SRhQOidf7B0<ot+7mwZ$<SMbZ=m z8Bu?iSV1wIQWMG&Vk{ny7JrN1(!FVk;TBCw;4tl<@4oNWmY8-$d43%X$}xI-*=@&p zC+7{9Z%%GX#UGem_+=YuBRWPBLGUj&sq$Toa1@cgZyDGiQDa(>b^s^qD=H9s{CLUr zaN$989JJr=Lw<@Yv~W9}HBH9Hrbq6CH#qK&A0u>Q*Nbr-=~d~pjnlg*A-XqrEU6V? z@HckIhEIS5STrnPJ+!D$_)%7KCHI2(gIPLZ?G-wqFHtuH*NMfXagaM~DdhsW<EcT5 zpeKpbKL7EL$ak3;<p<?E>6ylQD=BQEQ>mmjb4077LT?w8;_pOe`Nt#aK7tX&nTkS; zLK6!zuRjp{nJ<s_2lrhOpNvRN=-UPlte(C1+H?Q4Bok2ll**?Scq+q29aZM-ada*f zc7~7VeU3V@q(Y})G$aajGD-U86)rN`TTr(-o_IABv0Dryi@2Mz{gxe;)#8$_N+g1O zytBVk;v11O9*FH97lHQ<%sZ$F2oV(co-Z7Oxlt}XJ<*YNeW{VBN9<D%Is1b2MCY4< zUahY5r&R%E<z0tOs6CJu=zdn6UfH1_oBnuFd!ES8+?j{FI*tFL{d`@e%#2#8(jZ`& z--c>860)6YiI!PLB*sF=p!-+`v^wFodyb0^)CoOXn3i<w1eYsj30Q6Yw8zky{VSrY zk#1-cPz4|@XAslUnB<#%!Mkn9vH$3ZcAG|9q|bpp^l(pbx1?3d-|@%B5>;7JM3Y%g zZ1ZhMdTq~E%(cqJYET>)+u_i^q<uO<U}zi&?;CC2P{pG7mFr<>I4>L>8|I0vEdn<w z;0t5Og!*%a*}>9*+4xs^T}l;(;W?Mt5Bh~KAo48EAw<DOc6FtBSHh|IDC%Y<VU}1| zSixWHTn&<uS94PI<foogVEDP;cS1%(;=6FCmqZ&MPmC?l>@5UJqL45|2;i0`5Belg zA1a|SQx)oxfj`k{r(iK;gPFjHp7P7J1mQAMq{(RHpy8#M(QWfhN1bsk7fLSPyu)#t ze2f)x;y;BMemTnaP_x;lo0;RdD$3=v`He=r5~?WV{HM}r`Y?6q2*pKOpu~e-g@^Wm z`>5w2q}e3%Q>P)#zG_w1w2q27_mo%@j{nBru9I_#`yXX2G*t~F+Lw(Y&!xfanh#3N zYvxc6`_y|5*$()L6B`7Zjm$I3xaQkDwhvH$mR_izZOU87`hi6JxAEk~LjxEbZh+dY zj1N>P3s5r$U=T*vKt3nwBGChR-}j(&&Rx3O2|IwIeK+XL7-nl5dYKTZA+pa`4Dg~4 zdwwHf@u%qdynwuqM<jf{wZ&|?a%Y_n@EM~2mPz9`_uR;HU?j_oKNp2`Cl5Y^0q7;Y z{CCU}Ywv|}0E6dbcanJ~b@hQFKkgr$nY9QO=zk}DEt$kn95Fy3!%@<0jUD%PY<ZH) zW<{M_$IlIi-X2ACLpxb?zpxBLQs4g-a$&?S(uE&}Kziyx_7CT6ke!jCNy^0;iMxj= zaEo#hE)awW4~1siE_JlEhB<%XqZ+tIPxp;CWuFPWoC|E-p`OO25}zj>lO}R1fc_~F zhd)c$X{WX)HuZhP?I#0`lm&I@`<(h-BBu|cg^T{PV4~0w))PDjNX8PKUwTaZZ)$*? z$tte~N5rZS&8WEo^pelKJRY-S)WX-CM1{acR2!R6brCzKChv5LCS<dvZo2GIyvyD; zuV;Ydnar&01HTHs1xvh!z&HMdbIGNOC&@fAe~B2Myc+?NrSCahN4V8hzxgH3Yb!|F z|LN}*`plG-y_YhfvYD0mQC=juRht?8PG(e~69hLkMOj<Bx`gPNTJ3fxhq)o_`t8D_ zo_b=(8NC=@uVOMg63^s#uR3GnvY<w^<$`%-1zS1M%4-i<iCFyBJ^~T^t-mFj@|0y# z2p<c~2!q#>t#51-w@|VBPbx9u<VFVG)sHL9@*~~pF4!ZfvTFyY-o(3)G4h&4yiY^Q z;Zq%^C+~vn(BPpu%&aCx`@53~O5}1b+PIs{FbF1b;}BO>;d-{lDF5cPl&ZV+0kRRf z!X}(pQ=j)0A))5FIzUGDM_2km=%eh&C|rF*C?!Cq4DDZamf_bVHAk|Zco%w@7}qxZ z5^)4f8c#@NB;JHJRoWDSgW?&h<VY9T?G9%MB?L2(ioP7j{FjDy!%naV5GNL2%ZWb; zSsrkc<mH!bu$ZC<)-1jOva=;f&_E5Z(r)9x=LVb~yHI1@d7zB0o=2u>ri(CDS0%*t zSv^!Lv^<p+<GF*M|2Z`NNsDIH2pkY}WEHy=4jJtB&n9b0%HZ^gb4)ZMmZeugEKen5 zS?2aD_+zaGHy;1Gs>4G<24C$OwSbU%JzV0g^4{eVj|+ZsQ2Ki`l9s-V*~XEhITGOE z^OIZDrp^FbqfOOBn&<GpYifB=s`>mba+{>X%Pw4^TEA<tT@d=uOrlO-#SNWgoo| z6tbjcm?*>(d6ZcMD<P@27VkT8OR<$TdJ)Aq)~2wdbES~A-lwwfKuxt9hP`YSuPjB* zF?j*Y01<blWPWwOjSvqOjDO~7^DIE`VMz9sR=_!gOa2tlbeKW<%A#u|JeYJ0(2zzB zHb6{c*fNliuUM@}-V@IIQ3pe9Yp~eBA6A1P_Hf#|UkeL=<+dBPO`^v2I|hz&nAn>6 zQUUF=A}ERAAf-`~GogJroRu-fN99W_`Eu_=QF*gjv9eT$=q9CL`B&`3v0Qo;#;$@` z<2<AIb3qSo;v{b%&Dn<lTE_*9J(>b&32B~IIW7Xli_4S`2fo*eGpkuz^UCVX-Qw9P zF9Yw0OqhRTVLU+~r`=Alz_JZelh~qH$BVEsOuM|kzQwwJZ!ffhaoL#~Y0Y9VW6-a@ z<TPyGKZdI+Mo!GYP2Gcw04(UiPD)*tq4Bc3Pq9p)Chrqq&n6t7$Z!l~A~G$F=kk1V zEmKCkHTr-bKwm{N6hbQ_@Sy0+>-L}AOKu*dc(cZ*;@HEDP5=8)^NqDz2_jtFtWPVw zigmF!e~kUNFzAKE|7Ia($64qtd!vt)lrLrT*!Nv|gwdGgAeMK=_Os-p3JQ}U_9rXa zOWwDe^wBPxI)t8IMnsU>J;!yNb#}n240)6VRQ&Ru(2v8r#mGL;v7;*zqe=9%?Y?i9 zvYlpkpXC%a(+Vg=h+ydm<Th+lLz>r-WSz659@nh7X?pal^M?>86?QE27>MA?6hqIh zzZk7((qbAQ7dlZ=2$|@ZA&AoQoUT;Y`*uZta3(@jSN~{`U@V85zM_p$yQaWQsUvA4 zHJE!=xR~Ap7wX`Og5GD|MG&9bbP^NJ>7btRds%dw3ze*+=XT%-HuJ4_WaFqKHYR6V zh~Bw;d^$*`%@`bXJZ^LD7oXjxNTxlIj8%zG$CI@;FPRD4)>1RYDfEhi9)_hYwkzE; z<<TlD1lzSEawL)0hrs$$TGK&_M`hcPg-ml!;q$YsxLQDil7v}R7cx#d)`WSGrf5{^ zW5noom>AL)0AjX3dr00YRvJA{^Ty>+=^4;9oV@OM>uK5kb74CnejQ(Oy5EMEuq`I6 zXcbGJF;iGsWtSmp2|E$TMT(NqmEj>E9f`TGqft|*ifqYKx|B*=PLrt}9llgDX}eFK zif;I5K~dn)%pOHip(eg0^(RTRVw6<lXq&A9HCPD9Sit{XrK3cHFj8uKBpgRRl+G}J z?cZM61GjcM-?(A(ADo*i93>DROA}o7TG|p@m4)xCR$Nv(l>Lf#y0T}j4JB{gD@(}v zN29sOsydy1<cnZqB@pjx_L&@klvA@|uxa$~T5Uy!8M!Y_f;8(q9UiN9+ZNz`y@`zC z=xn{fh)Y<0&0<FSh3VA?Th9|<exwA;Qz^Vs$g6^rdvaFu0X33{XApRDk)s9Iy*G^l zy=0{=epW5sS!z(?sr>OO9;{-phFfcDqo?EOE3epi|Ce_{2Ky?{BZYMPYedEE?{xa> z7@s=Z^1O5;=b{ZWLOJGWUT*8J^kM#F@FkhwJLHW&s*%SQ@eds);ekLro^cd5s?xc6 z9$`xQ4?&bdk3;{nv@)VOrYl7`B<$H!bBTHhboM&d?S6e~R?MWKz~~S_BfqR-N2MgG zOsRK9HEOpfJNxgj*6tQo;S+4^6_?)0M#FKkUvzzYH4zfD1Y76`Y4X$~oy%@kVyqzV zm`kI@33Cpq1xi|I-RD-fH14s=$dtLtqzuGoi%};kfP--j!O2(DiREF@#`m{Ytk@=` z)jC8YU=_TmPAFo@D{dcgBSE?dZ90vI6e~@5MK=-hHjKNv8b)~KudURGK!nMpSCD_s z{U5|H5X>_d>L;`KH{?zLRk)lAO|dX8=AWkQ{*cKs7AA2Kh%3UIN`tVnQEbZ4ePx7G zJt>(FVk;!G3;y1JY%}&HaztiNVEkN%aVU`$hmB>0m-P5z+CsTh*$+1~)40D%bq3kw zdXzv6h5e<5n!_u|a?7YJA<=0X+@9GCl)v;V1O94Bea5}5A2s(X;-%w?IpxW=-XKy_ zH7A8Vv)<Z+^Kev#<ta<C-RtHpDkPp`-tcP>XwxvEEwUSl3v10j8{0oEjdMNpTi!0V z>rqixxF8K@eKefOS}dXCsZ>z0*G&1}d6%Kgch^K{@WEFa{5Ttr0Q-Q<cq?GJ9rrP| z!4pUM=3hqgV!HA}_D)O+>U->W>9G_%fN^`D{GJ4S2w5ymLyACHbEp5!3!fKa*PFYo zbkQ2ml$p^dHSW!q;(qzhl(QgTLViltY2Et|_N=_mhGvYnT&2-X{mn4<SfFyJm>04v zWh>dEz2x$4jnIc$Q|H+pD~8kRy>;`?a9qHjSi^IyQD!gIz0K`rjhL}3M0yJ89h7uz z=aJhtWC76Q*2B)@cLL5SxPTL4>lM=In2KwNtY{JS_DDX8@e*YglI=-zqVB;-E1g$c zX^1*)2MhUNbeO)mL{0LBf-vjYwA5Q8E|J`*2Hc>siE7?4P(1<0c-S|!Wu`Dkw8xD@ zcoAOAp((o99nz&3a!)I?<hpy)wN;=x6pVNn93P`|gr+bwfA+K-uY(f@V$*qrDlBb- zorgD;WJP?vDU9+kot+}zrRFQqU35O=BbR*=n@b#)oR&_z#EL=nMUG1}(rhy6-`2+y z0Buv_V2zRR^WImg=>15|(`g^p5Xz!0prZSRQ+Y)}_K-aOW#(2zBv3^8=eaM739S6@ z@=9Kb2-Wriy>##RGnSP}Bq3ROvyo(|Q@mk}L8cVNxv%xlX2dkkrVTbcOD7%}-(g-W zCzql~hrD(-jT+qXUn^0UN?W{gUB2Ol=*kd;|2qW6PEC3}Un#3E$9e9%i~AyFg{lo% zW&GF+=B=UkTD;&ph*Ic)+^Kl9!MWtvy?}Hyg5|Mn^`ZMFV0yh1sfx=6qDHS)9b-JJ zPAHeO7<W7(83oQrj?>qarBRUSj|Wmijtl9*l|u}|iS*_Za)sdrN(`V-v-C9vb^?XS zh)>!p#@5jCNFYrJIruOwJ>Kdrm@7t5BgL2Y@)-3jnGNTlL;1o;#&QtJ1_~m$r0YHd zs<NkMo6zu};fj{2*<rP=RXwVZ4BCIE8579#=VQ1-GC=0F%0YMqNorR;o%)vMXliua z;=FKZo&NJ{Raan5GEy2OM<*#aK%ouDP)3e^0eh<J8Xg)R?i0r#-A3-Q=$J1FfGSi~ z8~UQ0i4R-Hy1Gj7RgY((socU>%J-^vCxxs((#bO&Fbi7@5Y@S}_ZsKPeM2R>oN8(1 zJtW)Edu-0p{lYoVFXH-hJIJwEdhvg)r<GPLG~($umM04cH5nOhecmlw+IK`vMTO1f zauyW!$g;<hrRIflQJUw^9W=03W5?DRYHdvw_qTznOh>Kwf8R1St62N|>6BBa<tO2r zHrL1?@{wDu+Kdd*T5dU892crHQ8)1ttSK_F#5MJ@U#9AN*BuJ8pr6REp$kQ7?Znuh zsHFeqRV{U)7`p+ZQIw3LPF@iTJuKs}i|HVATs;{N@{ZfoGJ{RcLc^78DAKYyQnmm$ zW{0J{8@@>sc_tx}oJ(+c=IF$V2vuPTfc~&^#9sA=6T*fJJM%?EeF!pUeFjsOUnz$= z1K@$8pB8tBu%e$_i|9{3A4lpqxwD`1`-a{yvp=F7VYxCSGpddPH~><@w_N7nDKj;S zhn-!YfdS>NGyG|Ikx%j{PPljSEyIN3<FB1n;Ur-GkjdMtp{>4Py`tz3K3p^#r7w?% zRD@Fie5CMu&o#K?*`mP~*OJMK$HiH(UEd*xung&y*ujP24h>gsFPp`+I9Vx(MgJwo z5}L(mNW^0)sSTBs4rJ2(_=H4ABEC~UqLb>tJZ;E4(!l8M%q1zoMz3EQO+6+;f{Yw5 z7=}4h{;R#KStd`re8_!eR80F<j;tKb<IXy|#loCukglp=fz#irdR<cioa`*#7-`A9 zSvQijK=tN3%$?#khS)%K^635UN|5jEC2mqt{}Mp)2v)COJJ_5Y@`4J;HN3?CdtIPD zf;~S<gt&vZ_#N%k*2$iC^@3E`z0r*UNS!?Vcsk)@)77H$yoF!>+-|!{=1Y|97yS4` z94!9$Cgj#JB2dOYh4$=lVMYe=#NY17iqP18@9{f5*6`r%AFV_hY<rt$jbBVZ>!v@b z9y!{-nVZ1VsJ`0Iw9!m32%#ZN6Ob%CA(-^h7-o%EKYVS&QLg&ai%lhis2!s4<?%rj z!zsha$T*UcjE@&4wXU1(SL#4L9e1<0a)$b}?6LA(eVh#T0hgqf*P{nzZ<A>*eB|@R zyeH?4X*yUi`KqP9hE)J?^!~`})UFx4GV@>A#gD{++wOe!goqhN@XmaTpo*X4X`_dv z<D2XHI2;TF-%P8+)8<{qnFid*TOEyz@A;&8K`-Y_)TSu`O6-e3*nLeNMC<J}WI3NJ zYcjAj6&S3}AW+R5CH=Q&Vn8Rfa>|Y;b>73e8a)iCq&VQXr7Uf?Uadd-oB?0~8`fq| z2bpy7TCI3#c{QiE5iAH4AU5T>{u-ZpOcyfsoabY72Ic{@>NS6LDwicP^&CZTjH35U zX}>FuzOw}Ht1=#!kA-c?+a0pW_k(Y*M4Q8$yjISd;`DCr(pUFy0UfwPO*ukQ*e~(9 z1a6m{y`@!F8PlqLJHz`$(Y;Qz%ph;(BLGV`Gpb<p^E{|b=Thcy`A!X|p`$hP8eR&D zC&Irh{`cQf!0dY3u_ocDiMfo%6ED+pfewpUoM?frLnDP}U8kXT{ak4qz;<dC3J}V! hgcRNenXk77Rs5d}_`k_8pP%@FIiP4r0YwB2^&dft;jsV! 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