From ab7f1f3aca527f288aba8bbc7098f5afe3d0b5a8 Mon Sep 17 00:00:00 2001
From: "th.l" <thl-cmk@outlook.com>
Date: Tue, 10 Aug 2021 22:28:09 +0200
Subject: [PATCH] update project

---
 agent_based/checkpoint_powersupply.py      | 115 +++++++++++++++++++++
 checkpoint_powersupply.mkp                 | Bin 1434 -> 3093 bytes
 packages/checkpoint_powersupply            |  22 ++--
 web/plugins/wato/checkpoint_powersupply.py |  41 ++++++++
 4 files changed, 170 insertions(+), 8 deletions(-)
 create mode 100644 agent_based/checkpoint_powersupply.py
 create mode 100644 web/plugins/wato/checkpoint_powersupply.py

diff --git a/agent_based/checkpoint_powersupply.py b/agent_based/checkpoint_powersupply.py
new file mode 100644
index 0000000..5a65d5c
--- /dev/null
+++ b/agent_based/checkpoint_powersupply.py
@@ -0,0 +1,115 @@
+#!/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  : 2018-07-31
+#
+# Monitor status of Check Point appliance power supply
+#
+# 2020-06-08: changed snmp-scan function
+# 2021-08-10: rewritten for CMK 2.0
+#             added WATO
+# 
+#
+# ToDo: remove VSX...
+#
+# sample snmpwalk (two  power supplys)
+#
+# CHECKPOINT-MIB::powerSupplyIndex.1.0 = INTEGER: 1
+# CHECKPOINT-MIB::powerSupplyIndex.2.0 = INTEGER: 2
+# CHECKPOINT-MIB::powerSupplyStatus.1.0 = STRING: Up
+# CHECKPOINT-MIB::powerSupplyStatus.2.0 = STRING: Up
+#
+#
+# .1.3.6.1.4.1.2620.1.6.7.9.1.1.1.1.0 = INTEGER: 1
+# .1.3.6.1.4.1.2620.1.6.7.9.1.1.1.2.0 = INTEGER: 2
+# .1.3.6.1.4.1.2620.1.6.7.9.1.1.2.1.0 = STRING: Up
+# .1.3.6.1.4.1.2620.1.6.7.9.1.1.2.2.0 = STRING: Up
+
+#
+#
+# sample section
+# smart-1 5150
+# {'1': 'Present', '2': 'Present'}
+# 23800 appliance
+# {'1': 'Up', '2': 'Up'}
+
+from typing import Dict, Optional
+
+from cmk.base.plugins.agent_based.agent_based_api.v1.type_defs import (
+    DiscoveryResult,
+    CheckResult,
+    StringTable,
+)
+
+from cmk.base.plugins.agent_based.agent_based_api.v1 import (
+    register,
+    Service,
+    equals,
+    Result,
+    State,
+    SNMPTree,
+    startswith,
+    all_of,
+    any_of,
+)
+
+
+def parse_checkpoint_powersupply(string_table: StringTable) -> Dict[str, str]:
+    powersupplys = {}
+    for psindex, psstatus in string_table:
+        if psindex.isdigit():
+            powersupplys.update({psindex: psstatus})
+
+    return powersupplys
+
+
+def discovery_checkpoint_powersupply(section: Dict[str, str]) -> DiscoveryResult:
+    for key in section.keys():
+        yield Service(item=key)
+
+
+def check_checkpoint_powersupply(item, params, section: Dict[str, str]) -> Optional[CheckResult]:
+    try:
+        psstatus = section[item]
+    except KeyError:
+        return
+
+    if psstatus.lower() in ['up', 'present']:
+        yield Result(state=State.OK, summary=f'Status: {psstatus}')
+    else:
+        yield Result(state=State(params['ps_not_up']), summary=f'Status: {psstatus}')
+
+
+register.snmp_section(
+    name='checkpoint_powersupply',
+    parse_function=parse_checkpoint_powersupply,
+    fetch=SNMPTree(
+        base='.1.3.6.1.4.1.2620.1.6.7.9.1.1',  # CHECKPOINT-MIB::powerSupplyEntry
+        oids=[
+            '1',  # powerSupplyIndex
+            '2',  # powerSupplyStatus
+        ]
+    ),
+    detect=any_of(
+        startswith('.1.3.6.1.2.1.1.2.0', '.1.3.6.1.4.1.2620'),
+        all_of(
+            equals('.1.3.6.1.2.1.1.2.0', '.1.3.6.1.4.1.8072.3.2.10'),
+            equals('.1.3.6.1.4.1.2620.1.6.1.0', 'SVN Foundation'),
+        )
+    )
+)
+
+register.check_plugin(
+    name='checkpoint_powersupply',
+    service_name='Power Supply %s',
+    discovery_function=discovery_checkpoint_powersupply,
+    check_function=check_checkpoint_powersupply,
+    check_default_parameters={
+        'ps_not_up': 2
+    },
+    check_ruleset_name='checkpoint_powersupply',
+)
diff --git a/checkpoint_powersupply.mkp b/checkpoint_powersupply.mkp
index b2633f067d99ebb4deb896c616024b283e1161c2..8911bbf6b847123e369b5bb27d0105bf049a5f2c 100644
GIT binary patch
literal 3093
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
RjL!g;*@`eK%2de2^dISo_Ll$v

literal 1434
zcmV;L1!ejliwFowk=|Yc|6^!nV{344X>N31aBp{Ia&vWXaBO)kGB7bXFgG(XE_N_3
zFfK7JZEJ7<?U-$E+cpq@^I5;*s-jT5*@`5;B-4-&TN-4++Ae64VSr;8icH5^WKxwV
zr$&(fz9S{Y?}=BmDGJ<UAd<+t<MHK=WFkHkJKq=w>9kt<i7Y>z{ie6$HangDw(GQA
zcgJzD%-sQJ=LN_!8KeMTrIYiW`$4$3f?SS7YWa{`7bE+f4ZCs_H^T94H;_G%%UFop
z?m)<1D8@CbZh$plS(rwNj0D$e?*)&fNa1M2!do~K5tk4oNgM?{WRQqEmO_?e!4z<?
zWu9H}E8YOKA)_#eAsXs(23$xm^Tf1OH5ZVubT|lPP=4M8Qe5%E1#!n?5e)iy8lw-^
zNXjJh_x4KH?U6{Nutj>KrH4_>G8DVFLgk`*?G~?za<;EsEIhP&4@!dvW2WqG5Yi&~
zxL+A|Re_9T%=CcF55$`8YxM~lD+bW=9QOc&z_lli?bz;owLOk_KV_ftC}jgB>)M`u
zaDA{KlLX;ya8uQ{Y$s_RSP$FHe}wUG|C<T^J>%bVmg3)anjMP&7m0sUuVE8|!z_XW
zU%Te|b#G#DfVpmIqLNuIO%p{__^6@{W>BKYI!fmGq@(0@a4GR;VoS-+CkLgnF*#^g
zt1vcI7|(iF1y#|rBB;z+y((UcTix_5H7bd(ni;P!HC{cP8_kFRJO9O;+ZY4iEB?Kf
zdS8lvx80`re+kw{=r@~xcfYk?Jlk$HRIN@m|E*5jb3L5@w%7Jvc>c%JERt-q+;jCm
zD6e1b<ypFS9r3+niYb{Juc7f%0~im*AmTT8oRP!E!LN`^8xbEcE*oMv%$W3{r38)F
z>Id(lknxQ9aPr|2P8eq?X0NmSI*!7s4kn%!{Y__nA2ug^6uSKQ4gh@En7UEstxAk2
zqtbB0*>5ymZNJL7MM4EJ+#>sGMbGh^hSO;{2R?+OfMfE9jE|E>76u%KIS*A@*P<8V
zt?(gbV=-ay_xV4zZR_$Z7$-5)T6aNwi@VyLfQ6Q_nif3z<M`;$v%gM1Tr}RF{_gu)
z<XlUf;wXQ%UE6^}!208p<BzyAZKLBY>UdA<oa^x^8#=%Ec>3YQhs$IuC2vJZ_X>?Q
z?T)RsOFRs8JlquVbKm|2pT%#bQ_rca>C@9H-nt$=r?S$YvP0#3szWk<smWZJODyYl
za|=)Gc<8@OtX>`P(|i2vX*0$!2ysD9`xrG6Ln_;J_vjDUFvw$>Sv~aT-Y^~v!@x3Z
ze}aLhOsrSjRSwpC149Oexb)|$P*=NOR4S58#qsAlzLX(yIIr+1hi8vc)Q+-2bQ8(l
z+RTb#8nJjVvv*&)tDW5Fs$^qqJ4l0ZR)=rvI2;~=YH!i);zV@_&O)hbOR~=rD=cfF
zCKmh#GgOkVshig-V#9|wnFVhiom><jK9<|Da(%Z3uTV8ltVJIyKXoTPW1%i(GEaHY
zjrz=kpXVIKi6|yP)o#A(>Q$yp783m`$62$+{3mC#UTDwO=aL2g*`-@rC|7<zW)l`?
z{Yj8U!8P8dVdEWq7A&QSjHMIYY5Md3ohY5K&gM_rZyr@{Qh_56tEg6!<r}|l1T%YI
z?FX}-`Va@>>p=h_8u+k_e|N3NeB)I~%&OVypdqunNRH+N77~){HSzji1CbiA9beEI
zURgZ+L|GK8LBI#bm$bF$I5t_w*r-*jdZGDjg4?IaIbK)PfYs*5QY}zxW%M_-Q)X;z
zs|)btMs>_(I^CjUI(aKw%e(0|y56ep`D)Owr-#FU33G=a2!bF8f*=TjAP9mW2!bF8
of*=TjAP9mW2!bF8f*=TjAP9mW2!bF8f*|Jj55mk@_yAA<09@q0#Q*>R

