From 78932095945a36d8f66ff13120df7e6d16a18768 Mon Sep 17 00:00:00 2001
From: "th.l" <thl-cmk@outlook.com>
Date: Tue, 7 Sep 2021 08:05:12 +0200
Subject: [PATCH] update project

---
 agent_based/checkpoint_vsx.py         | 176 +++++++++++++-------------
 checkpoint_vsx.mkp                    | Bin 4042 -> 4045 bytes
 web/plugins/metrics/checkpoint_vsx.py |   2 +-
 3 files changed, 90 insertions(+), 88 deletions(-)

diff --git a/agent_based/checkpoint_vsx.py b/agent_based/checkpoint_vsx.py
index c0ad057..878da36 100644
--- a/agent_based/checkpoint_vsx.py
+++ b/agent_based/checkpoint_vsx.py
@@ -16,6 +16,9 @@
 # 2020-06-08: changed snmp-scan function
 # 2021-09-06: rewritten for CMK 2.0
 #
+# ToDo: create WATO for discovery and check function,
+# if we discover other than 'virtual system' we need to adjust parse/check function
+#
 # snmpwalk sample
 #
 # .1.3.6.1.4.1.2620.1.16.22.1.1.1.3.0 = Gauge32: 2
@@ -81,7 +84,6 @@ class CheckpointVsx:
     vsxCountersConnNum: int
     vsxCountersConnPeakNum: int
     vsxCountersConnTableLimit: int
-    vsxCountersIsDataValid: str
     metrics_rate: List[Tuple[str, int]]
 
 
