From 827e3186cce9ba0122e00d67c11d5772b3a74f39 Mon Sep 17 00:00:00 2001 From: "th.l" <thl-cmk@outlook.com> Date: Mon, 29 May 2023 16:35:05 +0200 Subject: [PATCH] update project --- agent_based/checkpoint_threat_emulation.py | 21 +-- ...kpoint_threat_emulation-0.2.0-20230529.mkp | Bin 0 -> 4991 bytes checkpoint_threat_emulation.mkp | Bin 4998 -> 4991 bytes gui/metrics/checkpoint_threat_emulation.py | 163 ++++++++++++++++++ gui/wato/checkpoint_threat_emulation.py | 60 +++++++ packages/checkpoint_threat_emulation | 11 +- 6 files changed, 239 insertions(+), 16 deletions(-) create mode 100644 checkpoint_threat_emulation-0.2.0-20230529.mkp create mode 100644 gui/metrics/checkpoint_threat_emulation.py create mode 100644 gui/wato/checkpoint_threat_emulation.py diff --git a/agent_based/checkpoint_threat_emulation.py b/agent_based/checkpoint_threat_emulation.py index d17fff2..165816b 100644 --- a/agent_based/checkpoint_threat_emulation.py +++ b/agent_based/checkpoint_threat_emulation.py @@ -17,6 +17,7 @@ # 2021-08-27: rewritten for CMK 2.0 # 2022-09-08: fixed check_default_parameters # fixed levels for remaining quota in cloud, use lower instead of upper +# 2023-05-29: moved guis files to ~/local/lib/check_mk/gui/plugins/... # # snmpwalk sample @@ -25,11 +26,11 @@ # # [ # [ -# [u'0%', u'0', u'up-to-date', u'Gateway is up to date.', u'1548979200', u'100000', u'100000', u'valid', u'ok', -# u'Quota subscription is valid', u'990002053', u'0', u'ok', u''] +# ['0%', '0', 'up-to-date', 'Gateway is up to date.', '1548979200', '100000', '100000', 'valid', 'ok', +# 'Quota subscription is valid', '990002053', '0', 'ok', ''] # ], # [ -# [u'0', u'0', u'0', u'0', u'0', u'0', u'0', u'0'] +# ['0', '0', '0', '0', '0', '0', '0', '0'] # ] # ] # @@ -269,13 +270,13 @@ register.check_plugin( # # # # sample te_analysis # # -# # [[u'1', u'Image', u'1afbde2e-d593-45a8-a686-6cbd42f37823', u'', u'0', u'0', u'0', u'0', u'0', u'0', u'0'], -# # [u'2', u'Image', u'1b0c5014-714d-47f3-9b10-0b7ee386e745', u'', u'0', u'0', u'0', u'0', u'0', u'0', u'0'], -# # [u'3', u'Image', u'5e5de275-a103-4f67-b55b-47532918fa59', u'Win7,Office 2013,Adobe 11', u'0', u'0', u'0', u'0', u'0', u'0', u'0'], -# # [u'4', u'Image', u'e50e99f3-5963-4573-af9e-e3f4750b55e2', u'WinXP,Office 2003/7,Adobe 9', u'0', u'0', u'0', u'0', u'0', u'0', u'0'], -# # [u'5', u'Detection Rules', u'5e5de275-a103-4f67-b55b-47532918fa59', u'Win7,Office 2013,Adobe 11', u'56431', u'46960', u'Thu Mar 15 08:39:31 2018', u'0', u'0', u'0', u'0'], -# # [u'6', u'Detection Rules', u'e50e99f3-5963-4573-af9e-e3f4750b55e2', u'WinXP,Office 2003/7,Adobe 9', u'56431', u'52602', u'Thu Mar 15 08:39:26 2018', u'0', u'0', u'0', u'0'], -# # [u'7', u'Static Analysis Rules', u'496149D5-0689-472B-8F50-21DD409F0EC6', u'Static Analysis Detection Rules', u'53030', u'25049', u'Thu Mar 15 08:39:24 2018', u'0', u'0', u'0', u'0']] +# # [['1', 'Image', '1afbde2e-d593-45a8-a686-6cbd42f37823', '', '0', '0', '0', '0', '0', '0', '0'], +# # ['2', 'Image', '1b0c5014-714d-47f3-9b10-0b7ee386e745', '', '0', '0', '0', '0', '0', '0', '0'], +# # ['3', 'Image', '5e5de275-a103-4f67-b55b-47532918fa59', 'Win7,Office 2013,Adobe 11', '0', '0', '0', '0', '0', '0', '0'], +# # ['4', 'Image', 'e50e99f3-5963-4573-af9e-e3f4750b55e2', 'WinXP,Office 2003/7,Adobe 9', '0', '0', '0', '0', '0', '0', '0'], +# # ['5', 'Detection Rules', '5e5de275-a103-4f67-b55b-47532918fa59', 'Win7,Office 2013,Adobe 11', '56431', '46960', 'Thu Mar 15 08:39:31 2018', '0', '0', '0', '0'], +# # ['6', 'Detection Rules', 'e50e99f3-5963-4573-af9e-e3f4750b55e2', 'WinXP,Office 2003/7,Adobe 9', '56431', '52602', 'Thu Mar 15 08:39:26 2018', '0', '0', '0', '0'], +# # ['7', 'Static Analysis Rules', '496149D5-0689-472B-8F50-21DD409F0EC6', 'Static Analysis Detection Rules', '53030', '25049', 'Thu Mar 15 08:39:24 2018', '0', '0', '0', '0']] # # # # eher fuer inventory (?) # # diff --git a/checkpoint_threat_emulation-0.2.0-20230529.mkp b/checkpoint_threat_emulation-0.2.0-20230529.mkp new file mode 100644 index 0000000000000000000000000000000000000000..3b8da48a1fa7ed59c7ae9dcafd7ff15ad9b1617b GIT binary patch literal 4991 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 VhWNiGaZ&`X2DWB8$^;6^e*jh;fv5lg literal 0 HcmV?d00001 diff --git a/checkpoint_threat_emulation.mkp b/checkpoint_threat_emulation.mkp index 14504dfd7880a29ca5139855f5b8b4828b4ce668..3b8da48a1fa7ed59c7ae9dcafd7ff15ad9b1617b 100644 GIT binary patch literal 4991 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 VhWNiGaZ&`X2DWB8$^;6^e*jh;fv5lg literal 4998 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 diff --git a/gui/metrics/checkpoint_threat_emulation.py b/gui/metrics/checkpoint_threat_emulation.py new file mode 100644 index 0000000..81d8fa8 --- /dev/null +++ b/gui/metrics/checkpoint_threat_emulation.py @@ -0,0 +1,163 @@ +#!/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-03-19 +# +# Check Point Threat Emulation metrics plugin +# checkpoint_threat_emulation +# + +from cmk.gui.i18n import _ + +from cmk.gui.plugins.metrics.utils import ( + metric_info, + graph_info, + perfometer_info, +) + +metric_info['checkpoint_threat_emulation_remaining_quota_on_cloud'] = { + 'title': _('Remaining quota on cloud'), + 'unit': 'count', + 'color': '11/a', +} +metric_info['checkpoint_threat_emulation_monthly_quota_on_cloud_used'] = { + 'title': _('Used monthly quota on cloud'), + 'unit': '%', + 'color': '12/a', +} +metric_info['checkpoint_threat_emulation_current_files_waiting_for_emulation'] = { + 'title': _('Files waiting for emulation'), + 'unit': 'count', + 'color': '13/a', +} + +metric_info['checkpoint_threat_emulation_scanned_files_current'] = { + 'title': _('Scanned files (current)'), + 'unit': 'count', + 'color': '14/a', +} + +metric_info['checkpoint_threat_emulation_malicious_files_detected_current'] = { + 'title': _('Malicious files detected (current)'), + 'unit': 'count', + 'color': '15/a', +} + +metric_info['checkpoint_threat_emulation_files_scanned_by_threat_cloud_current'] = { + 'title': _('Files scanned by threat cloud (current)'), + 'unit': 'count', + 'color': '16/a', +} + +metric_info['checkpoint_threat_emulation_malicious_files_detected_by_threat_cloud_current'] = { + 'title': _('Malicious files detected by threat cloud (current)'), + 'unit': 'count', + 'color': '21/a', +} + +metric_info['checkpoint_threat_emulation_average_process_time_current'] = { + 'title': _('Average process time (current)'), + 'unit': 's', + 'color': '22/a', +} + +metric_info['checkpoint_threat_emulation_average_emulated_file_size_current'] = { + 'title': _('Average emulated file size (current)'), + 'unit': 'bytes', + 'color': '23/a', +} + +metric_info['checkpoint_threat_emulation_average_queue_size_current'] = { + 'title': _('Average queue size (current)'), + 'unit': 'count', + 'color': '24/a', +} + +metric_info['checkpoint_threat_emulation_peak_queue_size_current'] = { + 'title': _('Peak queue size (current)'), + 'unit': 'count', + 'color': '25/a', +} + +graph_info['checkpoint_threat_emulation_remaining_quota_on_cloud'] = { + 'title': _('Check Point Threat Emulation remaining quota on cloud'), + 'metrics': [ + ('checkpoint_threat_emulation_remaining_quota_on_cloud', 'line'), + ], + 'scalars': [ + ('checkpoint_threat_emulation_remaining_quota_on_cloud:crit'), + ('checkpoint_threat_emulation_remaining_quota_on_cloud:warn'), + ], +} +graph_info['checkpoint_threat_emulation_monthly_quota_on_cloud_used'] = { + 'title': _('Check Point Threat Emulation monthly used quota on cloud used'), + 'metrics': [ + ('checkpoint_threat_emulation_monthly_quota_on_cloud_used', 'line'), + ], + 'scalars': [ + ('checkpoint_threat_emulation_monthly_quota_on_cloud_used:crit'), + ('checkpoint_threat_emulation_monthly_quota_on_cloud_used:warn'), + ], +} +graph_info['checkpoint_threat_emulation_current_files_waiting_for_emulation'] = { + 'title': _('Check Point Threat Emulation files waiting for emulation'), + 'metrics': [ + ('checkpoint_threat_emulation_current_files_waiting_for_emulation', 'line'), + ], + 'scalars': [ + ('checkpoint_threat_emulation_current_files_waiting_for_emulation:crit'), + ('checkpoint_threat_emulation_current_files_waiting_for_emulation:warn'), + ], +} +graph_info['checkpoint_threat_emulation_scanned_files_current'] = { + 'title': _('Check Point Threat Emulation scanned files'), + 'metrics': [ + ('checkpoint_threat_emulation_scanned_files_current', 'line'), + ], +} +graph_info['checkpoint_threat_emulation_malicious_files_detected_current'] = { + 'title': _('Check Point Threat Emulation malicious files detected'), + 'metrics': [ + ('checkpoint_threat_emulation_malicious_files_detected_current', 'line'), + ], +} +graph_info['checkpoint_threat_emulation_files_scanned_by_threat_cloud_current'] = { + 'title': _('Check Point Threat Emulation files scanned by Threat Cloud'), + 'metrics': [ + ('checkpoint_threat_emulation_files_scanned_by_threat_cloud_current', 'line'), + ], +} +graph_info['checkpoint_threat_emulation_malicious_files_detected_by_threat_cloud_current'] = { + 'title': _('Check Point Threat Emulation malicious files detected by Threat Cloud'), + 'metrics': [ + ('checkpoint_threat_emulation_malicious_files_detected_by_threat_cloud_current', 'line'), + ], +} +graph_info['checkpoint_threat_emulation_average_process_time_current'] = { + 'title': _('Check Point Threat Emulation average process time'), + 'metrics': [ + ('checkpoint_threat_emulation_average_process_time_current', 'line'), + ], +} +graph_info['checkpoint_threat_emulation_average_emulated_file_size_current'] = { + 'title': _('Check Point Threat Emulation average emulated file size'), + 'metrics': [ + ('checkpoint_threat_emulation_average_emulated_file_size_current', 'line'), + ], +} +graph_info['checkpoint_threat_emulation_average_queue_size_current'] = { + 'title': _('Check Point Threat Emulation average queue size'), + 'metrics': [ + ('checkpoint_threat_emulation_average_queue_size_current', 'line'), + ], +} +graph_info['checkpoint_threat_emulation_peak_queue_size_current'] = { + 'title': _('Check Point Threat Emulation peak queue size'), + 'metrics': [ + ('checkpoint_threat_emulation_peak_queue_size_current', 'line'), + ], +} diff --git a/gui/wato/checkpoint_threat_emulation.py b/gui/wato/checkpoint_threat_emulation.py new file mode 100644 index 0000000..9d5a3d7 --- /dev/null +++ b/gui/wato/checkpoint_threat_emulation.py @@ -0,0 +1,60 @@ +#!/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 +# +# 2022-11-30: fixed CheckParameterRulespecWithoutItem (from CheckParameterRulespecWithItem)' + +from cmk.gui.i18n import _ +from cmk.gui.valuespec import ( + Dictionary, + Tuple, + Integer, +) + +from cmk.gui.plugins.wato.utils import ( + CheckParameterRulespecWithoutItem, + rulespec_registry, + RulespecGroupCheckParametersNetworking, +) + + +def _parameter_valuespec_checkpoint_threat_emulation(): + return Dictionary( + elements=[ + ('used_monthly_quota_levels', + Tuple( + title=_('Levels for used monthly quota on cloud'), + elements=[ + Integer(title=_('Warning at'), default_value=90, unit=_('%')), + Integer(title=_('Critical at'), default_value=95, unit=_('%')), + ])), + ('remaining_quota_levels', + Tuple( + title=_('Levels for remaining quota on cloud'), + elements=[ + Integer(title=_('Warning at'), default_value=10000, unit=_('Files')), + Integer(title=_('Critical at'), default_value=5000, unit=_('Files')), + ])), + ('files_waiting_levels', + Tuple( + title=_('Levels for files waiting for emulation'), + elements=[ + Integer(title=_('Warning at'), default_value=5, unit=_('Files')), + Integer(title=_('Critical at'), default_value=10, unit=_('Files')), + ])), + ], + ) + + +rulespec_registry.register( + CheckParameterRulespecWithoutItem( + check_group_name='checkpoint_threat_emulation', + group=RulespecGroupCheckParametersNetworking, + match_type='dict', + parameter_valuespec=_parameter_valuespec_checkpoint_threat_emulation, + title=lambda: _('Check Point Threat Emulation status'), + )) diff --git a/packages/checkpoint_threat_emulation b/packages/checkpoint_threat_emulation index fd231cb..52eb521 100644 --- a/packages/checkpoint_threat_emulation +++ b/packages/checkpoint_threat_emulation @@ -10,12 +10,11 @@ 'subscription\n', 'download_url': 'https://thl-cmk.hopto.org', 'files': {'agent_based': ['checkpoint_threat_emulation.py'], - 'web': ['plugins/metrics/checkpoint_threat_emulation.py', - 'plugins/wato/checkpoint_threat_emulation.py']}, + 'gui': ['metrics/checkpoint_threat_emulation.py', + 'wato/checkpoint_threat_emulation.py']}, 'name': 'checkpoint_threat_emulation', - 'num_files': 3, 'title': 'Check Point Threat Emulation', - 'version': '20221130.v.0.0.3c', - 'version.min_required': '2.0.0', - 'version.packaged': '2021.09.20', + 'version': '0.2.0-20230529', + 'version.min_required': '2.1.0b1', + 'version.packaged': '2.1.0p21', 'version.usable_until': None} \ No newline at end of file -- GitLab