diff --git a/packages/checkpoint_powersupply b/packages/checkpoint_powersupply
index 992276a..8787d7a 100644
--- a/packages/checkpoint_powersupply
+++ b/packages/checkpoint_powersupply
@@ -1,10 +1,16 @@
-{'author': u'Th.L. (thl-cmk[at]outlook[dot]com)',
- 'description': u'Monitor Check Point appliance power supply status\n\n- critical if state not "up".\n- no perfdata\n- no wato\n',
+{'author': 'Th.L. (thl-cmk[at]outlook[dot]com)',
+ 'description': 'Monitor Check Point appliance power supply status\n'
+                '\n'
+                'critical if state not "Up"/"Present", can be configured via '
+                'WATO\n',
  'download_url': 'https://thl-cmk.hopto.org',
- 'files': {'checks': ['checkpoint_powersupply']},
+ 'files': {'agent_based': ['checkpoint_powersupply.py'],
+           'checkman': ['checkpoint_powersupply'],
+           'web': ['plugins/wato/checkpoint_powersupply.py']},
  'name': 'checkpoint_powersupply',
- 'num_files': 1,
- 'title': u'Check Point power supply status',
- 'version': '20180731.v0.0.1',
- 'version.min_required': '1.2.8b8',
- 'version.packaged': '1.4.0p38'}
\ No newline at end of file
+ 'num_files': 3,
+ 'title': 'Check Point power supply status',
+ 'version': '20210810.v0.0.2',
+ 'version.min_required': '2.0.0',
+ 'version.packaged': '2021.07.14',
+ 'version.usable_until': None}
\ No newline at end of file
diff --git a/web/plugins/wato/checkpoint_powersupply.py b/web/plugins/wato/checkpoint_powersupply.py
new file mode 100644
index 0000000..5f5ee3c
--- /dev/null
+++ b/web/plugins/wato/checkpoint_powersupply.py
@@ -0,0 +1,41 @@
+#!/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
+#
+from cmk.gui.i18n import _
+from cmk.gui.valuespec import (
+    Dictionary,
+    TextAscii,
+    MonitoringState,
+)
+
+from cmk.gui.plugins.wato import (
+    CheckParameterRulespecWithItem,
+    rulespec_registry,
+    RulespecGroupCheckParametersNetworking,
+)
+
+
+def _parameter_valuespec_checkpoint_powersupply():
+    return Dictionary(elements=[
+        ('ps_not_up',
+         MonitoringState(
+             default_value=2,
+             title=_('State if power supply is not "UP" or "Present".'),
+         )),
+    ])
+
+
+rulespec_registry.register(
+    CheckParameterRulespecWithItem(
+        check_group_name='checkpoint_powersupply',
+        group=RulespecGroupCheckParametersNetworking,
+        item_spec=lambda: TextAscii(title=_('Power Supply index'), ),
+        match_type='dict',
+        parameter_valuespec=_parameter_valuespec_checkpoint_powersupply,
+        title=lambda: _('Check Point Power Supply'),
+    ))
-- 
GitLab