@@ -93,43 +95,43 @@ def parse_checkpoint_vsx_system(string_table: StringTable) -> Optional[Dict[str,
             vsxStatusSicTrustState, vsxStatusHAState, vsxStatusVSWeight, vsxCountersConnNum, vsxCountersConnPeakNum, \
             vsxCountersConnTableLimit, vsxCountersPackets, vsxCountersDroppedTotal, vsxCountersAcceptedTotal, \
             vsxCountersRejectedTotal, vsxCountersBytesAcceptedTotal, vsxCountersBytesDroppedTotal, \
-            vsxCountersBytesRejectedTotal, vsxCountersLoggedTotal, vsxCountersIsDataValid = entry
+            vsxCountersBytesRejectedTotal, vsxCountersLoggedTotal = entry
         except ValueError:
             return
-        if vsxStatusVsType.lower() in ['virtual system']:  # , 'vsx gateway', 'virtual switch', 'virtual router'
-            vsx_systems[vsxStatusVsName] = CheckpointVsx(
-                vsxStatusVSId=vsxStatusVSId,
-                vsxStatusVsType=vsxStatusVsType,
-                vsxStatusMainIP=vsxStatusMainIP,
-                vsxStatusPolicyName=vsxStatusPolicyName,
-                vsxStatusVsPolicyType=vsxStatusVsPolicyType,
-                vsxStatusSicTrustState=vsxStatusSicTrustState,
-                vsxStatusHAState=vsxStatusHAState,
-                vsxStatusVSWeight=vsxStatusVSWeight,
-                vsxCountersConnNum=int(vsxCountersConnNum),
-                vsxCountersConnPeakNum=int(vsxCountersConnPeakNum),
-                vsxCountersConnTableLimit=int(vsxCountersConnTableLimit),
-                vsxCountersIsDataValid=vsxCountersIsDataValid,
-                metrics_rate=[
-                    ('packets_processed', int(vsxCountersPackets)),
-                    ('packets_dropped', int(vsxCountersDroppedTotal)),
-                    ('packets_accepted', int(vsxCountersAcceptedTotal)),
-                    ('packets_rejected', int(vsxCountersRejectedTotal)),
-                    ('bytes_accepted', int(vsxCountersBytesAcceptedTotal)),
-                    ('bytes_dropped', int(vsxCountersBytesDroppedTotal)),
-                    ('bytes_rejected', int(vsxCountersBytesRejectedTotal)),
-                    ('loggs_send', int(vsxCountersLoggedTotal)),
-                ],
-            )
+        # if vsxStatusVsType.lower() in ['virtual system']:  # , 'vsx gateway', 'virtual switch', 'virtual router'
+        vsx_systems[vsxStatusVsName] = CheckpointVsx(
+            vsxStatusVSId=vsxStatusVSId,
+            vsxStatusVsType=vsxStatusVsType,
+            vsxStatusMainIP=vsxStatusMainIP,
+            vsxStatusPolicyName=vsxStatusPolicyName,
+            vsxStatusVsPolicyType=vsxStatusVsPolicyType,
+            vsxStatusSicTrustState=vsxStatusSicTrustState,
+            vsxStatusHAState=vsxStatusHAState,
+            vsxStatusVSWeight=vsxStatusVSWeight,
+            vsxCountersConnNum=int(vsxCountersConnNum),
+            vsxCountersConnPeakNum=int(vsxCountersConnPeakNum),
+            vsxCountersConnTableLimit=int(vsxCountersConnTableLimit),
+            metrics_rate=[
+                ('packets_processed', int(vsxCountersPackets)),
+                ('packets_dropped', int(vsxCountersDroppedTotal)),
+                ('packets_accepted', int(vsxCountersAcceptedTotal)),
+                ('packets_rejected', int(vsxCountersRejectedTotal)),
+                ('bytes_accepted', int(vsxCountersBytesAcceptedTotal)),
+                ('bytes_dropped', int(vsxCountersBytesDroppedTotal)),
+                ('bytes_rejected', int(vsxCountersBytesRejectedTotal)),
+                ('loggs_send', int(vsxCountersLoggedTotal)),
+            ],
+        )
     return vsx_systems
 
 
-def discovery_checkpoint_vsx_system(section: Dict[str, CheckpointVsx]) -> DiscoveryResult:
+def discovery_checkpoint_vsx_system(params, section: Dict[str, CheckpointVsx]) -> DiscoveryResult:
     for key in section.keys():
-        yield Service(
-            item=key,
-            parameters={'policyname': section[key].vsxStatusPolicyName, 'ha_state': section[key].vsxStatusHAState}
-        )
+        if section[key].vsxStatusVsType.lower() in params['vsType']:
+            yield Service(
+                item=key,
+                parameters={'policyname': section[key].vsxStatusPolicyName, 'ha_state': section[key].vsxStatusHAState}
+            )
 
 
 def check_checkpoint_vsx_system(item, params, section: Dict[str, CheckpointVsx]) -> CheckResult:
@@ -139,66 +141,65 @@ def check_checkpoint_vsx_system(item, params, section: Dict[str, CheckpointVsx])
         yield Result(state=State.UNKNOWN, notice='Item not found in SNMP data')
         return
 
-    now_time = time.time()
-    value_store = get_value_store()
-    metrics_prefix = 'checkpoint_vsx_'
-
-    for key, value in vsx.metrics_rate:
-        try:
-            value = get_rate(value_store, f'{metrics_prefix}{key}', now_time, int(value), raise_overflow=True)
-        except GetRateError:
-            value = 0
-        yield Metric(name=f'checkpoint_vsx_{key}', value=value, boundaries=(0, None))
+    if not vsx.vsxStatusSicTrustState.lower() in ['trust established']:
+        yield Result(state=State.WARN, notice='SIC not established')
 
-    # system information
-    yield Result(state=State.OK, summary=f'Main IP: {vsx.vsxStatusMainIP}, VS ID: {vsx.vsxStatusVSId}', details=' ')
-    # Counters
-    # infotext = f'Connections: {vsx.vsxCountersConnNum:.0f}, ' \
-    #            f'Packets prosessed: {vsx.vsxCountersPackets:.0f}/s, ' \
-    #            f'Logs send: {vsx.vsxCountersLoggedTotal:0.2f}/s')
+    if vsx.vsxStatusVsType.lower() == 'virtual system':
+        yield Result(state=State.OK, notice=f'System name: {item}')
+        yield Result(state=State.OK, summary=f'Main IP: {vsx.vsxStatusMainIP}')
+        yield Result(state=State.OK, summary=f'VS ID: {vsx.vsxStatusVSId}', details='Virtual system ID:')
+        yield Result(state=State.OK, notice=f'System type: {vsx.vsxStatusVsType}')
 
-    yield Result(state=State.OK, notice=f'System name: {item}')
-    yield Result(state=State.OK, notice=f'Virtual system ID: {vsx.vsxStatusVSId}')
-    yield Result(state=State.OK, notice=f'Type: {vsx.vsxStatusVsType}')
-    yield Result(state=State.OK, notice=f'Weight: {vsx.vsxStatusVSWeight}')
-    yield Result(state=State.OK, notice=f'Main IP: {vsx.vsxStatusMainIP}')
-    yield Result(state=State.OK, notice=f'Policy name: {vsx.vsxStatusPolicyName}')
-    yield Result(state=State.OK, notice=f'Policy type: {vsx.vsxStatusVsPolicyType}')
-    yield Result(state=State.OK, notice=f'SIC status: {vsx.vsxStatusSicTrustState}')
+        if not vsx.vsxStatusHAState.lower() in ['active', 'standby']:
+            yield Result(state=State.WARN, summary=f'H/A Status: {vsx.vsxStatusHAState}')
+        else:
+            yield Result(state=State.OK, summary=f'H/A Status: {vsx.vsxStatusHAState}')
 
-    yield Result(state=State.OK, notice=f'Conn table limit: {vsx.vsxCountersConnTableLimit}')
-    yield Result(state=State.OK, notice=f'Is data valid: {vsx.vsxCountersIsDataValid}')
+        if not vsx.vsxStatusVsPolicyType.lower() in ['active']:
+            yield Result(state=State.CRIT, notice='No policy installed')
 
-    if vsx.vsxCountersConnTableLimit > 0:
-        yield Metric(value=vsx.vsxCountersConnNum, name=f'{metrics_prefix}connections',
-                     boundaries=(0, vsx.vsxCountersConnTableLimit),
-                     levels=(None, vsx.vsxCountersConnTableLimit))
-    else:
-        yield Metric(value=vsx.vsxCountersConnNum, name=f'{metrics_prefix}connections')
-    yield Metric(value=vsx.vsxCountersConnPeakNum, name=f'{metrics_prefix}connections_peak')
+        if params['policyname'] != vsx.vsxStatusPolicyName:  # policy changed
+            yield Result(
+                state=State.WARN,
+                notice=f'Policy name changed: expected {params["policyname"]}, found {vsx.vsxStatusPolicyName}'
+            )
 
-    if not vsx.vsxStatusHAState.lower() in ['active', 'standby']:
-        yield Result(state=State.WARN, summary=f'H/A Status: {vsx.vsxStatusHAState}')
-    else:
-        yield Result(state=State.OK, summary=f'H/A Status: {vsx.vsxStatusHAState}')
+        if params['ha_state'] != vsx.vsxStatusHAState:  # H/A state changed
+            yield Result(
+                state=State.WARN,
+                notice=f'State changed: expected/found {params["ha_state"]}/{vsx.vsxStatusHAState}'
+            )
 
-    if not vsx.vsxStatusSicTrustState.lower() in ['trust established']:
-        yield Result(state=State.WARN, notice='SIC not established')
+        yield Result(state=State.OK, notice=f'SIC status: {vsx.vsxStatusSicTrustState}')
+        yield Result(state=State.OK, notice=f'Weight: {vsx.vsxStatusVSWeight}')
+        yield Result(state=State.OK, notice=f'Policy name: {vsx.vsxStatusPolicyName}')
+        yield Result(state=State.OK, notice=f'Policy type: {vsx.vsxStatusVsPolicyType}')
 
-    if not vsx.vsxStatusVsPolicyType.lower() in ['active']:
-        yield Result(state=State.CRIT, notice='No policy installed')
+        # metrics rate
+        now_time = time.time()
+        value_store = get_value_store()
+        metrics_prefix = 'checkpoint_vsx_'
 
-    if params['policyname'] != vsx.vsxStatusPolicyName:  # policy changed
-        yield Result(
-            state=State.WARN,
-            notice=f'Policy name changed: expected {params["policyname"]}, found {vsx.vsxStatusPolicyName}'
-        )
+        for key, value in vsx.metrics_rate:
+            try:
+                value = get_rate(value_store, f'{metrics_prefix}{key}', now_time, int(value), raise_overflow=True)
+            except GetRateError:
+                value = 0
+            yield Metric(name=f'checkpoint_vsx_{key}', value=value, boundaries=(0, None))
 
-    if params['ha_state'] != vsx.vsxStatusHAState:  # H/A state changed
-        yield Result(
-            state=State.WARN,
-            notice=f'State changed: expected/found {params["ha_state"]}/{vsx.vsxStatusHAState}'
-        )
+        # metrics count
+        if vsx.vsxCountersConnTableLimit > 0:
+            yield Metric(value=vsx.vsxCountersConnNum, name=f'{metrics_prefix}connections',
+                         boundaries=(0, vsx.vsxCountersConnTableLimit),
+                         levels=(None, vsx.vsxCountersConnTableLimit))
+        else:
+            yield Metric(value=vsx.vsxCountersConnNum, name=f'{metrics_prefix}connections')
+        yield Metric(value=vsx.vsxCountersConnPeakNum, name=f'{metrics_prefix}connections_peak')
+    else:
+        yield Result(state=State.OK, notice=f'System name: {item}')
+        yield Result(state=State.OK, summary=f'Virtual system ID: {vsx.vsxStatusVSId}')
+        yield Result(state=State.OK, summary=f'System Type: {vsx.vsxStatusVsType}')
+        yield Result(state=State.OK, summary=f'SIC status: {vsx.vsxStatusSicTrustState}')
 
 
 register.snmp_section(
@@ -234,7 +235,6 @@ register.snmp_section(
             '23.1.1.10',  # vsxCountersBytesDroppedTotal
             '23.1.1.11',  # vsxCountersBytesRejectedTotal
             '23.1.1.12',  # vsxCountersLoggedTotal
-            '23.1.1.13',  # vsxCountersIsDataValid
         ]),
     detect=any_of(
         startswith('.1.3.6.1.2.1.1.2.0', '.1.3.6.1.4.1.2620'),
@@ -249,9 +249,11 @@ register.check_plugin(
     name='checkpoint_vsx_system',
     service_name='VSX System %s',
     discovery_function=discovery_checkpoint_vsx_system,
-    check_function=check_checkpoint_vsx_system,
-    check_ruleset_name='checkpoint_vsx_system',
-    check_default_parameters={
+    discovery_default_parameters={
         'vsType': ['virtual system', 'vsx gateway', 'virtual switch', 'virtual router']
     },
+    discovery_ruleset_name='checkpoint_vsx_system',
+    check_function=check_checkpoint_vsx_system,
+    check_default_parameters={},
+    check_ruleset_name='checkpoint_vsx_system',
 )
diff --git a/checkpoint_vsx.mkp b/checkpoint_vsx.mkp
index daaecabfd99fbd0ffe02b7a9a423efb61f5cefc4..e525a9f0688635f90ce09cb9e890fcc109d818fd 100644
GIT binary patch
literal 4045
zcmaizS2P;{!$4_mYSjp8lxR^~OY9Yi*sHa-Dyp@KQL)7)sJ%BWYHw=Bj!`vhD@8T-
z&i}pt=X~GWJ?FmO%N|2Q!iX<n{Qzg{@YeRdtBd1DPfKqPxPYjzsEDwnu(+VNps=8r
z;D`6Fc!#X-U6w#~d5pV=wNfLr9H<T`j{^MLXmhN2v{<T$(xgH&N7&3XHPvk;Zxt&h
z;sX03`J)T%B$swR;%k{m)4q%7%UE|+Rf}aD>t&P&@COApt9RpXxwNk~TFjd-{XG+?
z+JDkf>pbc$C6su!!DPky{3AhOKmsH>?k1}zbiF!R1;F&s&P;GD;h7VV9D%62^*el4
z<eGD7eR<}`{HzGp;>`RtFHvLw3p{=k#YhzPM;`!(0iI%P>*94m%FPxjU(DGDF5E)W
zM2;VLcJw6I?DC(65UdQYE;fH-=h}P@3>LwDX9J1iNa(^xvK-hoIS-xzDk+6CG12xM
zR9yp8oxqqVHD8@JUlQkhw<rmGX6=t^ix44*Vmi;(s+ff~?GXbD34yR6twj2-<<MpS
z5ve=j^w0>yeS+~|9*BN+3mZ>F^pO@r-Raw2p$t+RPcN*C@fNIwQlUuggTymy>NV1D
zcFPv6$u*#;C5emt(I)nZ&1V&fCNdr5x0syxpGn#pU8<<pG7inHW$7`lsbThjao+Q>
z6E_NnH4~2~z)cp3LH(94@p6=5Kk48a!OovwfJSgdtaN}fjp4oD-(U^(Z16AO#}_2*
zu-C!u{owon$y81wp`i*OWor^VN;^r#5=b_>#Gvu{PwX+iP;_gV^k-XB=$qA!R|551
zpEK2k0MJYM_d<o5ub%YOx&y$S`3a6A=mtuS_AF)Np}%nnLpsgS*#NTp+smSxZer}}
ztr%q}&ieM~R9f%0`D<uyJZ_Q}cVTq9%97uCh(*+dpNIX^M&`2J*BjxWwH|Z`C-j@4
z-(`fGZAs0L^pa@$LjEad#}sb#%LaUgc_H#T*H4{>$W(u>o=CKsdNX8B7Wu^?f#40N
za#y;6MjsDvB`buKp2{sukX<Fb*NnO(9f*u3aiq{(s0HxZAfM9JhBO`}&lTI^FT1l@
zI-nK)u_Y7q{!YNjUi-`4OUIX-;NAr*;c(y1o2lA}588ijR=WFX9R)3P`(O?g1@V~h
zK?5F(>;;Sx?<e!#tbKTa%j&JlTiORXt-=*qh?^a}sD>3VzE?9Z8gNtqo4yLhF=B_D
zv2&_nRvwPG?46{PHZlrFS_tToYY-RUd}2<bO9D2E`P!FcIYVF@G;%@~a&~hCO~<Fu
z*(--8{!)lgNPOa&|LOAG8JtxwBskvq<98@m{Arp#{RFX-{BrY}<vTnWlBEY3wqez(
zgzbNXac0F7SoAlL+JnOT2Zuh^S~Mm~=WxmqiGha}o3Dei-nG_P?aklJ(Qr`dgdK5U
zVXg|vDVy5t)D#(J=+S?gpfwo%_3`zw*g%FK7Ff(n&zf(XIndfn!UWXufrm!)+TrJs
zsuIkkWY<xIFj^&wkruo{goI#5;%t^DJhnFy2bWv#4e8oPQxmStXT+uL+2z{*t?o%P
z1T1`-aYIW8G+?MZJ$`yDyY(C_Ic7h{c!I_Uwy%cwq|pMu^70NoJl`L&Gc;3VG*Em6
zI<=z|Pw^quDkJi;EG@nI!lL;e!-j6)7phkD<<Yl*^q&Hx=sj`p;C%x`G2Pux7ZGo{
zYF%yPK!%jl(5}f+l$7X{b$5GC<qQ3V6|O4C2ST4+b}xUZ{}L&A?waRUi$`rCjHgsz
zESia|zmtAp1``(fu>Ss6do;_j0{EotzvkKQmFcjgP4mN>?97<hi_W%;&BNXA>U?GC
zWLCO!n=h6&1+Gr=sh-EIup+DF@oJoHy3_IWxIjE=xyI^LQ(fNAZCc5tgESzpbjF2o
zM?CF4v!)~=lQ2xs<=8QoxAda-$kt~&quG0;4U4MoRe}FavaTKw6ms<>x0URc8p1AW
zPjdnkXF_6TwBM!CXbG9GvPX&qD!NwzyG~FlCd|w4N`!xS+@)Iv6ox+SPPbKsnj_+d
zL@4HsT3FuFclQlTnsvq%CL)&uGAT7MqHNk&{?85AXRLf40%d!_#W5sbJYhRI8f3>O
z+TTB)#?VZIZ}{%Tt%?&Z%`j$Le>Uu-@II&<-(Auc>!${|cdl(|ymn_$V(><gJ%+!6
zzOfj*=*_|eX$gE$g5%m6cK>XUpYOx~ExpIm6yy6iK;}ZkiFVv0y<!J}U%~lO_qzg}
z;GT6DomVXWA@FB|wpl2JK!`ZANODk=afs-|r0*bqo@4)Pysc;~KG*k3%?8|l>5zFc
zB^v&lUyAvyIBVJ77PYKQUArd@uPVn;2%VVW%;@+7PzsqLA<iKR0^Ip995{_yDJnUR
z{=CR!vYUV!@erKigDX|-;t7PWm~!vD`B5eA7vINZ3K?DTe;i&#pKB388WpSbeSess
z2Bit}4gY<qEdw*)59Av4qGfLdSt5J|=vq4}6V?MJjzWobYle;1UBCpMDj{5P0jN<h
z$QY{VonU{8%1aM~M;1YnFE<*q=Msp*$_e-6G>UetR;4d~Igl>MgHMK)Iv#&_ri4P?
zlwk;~x${^RW8Cjbb=R?d9k?{>Y4JzfT{<D-QiD2wdAR3|YnUqi^eVu{&CHe3ra9H(
z{CmON4IR>y<ahN3eP8M+V^*5$l$G*WLk^h-md2fweyzXm?{FXw<)<r$+m(p2xFG=+
z-TVik;uKvx@)j!V1VeW1C`#5in;yrJu@j0?egeATf%)3-$k8H=B$(j6^Exf|Qf~_t
zBg1XB`xhJz9B?%nE;kSeZ!sP&?a&-ZH0ec0t}!RrKH*6x32s)9rLE3#Y|~Ks3OK9-
z+tyF$p_~;sHw3LuqZgVmc&R1yFRv2yrW8Nx2Mq8RSvhO8#Ik5ws|Kx2j#d{q+r5b;
z&;SCc9HK-}M4$bsZe~2SFg%rWq4tjoD8uJ?-)X#*2@rnslH@qfztP#I+J=8w#JJ|g
z(2n(A5la`bdcsD9C|2aGKttB6FkZZ$x^f;|4}ZII@mE;)|CV+>xDPtoPRim<!#ZPj
zC>@K&R<-4`1Ml4zIkVF8FACh0&gaouI~3X8Y6p-VOV2+JFU2ApnS1^QF;dgk_0+KG
zA2TU(*6eO&7Z}V5)l3p93TeeVmT+d3a_DFQhFK!}dYx=p@#PTn2J&L_oKMJhWp;y&
z)^!bZxRc?XW^Gflu21*yIZwVsW_R$vhm-YHk$WCP?4i?HP$V>9)Yrjm+Xod~=>59x
z0j<=OzfSp$NIf(o`CnJ64^`TS0_D}%E21{3Hz{qZrEwRBKaoFxG3n<{-&W=m+*UG=
zO==9a8wLAsH7gPqO+a$;tz%Lnjz}X70{fut8yo0)Z}B%{l3cFS6Jeoz5H^x7S8ThT
zl)jMuq4#$?m6W)wZzhiN>if(J#imn909n`J3(?`dheZ5-vMFes15Ze+5^L7Cg7VmL
zQ9_3hqr8nf*SBWKMmr~mlbzBL)or5J4eHC^l<;4*%lEGu?H#wGaV`E<Fh<`kz~Eo`
z;DR-!P_jHYpQRVUm{k4jg=NVJA$W&;;f|w&CHc%0ur!<olVc9i==I~ySACJrX(PpI
ztODOjGEnpjaC1g({Nt|~xJ(XGW=5HwjohfYF*$Ovro~Xd>fe6-QjG0bPgYJL$4*tv
zbUgX3(yVi^eFq=`rY04t3L^079S_Kn`APHB;YD$sfh_7Pi3HL#NQ9fU<XD$d`FcS~
zqByHHDRR@g&uNO7CyTqOWb)Z|2-yYISqkl4^cThOM6*~<^0wZAERKC6IRBUqIQ5b0
zcqLtf@c??LSvZ1{1uU|3Im_hJZMaD;>(8<|zPRqavq`^J`bt&6cS55seVRA9XNAcF
zD_C{XVV?0<*e@~9a~}=7xwVzMSP$iGOe)Amlzg0=+n#|EMbM9)?hQ`+5mpD4VYtHx
zb9z12N>nycUC)cSlcckJllkbn*7U-AUuM`8tCNalYcTYA-e{m@(C4!l9ha9%=ujT-
z+xtUoWc}pxvb38#tw0uvd{nH=Y3a9)vA4zTzr)x7TOC?)i`K7U<SkCiAMw*bxy;Sa
z*XvqSn45*x?e~J1arqoj@v$miO77@v|0-BKkT$nIm1h~Hvf+!0oygOhw^DaAi2J2m
zc(PmmY>yB2pEFAT(3fBOl{0r*Dlq=MoP9}5n7Mpin7Lc4kYY+;@R*ez89kcer1m|t
z<V8AnN>gTCM2q(nZ&>O`tbI!Soqjgn<kO}1j2miAEUV~3_3L>$M`Mv4fQ{Vurt=bB
z+NJ)Qfqxh&j>*>`aGZOto)s5Z)*aSrZkAJsn6g851<dhR4~t(>-rCF9#2^lIgRVDq
z$39CAQKZVOOh6Yb#dT#&*H<V^O&LCshw00BSOeH%_KSKsdKqnq2V~oxA537m(L*8B
zQ;S0)8e~om;d|~g%h6sxo&;BBBuK_)iUz$sdw9eA(gBmN7)tc$zXFMCq)Xs@YXYx9
z9&Xn&=C{0wEHn>y!(V$QGk^3J*Y(={o~s2i1e-+2xH|uP+`if@eSJIhJE;5cDq-t#
z;8S}M2$#eL8H<N&te#t2Xi=ZsYgR~<LB@aP?kz+r`ccn<e5x6EH4{?Qu6DFzZG48d
zRL@TPE79fx{VXq@j4NGJ+xex*RrBds7<N`D#A~l7AU{sjvrEKoQV?R(bZ6e##(AxA
zpCSW}cU`Z6&&{q5T;xD^P3nK;<`_acb@Y{K&o?y9B@c48{|#^c@glHBdU5aBp$ta#
zWL_478ScwvMySc_<_}wVq7G-LqXN#+47_>`exjiE;aW)%yBKPg4nI9l?_?Vft^XKt
z_*wC;)GJwKDcKS*+4U_V{MkGymaltvb{cZOo2vFy?Ngxv(K|+_riD;a-H&m4yiz%t
z3^ehdc$0!V^k}%Eb?be+!`tc=aK)E7?43lrMgfwdUo)trw!(uB1cC?WR9BQDjtD^)
zP2i$qFOXdejkg5B-i;GP#_f~DqGAyKRXarwRi-LpG^g^UGV^pI?g2y%@jiOmS>N|s
z&BEO41YTQJNe>nHq2q-uFK0!DJ<jmXr%h-aNseoJk?h^ISXpfDYpBAY<x@E&eq~j$
z2rS|IQb0}%arJt_>p<{ebb@R+N3Z0w-Uv{W@swJF<&irNxls=FF>}99H0?QrMv`bW
zoUPSJ?Wjo<8;#JbIQ_H`zCSsyNUQ+HrGz?0ZC@_&QMe{zx_eU)#Cz@N5?5@u;7WOg
a<*VucUEBXJ@^-Zcf!`#rDUFwphxdQLCCQlp

literal 4042
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
ae>d_!rTsq||Com12?GIjodksh1pfhpdeXcA

diff --git a/web/plugins/metrics/checkpoint_vsx.py b/web/plugins/metrics/checkpoint_vsx.py
index d423fd9..a10e976 100644
--- a/web/plugins/metrics/checkpoint_vsx.py
+++ b/web/plugins/metrics/checkpoint_vsx.py
@@ -111,7 +111,7 @@ graph_info['checkpoint_vsx_bytes'] = {
 graph_info['checkpoint_vsx_logges_send'] = {
     'title': _('Check Point VSX: Logs'),
     'metrics': [
-        ('checkpoint_vsx_logges_send', 'line'),
+        ('checkpoint_vsx_loggs_send', 'line'),
     ]
 }
 
-- 
GitLab