From 8e653580a16a1115adb18824b93b3a65297ae96b Mon Sep 17 00:00:00 2001
From: "Th.L" <thl-cmk@outlook.com>
Date: Thu, 18 Mar 2021 10:12:58 +0100
Subject: [PATCH] update project

---
 agent_based/inv_checkpoint_updates.py       | 156 ++++++++++++++++++++
 inv_checkpoint_updates.mkp                  | Bin 52 -> 2696 bytes
 packages/inv_checkpoint_updates             |   4 +-
 web/plugins/views/inv_checkpoint_updates.py |  32 ++++
 4 files changed, 190 insertions(+), 2 deletions(-)
 create mode 100644 agent_based/inv_checkpoint_updates.py
 create mode 100644 web/plugins/views/inv_checkpoint_updates.py

diff --git a/agent_based/inv_checkpoint_updates.py b/agent_based/inv_checkpoint_updates.py
new file mode 100644
index 0000000..2774caa
--- /dev/null
+++ b/agent_based/inv_checkpoint_updates.py
@@ -0,0 +1,156 @@
+#!/usr/bin/env python3
+# -*- coding: utf-8 -*-
+#
+# Author: thl-cmk[at]outlook[dot]com / thl-cmk.hopto.org
+#
+# Check Point updates inventory
+#
+# 2016-06-29 : inventory Check Point Appliance
+# 2018-03-05 : added Patches, Deployment Agent Build
+# 2018-03-07 : added Licenses
+# 2020-06-01 : cleanup, prepared for cmk1.7x, rename from inv_checkpoint_svn to checkpoint_inv_base
+# 2020-11-27 : rewrite for CMK check API 1.0 (CMK 2.0)
+# 2020-11-28 : added available updates
+# 2021-02-08 : transfered license/support info to seperate plugin
+#
+# sample string_table
+# [
+#  [
+#   ['Check_Point_SmartConsole_R80_40_jumbo_HF_B411_Win.tgz', 'HFA', 'Installed'],
+#   ['Check_Point_R80_40_JUMBO_HF_Bundle_T78_sk165456_FULL.tgz', 'Wrapper', 'Installed'],
+#   ['Check_Point_CPinfo_Bundle_R80_40_T53.tgz', 'HFA', 'Installed']
+#  ], 
+#  [
+#   ['Check_Point_SmartConsole_R80_40_jumbo_HF_B411_Win.tgz', 'R80.40 SmartConsole Build 411', 'capability', 'Installed', '2020-09-30T00:00:00Z', 'Recommended', '2020-10-12T15:19:51Z'],
+#   ['Check_Point_R80_40_JUMBO_HF_Bundle_T78_sk165456_FULL.tgz', 'R80.40 Jumbo Hotfix Accumulator General Availability (Take 78)', 'jumbo', 'Installed', '2020-08-24T00:00:00Z', 'Recommended', '2020-10-12T15:36:58Z'],
+#   ['Check_Point_CPinfo_Bundle_R80_40_T53.tgz', 'Check Point CPinfo build 202 for R80.40', 'capability', 'Installed', '2020-01-26T00:00:00Z', 'Recommended', '2020-10-12T15:19:16Z'],
+#   ['Check_Point_SmartConsole_R80_40_jumbo_HF_B410_Win.tgz', 'Check Point SmartConsole R80.40 Jumbo Hotfix B410', 'capability', 'Available for Install', '2020-08-24T00:00:00Z', 'Not Recommended', '2020-09-08T16:33:07Z'],
+#   ['Check_Point_R80_40_JUMBO_HF_Bundle_T77_sk165456_FULL.tgz', 'Check_Point_R80_40_JUMBO_HF_Bundle_T77_sk165456_FULL.tgz', 'jumbo', 'Installed as part of', '1970-01-01T00:00:00Z', 'Not Recommended', '2020-09-07T19:06:50Z'],
+#   ['Check_Point_R81_T392_Fresh_Install_and_Upgrade.tgz', 'R81 Gaia Fresh Install and upgrade', 'major', 'Available for Download', '2020-10-22T00:00:00Z', 'Not Recommended', '1970-01-01T00:00:00Z'],
+#   ['Blink_image_1.1_Check_Point_R81_T392_SecurityManagement.tgz', '<b>[Latest] R81 Security Management for appliances </b>', 'major', 'Available for Download', '2020-10-22T00:00:00Z', 'Not Recommended', '1970-01-01T00:00:00Z'],
+#   ['Blink_image_1.1_Check_Point_R80.40_T294_JHF_T78_SecurityManagement.tgz', '<b>[Latest] R80.40 Security Management + JHF T78 for Appliances and Open Servers</b>', 'major', 'Available for Download', '2020-08-24T00:00:00Z', 'Not Recommended', '1970-01-01T00:00:00Z'],
+#   ['Check_Point_R80.40_T294_Fresh_Install_and_Upgrade.tgz', 'Check Point R80.40 Gaia Fresh Install and upgrade', 'major', 'Available for Download', '2020-01-27T00:00:00Z', 'Not Recommended', '1970-01-01T00:00:00Z']
+#  ], 
+# ]
+#
+
+from typing import List, NamedTuple
+
+from .agent_based_api.v1.type_defs import (
+    StringTable,
+    InventoryResult,
+)
+from .agent_based_api.v1 import (
+    register,
+    SNMPTree,
+    TableRow,
+    startswith,
+    all_of,
+    any_of,
+    equals,
+)
+
+
+class CheckpointUpdatesRecommended(NamedTuple):
+    name: str
+    type: str
+    status: list
+
+
+class CheckpointUpdatesAvailable(NamedTuple):
+    filename: str
+    description: str
+    type: str
+    status: str
+    availablesince: str
+    recommended: str
+    installedat: str
+
+
+class CheckpointUpdates(NamedTuple):
+    updatesrecommended: list
+    updatesavailable: list
+
+
+def parse_checkpoint_updates(string_table: List[StringTable]) -> CheckpointUpdates:
+    section = CheckpointUpdates
+    section.updatesrecommended = list(string_table[0])
+    section.updatesavailable = list(string_table[1])
+    return section
+
+
+def inventory_checkpoint_updates(section: CheckpointUpdates) -> InventoryResult:
+    path = ['software', 'check_point', 'updates']
+
+    for update in section.updatesrecommended:
+        update = CheckpointUpdatesRecommended(*update)
+        yield TableRow(
+            path=path,
+            key_columns={'file_name': update.name},
+            inventory_columns={
+                'type': update.type,
+                'status': update.status,
+                'recommended': 'Recommended',
+            },
+        )
+
+    for update in section.updatesavailable:
+        update = CheckpointUpdatesAvailable(*update)
+
+        if not 'installed' in update.status.lower():
+            installedat = 'N/A'
+        else:
+            installedat = update.installedat.replace('T', ' ').replace('Z', '')
+
+        yield TableRow(
+            path=path,
+            key_columns={'file_name': update.filename},
+            inventory_columns={
+                'description': update.description,
+                'type': update.type,
+                'status': update.status,
+                'recommended': update.recommended,
+                'available_since': update.availablesince[:10],
+                'installed_at': installedat,
+            },
+        )
+
+
+register.snmp_section(
+    name='inv_checkpoint_updates',
+    parse_function=parse_checkpoint_updates,
+    fetch=[
+        SNMPTree(
+            base='.1.3.6.1.4.1.2620.1.6.20.8.1',  # CHECKPOINT-MIB::updatesRecommendedEntry
+            oids=[
+                '2',  # updatesRecommendedName
+                '3',  # updatesRecommendedType
+                '4',  # updatesRecommendedStatus
+            ]
+        ),
+        SNMPTree(
+            base='.1.3.6.1.4.1.2620.1.6.20.10.1',  # CHECKPOINT-MIB::availableUpdates
+            oids=[
+                '2',  # filename
+                '3',  # description
+                '4',  # type
+                '5',  # status
+                '6',  # available_since
+                '7',  # recommended
+                '8',  # installed_at
+            ]
+        ),
+    ],
+    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.inventory_plugin(
+    name='inv_checkpoint_updates',
+    inventory_function=inventory_checkpoint_updates,
+)
diff --git a/inv_checkpoint_updates.mkp b/inv_checkpoint_updates.mkp
index ac8b39ac43fa359887a463409326ed94445b7157..bdb077da3d2985b0239490bcd81942fb06dc9afd 100644
GIT binary patch
delta 2677
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
S?Z_?`8=t-9dA2Avw*LYHhg97F

delta 12
TcmeAWHDQ(S=HSSf$f^$j5-|e4

diff --git a/packages/inv_checkpoint_updates b/packages/inv_checkpoint_updates
index bf1f0c0..469dd9e 100644
--- a/packages/inv_checkpoint_updates
+++ b/packages/inv_checkpoint_updates
@@ -4,8 +4,8 @@
                 '\n'
                 '- 2021-02-08: initial release\n',
  'download_url': 'https://thl-cmk.hopto.org',
- 'files': {'agent_based': ['checkpoint_inv_updates.py'],
-           'web': ['plugins/views/checkpoint_updates.py']},
+ 'files': {'agent_based': ['inv_checkpoint_updates.py'],
+           'web': ['plugins/views/inv_checkpoint_updates.py']},
  'name': 'inv_checkpoint_updates',
  'num_files': 2,
  'title': 'Check Point appliance avilable updates inventory plugin',
diff --git a/web/plugins/views/inv_checkpoint_updates.py b/web/plugins/views/inv_checkpoint_updates.py
new file mode 100644
index 0000000..8e5eb6f
--- /dev/null
+++ b/web/plugins/views/inv_checkpoint_updates.py
@@ -0,0 +1,32 @@
+#!/usr/bin/env python3
+# -*- coding: utf-8 -*-
+
+import cmk.gui.utils
+from cmk.gui.plugins.views import (
+    inventory_displayhints,)
+from cmk.gui.i18n import _
+
+inventory_displayhints.update({
+    '.software.check_point.updates:': {
+        'title': _('Updates'),
+        'keyorder': [
+            'file_name',
+            'type',
+            'status',
+            'recommended',
+            'available_since',
+            'installed_at',
+            'description'
+            ],
+        'view': 'invcheckpointupdates_of_host',
+        },
+    })
+
+from cmk.gui.plugins.views.inventory import declare_invtable_view
+
+declare_invtable_view(
+    'invcheckpointupdates',
+    '.software.check_point.updates:',
+    _('Check Point updates'),
+    _('Check Point updates'),
+)
-- 
GitLab