From 1823c234739adcf5d1b4af1df1478e881e68fe76 Mon Sep 17 00:00:00 2001 From: "th.l" <thl-cmk@outlook.com> Date: Wed, 7 Jun 2023 18:40:33 +0200 Subject: [PATCH] update project --- cisco_flash-0.3.0-20230607.mkp | Bin 0 -> 6893 bytes cisco_flash.mkp | Bin 8144 -> 6893 bytes gui/metrics/cisco_flash.py | 86 ++++++++++++++++++++++ gui/views/inv_cisco_flash.py | 72 ++++++++++++++++++ gui/wato/cisco_flash.py | 56 ++++++++++++++ gui/wato/inv_cisco_flash.py | 130 +++++++++++++++++++++++++++++++++ packages/cisco_flash | 16 ++-- 7 files changed, 351 insertions(+), 9 deletions(-) create mode 100644 cisco_flash-0.3.0-20230607.mkp create mode 100644 gui/metrics/cisco_flash.py create mode 100644 gui/views/inv_cisco_flash.py create mode 100644 gui/wato/cisco_flash.py create mode 100644 gui/wato/inv_cisco_flash.py diff --git a/cisco_flash-0.3.0-20230607.mkp b/cisco_flash-0.3.0-20230607.mkp new file mode 100644 index 0000000000000000000000000000000000000000..d842984de3d12e8f7651a36e5955affd846147c2 GIT binary patch literal 6893 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 literal 0 HcmV?d00001 diff --git a/cisco_flash.mkp b/cisco_flash.mkp index c58ccffc851df84dee657aa49cac59cfe71066bb..d842984de3d12e8f7651a36e5955affd846147c2 100644 GIT binary patch literal 6893 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 literal 8144 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 diff --git a/gui/metrics/cisco_flash.py b/gui/metrics/cisco_flash.py new file mode 100644 index 0000000..d56c94d --- /dev/null +++ b/gui/metrics/cisco_flash.py @@ -0,0 +1,86 @@ +#!/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 : 2019-10-28 +# +# Cisco flash metrics plugin +# +# change log +# 2019-10-28: initial release +# 2021-07-31: rewritten for CMK 2.0 +# + +from cmk.gui.i18n import _ + +from cmk.gui.plugins.metrics.utils import ( + metric_info, + graph_info, + perfometer_info + +) + +metric_info['cisco_flash_partusedspace'] = { + 'title': _('Sapce used'), + 'unit': 'bytes', + 'color': '36/a', +} + +metric_info['cisco_flash_percent_used'] = { + 'title': _('Percent used'), + 'unit': '%', + 'color': '26/a', +} + +metric_info['cisco_flash_partfilecount'] = { + 'title': _('# of files'), + 'unit': 'count', + 'color': '21/a', +} + +graph_info['cisco_flash_space_used'] = { + 'title': _('Space used'), + 'metrics': [ + ('cisco_flash_partusedspace', 'area'), + ], + 'scalars': [ + ('cisco_flash_partusedspace:crit', _('crit')), + ('cisco_flash_partusedspace:warn', _('warn')), + ], + "range": (0, "cisco_flash_partusedspace:max"), +} + +graph_info['cisco_flash_percent_used'] = { + 'title': _('Percent used'), + 'metrics': [ + ('cisco_flash_percent_used', 'area'), + ], + 'scalars': [ + ('cisco_flash_percent_used:crit', _('crit')), + ('cisco_flash_percent_used:warn', _('warn')), + ], + "range": (0, 100), +} + +graph_info['cisco_flash_files_on_partition'] = { + 'title': _('# of files on partition'), + 'metrics': [ + ('cisco_flash_partfilecount', 'area'), + ], +} + +perfometer_info.append(('stacked', [ + { + 'type': 'linear', + 'segments': ['cisco_flash_percent_used'], + 'total': 100, + }, + { + 'type': 'linear', + 'segments': ['cisco_flash_partfilecount'], + 'total': 100000, + } +])) diff --git a/gui/views/inv_cisco_flash.py b/gui/views/inv_cisco_flash.py new file mode 100644 index 0000000..fad000b --- /dev/null +++ b/gui/views/inv_cisco_flash.py @@ -0,0 +1,72 @@ +#!/usr/bin/env python3 +# -*- coding: utf-8 -*- + + +from cmk.gui.plugins.views.utils import ( + inventory_displayhints, +) +from cmk.gui.i18n import _ +from cmk.gui.plugins.views.inventory import declare_invtable_view + +inventory_displayhints.update({ + '.hardware.components.flash.devices:': { + 'title': _('Flash devices'), + 'keyorder': ['index', 'name', 'description', 'size', ], + 'view': 'invflashdevices_of_host', + }, + + '.hardware.components.flash.devices:*.index': {'title': _('Index'), }, + '.hardware.components.flash.devices:*.size': {'title': _('Size (MB)'), }, + '.hardware.components.flash.devices:*.minpartitionsize': {'title': _('min. partition size (MB)'), }, + '.hardware.components.flash.devices:*.maxprtitions': {'title': _('max. partitions'), }, + '.hardware.components.flash.devices:*.chipcount': {'title': _('Chip count'), }, + '.hardware.components.flash.devices:*.name': {'title': _('Name'), }, + '.hardware.components.flash.devices:*.description': {'title': _('Description'), }, + '.hardware.components.flash.devices:*.controller': {'title': _('Controller'), }, + '.hardware.components.flash.devices:*.programmingjumper': {'title': _('Programming jumper'), }, + '.hardware.components.flash.devices:*.inittime': {'title': _('Init time'), }, + '.hardware.components.flash.devices:*.removable': {'title': _('Removable'), }, + '.hardware.components.flash.devices:*.physentindex': {'title': _('Phys entity index'), }, + '.hardware.components.flash.devices:*.nameextended': {'title': _('Name extended'), }, + + '.hardware.components.flash.chips:': { + 'title': _('Flash chips'), + 'keyorder': ['flashindex', 'index', 'description', ], + 'view': 'invflashchips_of_host', + }, + + '.hardware.components.flash.chips:*.index': {'title': _('Chip index'), }, + '.hardware.components.flash.chips:*.flashindex': {'title': _('Device index'), }, + '.hardware.components.flash.chips:*.code': {'title': _('Code'), }, + '.hardware.components.flash.chips:*.description': {'title': _('Description'), }, + '.hardware.components.flash.chips:*.writeretries': {'title': _('Write retries'), }, + '.hardware.components.flash.chips:*.eraseretries': {'title': _('Erase retries'), }, + '.hardware.components.flash.chips:*.maxwriteretries': {'title': _('max. write retries'), }, + '.hardware.components.flash.chips:*.maxeraseretries': {'title': _('max. erasure retries'), }, + + '.hardware.components.flash.partitions:': { + 'title': _('Flash partitions'), + 'keyorder': ['flashindex', 'index', 'name', 'size', 'freespace', 'filecount', ], + 'view': 'invflashpartitions_of_host', + }, + + '.hardware.components.flash.partitions:*.index': {'title': _('Partition index'), }, + '.hardware.components.flash.partitions:*.flashindex': {'title': _('Device index'), }, + '.hardware.components.flash.partitions:*.startchip': {'title': _('Start chip'), }, + '.hardware.components.flash.partitions:*.endchip': {'title': _('End chip'), }, + '.hardware.components.flash.partitions:*.size': {'title': _('Size (MB)'), }, + '.hardware.components.flash.partitions:*.freespace': {'title': _('Free space (MB)'), }, + '.hardware.components.flash.partitions:*.filecount': {'title': _('File count'), }, + '.hardware.components.flash.partitions:*.crcsumalgo': {'title': _('Checksumm algorithm'), }, + '.hardware.components.flash.partitions:*.status': {'title': _('Status'), }, + '.hardware.components.flash.partitions:*.upgrademethod': {'title': _('Upgrade method'), }, + '.hardware.components.flash.partitions:*.name': {'title': _('Name'), }, + '.hardware.components.flash.partitions:*.neederasure': {'title': _('Need erasure'), }, + '.hardware.components.flash.partitions:*.filenamelength': {'title': _('File name length'), }, + '.hardware.components.flash.partitions:*.lowspacenotifythreshold': {'title': _('Low space notify threshold (%)'), }, +}) + +declare_invtable_view('invflashdevices', '.hardware.components.flash.devices:', _('Flash devices'), _('Flash devices')) +declare_invtable_view('invflashchips', '.hardware.components.flash.chips:', _('Flash chips'), _('Flash chips')) +declare_invtable_view('invflashpartitions', '.hardware.components.flash.partitions:', _('Flash partitions'), + _('Flash partitions')) diff --git a/gui/wato/cisco_flash.py b/gui/wato/cisco_flash.py new file mode 100644 index 0000000..d34daff --- /dev/null +++ b/gui/wato/cisco_flash.py @@ -0,0 +1,56 @@ +#!/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 : 2019-11-04 +# +# +# Check_MK cisco_flash WATO plugin +# +# 2019-11-04: initial release +# 2021-07-31: rewritten for CMK 2.0 +# +# +from cmk.gui.i18n import _ +from cmk.gui.valuespec import ( + Dictionary, + Integer, + TextAscii, + Tuple, +) + +from cmk.gui.plugins.wato.utils import ( + CheckParameterRulespecWithItem, + rulespec_registry, + RulespecGroupCheckParametersNetworking, +) + + +def _parameter_valuespec_cisco_flash(): + return Dictionary( + elements=[ + ('levels_upper_percent', + Tuple( + title=_('Levels for usage in %'), + elements=[ + Integer(title=_('Warning at'), unit='%', default_value=85, minvalue=0, maxvalue=100), + Integer(title=_('Critical at'), unit='%', default_value=90, minvalue=0, maxvalue=100) + ], + + )), + ], + ) + + +rulespec_registry.register( + CheckParameterRulespecWithItem( + check_group_name='cisco_flash', + group=RulespecGroupCheckParametersNetworking, + item_spec=lambda: TextAscii(title=_('Partition specific configuration'), ), + match_type='dict', + parameter_valuespec=_parameter_valuespec_cisco_flash, + title=lambda: _('Cisco flash'), + )) diff --git a/gui/wato/inv_cisco_flash.py b/gui/wato/inv_cisco_flash.py new file mode 100644 index 0000000..7cf40a5 --- /dev/null +++ b/gui/wato/inv_cisco_flash.py @@ -0,0 +1,130 @@ +#!/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 : 2019-10-28 +# +# Cisco flash metrics plugin +# +# change log +# 2019-10-28: initial release +# 2021-07-31: rewritten for CMK 2.0 + + +from cmk.gui.i18n import _ +from cmk.gui.plugins.wato.utils import ( + HostRulespec, + rulespec_registry, +) +from cmk.gui.valuespec import ( + Dictionary, + FixedValue, + ListChoice, +) + +from cmk.gui.plugins.wato.inventory import ( + RulespecGroupInventory, +) + +_inv_cisco_flash_cflDeviceRemovecolumns = [ + ('minpartitionsize', 'min. partition size (MB)'), + ('maxprtitions', 'max. partitions'), + ('chipcount', 'Chip count'), + ('controller', 'Controller'), + ('programmingjumper', 'Programming jumper'), + ('inittime', 'Init time'), + ('removable', 'Removable'), + ('physentindex', 'Phys entity index'), + ('nameextended', 'Name extended'), +] + +_inv_cisco_flash_cflPartitionRemovecolumns = [ + ('startchip', 'Start chip'), + ('endchip', 'End chip'), + ('crcsumalgo', 'Checksumm algorithm'), + ('status', 'Status'), + ('upgrademethod', 'Upgrade method'), + ('neederasure', 'Need erasure'), + ('filenamelength', 'File name length'), + ('lowspacenotifythreshold', 'Low space notify threshold (%)'), +] + +_inv_cisco_flash_cflChipRemovecolumns = [ + ('code', 'Code'), + ('writeretries', 'Write retries'), + ('eraseretries', 'Erase retries'), + ('maxwriteretries', 'max. write retries'), + ('maxeraseretries', 'max. erasure retries'), +] + + +def _valuespec_inv_cisco_flash(): + return Dictionary( + title=_('Cisco flash inventory'), + elements=[ + ('cflDeviceDisable', + FixedValue( + True, + title=_('disable Flash device inventory'), + )), + ('cflPartitionDisable', + FixedValue( + True, + title=_('disable Flash partition inventory'), + )), + ('cflChipDisable', + FixedValue( + True, + title=_('disable Flash chips inventory'), + )), + ('cflDeviceRemovecolumns', + ListChoice( + title=_('list of columns to remove from flash devices'), + help=_('information to remove from inventory'), + choices=_inv_cisco_flash_cflDeviceRemovecolumns, + default_value=[ + 'chipcount', + 'controller', + 'programmingjumper', + 'inittime', + 'physentindex', + 'nameextended', + ], + )), + ('cflPartitionRemovecolumns', + ListChoice( + title=_('list of columns to remove from flash partitions'), + help=_('information to remove from inventory'), + choices=_inv_cisco_flash_cflPartitionRemovecolumns, + default_value=[ + 'startchip', + 'endchip', + ], + )), + ('cflChipRemovecolumns', + ListChoice( + title=_('list of columns to remove from flash chips'), + help=_('information to remove from inventory'), + choices=_inv_cisco_flash_cflChipRemovecolumns, + default_value=[ + 'code', + 'writeretries', + 'eraseretries', + 'maxwriteretries', + 'maxeraseretries' + ], + )), + ], + ) + + +rulespec_registry.register( + HostRulespec( + group=RulespecGroupInventory, + match_type='dict', + name='inv_parameters:inv_cisco_flash', + valuespec=_valuespec_inv_cisco_flash, + )) diff --git a/packages/cisco_flash b/packages/cisco_flash index c84022b..111fccd 100644 --- a/packages/cisco_flash +++ b/packages/cisco_flash @@ -7,15 +7,13 @@ '- 2021-07-31: rewritten for CMK 2.0\n', 'download_url': 'https://thl-cmk.hopto.org', 'files': {'agent_based': ['cisco_flash.py', 'inv_cisco_flash.py'], - 'checkman': ['cisco_flash'], - 'web': ['plugins/metrics/cisco_flash.py', - 'plugins/views/inv_cisco_flash.py', - 'plugins/wato/cisco_flash.py', - 'plugins/wato/inv_cisco_flash.py']}, + 'gui': ['metrics/cisco_flash.py', + 'views/inv_cisco_flash.py', + 'wato/cisco_flash.py', + 'wato/inv_cisco_flash.py']}, 'name': 'cisco_flash', - 'num_files': 7, 'title': 'Cisco flash plugins', - 'version': '20210731.v.0.3', - 'version.min_required': '2.0.0', - 'version.packaged': '2021.09.20', + 'version': '0.3.0-20230607', + 'version.min_required': '2.1.0b1', + 'version.packaged': '2.1.0p21', 'version.usable_until': None} \ No newline at end of file -- GitLab