diff --git a/hitachi-vsp/hitachivsp-1.0.mkp b/hitachi-vsp/1.6/hitachivsp-1.0.mkp similarity index 100% rename from hitachi-vsp/hitachivsp-1.0.mkp rename to hitachi-vsp/1.6/hitachivsp-1.0.mkp diff --git a/hitachi-vsp/lib/python/cmk/gui/plugins/wato/datasource_programs.py b/hitachi-vsp/1.6/lib/python/cmk/gui/plugins/wato/datasource_programs.py similarity index 100% rename from hitachi-vsp/lib/python/cmk/gui/plugins/wato/datasource_programs.py rename to hitachi-vsp/1.6/lib/python/cmk/gui/plugins/wato/datasource_programs.py diff --git a/hitachi-vsp/share/check_mk/agents/special/agent_hitachivsp b/hitachi-vsp/1.6/share/check_mk/agents/special/agent_hitachivsp similarity index 100% rename from hitachi-vsp/share/check_mk/agents/special/agent_hitachivsp rename to hitachi-vsp/1.6/share/check_mk/agents/special/agent_hitachivsp diff --git a/hitachi-vsp/share/check_mk/checks/agent_hitachivsp b/hitachi-vsp/1.6/share/check_mk/checks/agent_hitachivsp similarity index 100% rename from hitachi-vsp/share/check_mk/checks/agent_hitachivsp rename to hitachi-vsp/1.6/share/check_mk/checks/agent_hitachivsp diff --git a/hitachi-vsp/share/check_mk/checks/hitachivsp_backup_modules b/hitachi-vsp/1.6/share/check_mk/checks/hitachivsp_backup_modules similarity index 100% rename from hitachi-vsp/share/check_mk/checks/hitachivsp_backup_modules rename to hitachi-vsp/1.6/share/check_mk/checks/hitachivsp_backup_modules diff --git a/hitachi-vsp/share/check_mk/checks/hitachivsp_cache_flash_memories b/hitachi-vsp/1.6/share/check_mk/checks/hitachivsp_cache_flash_memories similarity index 100% rename from hitachi-vsp/share/check_mk/checks/hitachivsp_cache_flash_memories rename to hitachi-vsp/1.6/share/check_mk/checks/hitachivsp_cache_flash_memories diff --git a/hitachi-vsp/share/check_mk/checks/hitachivsp_cache_memories b/hitachi-vsp/1.6/share/check_mk/checks/hitachivsp_cache_memories similarity index 100% rename from hitachi-vsp/share/check_mk/checks/hitachivsp_cache_memories rename to hitachi-vsp/1.6/share/check_mk/checks/hitachivsp_cache_memories diff --git a/hitachi-vsp/share/check_mk/checks/hitachivsp_channel_board b/hitachi-vsp/1.6/share/check_mk/checks/hitachivsp_channel_board similarity index 100% rename from hitachi-vsp/share/check_mk/checks/hitachivsp_channel_board rename to hitachi-vsp/1.6/share/check_mk/checks/hitachivsp_channel_board diff --git a/hitachi-vsp/share/check_mk/checks/hitachivsp_clprs b/hitachi-vsp/1.6/share/check_mk/checks/hitachivsp_clprs similarity index 100% rename from hitachi-vsp/share/check_mk/checks/hitachivsp_clprs rename to hitachi-vsp/1.6/share/check_mk/checks/hitachivsp_clprs diff --git a/hitachi-vsp/share/check_mk/checks/hitachivsp_ctls b/hitachi-vsp/1.6/share/check_mk/checks/hitachivsp_ctls similarity index 100% rename from hitachi-vsp/share/check_mk/checks/hitachivsp_ctls rename to hitachi-vsp/1.6/share/check_mk/checks/hitachivsp_ctls diff --git a/hitachi-vsp/share/check_mk/checks/hitachivsp_disk_boards b/hitachi-vsp/1.6/share/check_mk/checks/hitachivsp_disk_boards similarity index 100% rename from hitachi-vsp/share/check_mk/checks/hitachivsp_disk_boards rename to hitachi-vsp/1.6/share/check_mk/checks/hitachivsp_disk_boards diff --git a/hitachi-vsp/share/check_mk/checks/hitachivsp_drive_boxes_dbps b/hitachi-vsp/1.6/share/check_mk/checks/hitachivsp_drive_boxes_dbps similarity index 100% rename from hitachi-vsp/share/check_mk/checks/hitachivsp_drive_boxes_dbps rename to hitachi-vsp/1.6/share/check_mk/checks/hitachivsp_drive_boxes_dbps diff --git a/hitachi-vsp/share/check_mk/checks/hitachivsp_drive_boxes_drives b/hitachi-vsp/1.6/share/check_mk/checks/hitachivsp_drive_boxes_drives similarity index 100% rename from hitachi-vsp/share/check_mk/checks/hitachivsp_drive_boxes_drives rename to hitachi-vsp/1.6/share/check_mk/checks/hitachivsp_drive_boxes_drives diff --git a/hitachi-vsp/share/check_mk/checks/hitachivsp_drive_boxes_enc b/hitachi-vsp/1.6/share/check_mk/checks/hitachivsp_drive_boxes_enc similarity index 100% rename from hitachi-vsp/share/check_mk/checks/hitachivsp_drive_boxes_enc rename to hitachi-vsp/1.6/share/check_mk/checks/hitachivsp_drive_boxes_enc diff --git a/hitachi-vsp/share/check_mk/checks/hitachivsp_info b/hitachi-vsp/1.6/share/check_mk/checks/hitachivsp_info similarity index 100% rename from hitachi-vsp/share/check_mk/checks/hitachivsp_info rename to hitachi-vsp/1.6/share/check_mk/checks/hitachivsp_info diff --git a/hitachi-vsp/share/check_mk/checks/hitachivsp_ldevs b/hitachi-vsp/1.6/share/check_mk/checks/hitachivsp_ldevs similarity index 100% rename from hitachi-vsp/share/check_mk/checks/hitachivsp_ldevs rename to hitachi-vsp/1.6/share/check_mk/checks/hitachivsp_ldevs diff --git a/hitachi-vsp/share/check_mk/checks/hitachivsp_parity_groups b/hitachi-vsp/1.6/share/check_mk/checks/hitachivsp_parity_groups similarity index 100% rename from hitachi-vsp/share/check_mk/checks/hitachivsp_parity_groups rename to hitachi-vsp/1.6/share/check_mk/checks/hitachivsp_parity_groups diff --git a/hitachi-vsp/share/check_mk/checks/hitachivsp_pools b/hitachi-vsp/1.6/share/check_mk/checks/hitachivsp_pools similarity index 100% rename from hitachi-vsp/share/check_mk/checks/hitachivsp_pools rename to hitachi-vsp/1.6/share/check_mk/checks/hitachivsp_pools diff --git a/hitachi-vsp/share/check_mk/checks/hitachivsp_powerConsumption b/hitachi-vsp/1.6/share/check_mk/checks/hitachivsp_powerConsumption similarity index 100% rename from hitachi-vsp/share/check_mk/checks/hitachivsp_powerConsumption rename to hitachi-vsp/1.6/share/check_mk/checks/hitachivsp_powerConsumption diff --git a/hitachi-vsp/share/check_mk/checks/hitachivsp_sfps b/hitachi-vsp/1.6/share/check_mk/checks/hitachivsp_sfps similarity index 100% rename from hitachi-vsp/share/check_mk/checks/hitachivsp_sfps rename to hitachi-vsp/1.6/share/check_mk/checks/hitachivsp_sfps diff --git a/hitachi-vsp/2.3/local/lib/python3/cmk_addons/plugins/hitachivsp/agent_based/hitachivsp_backup_modules.py b/hitachi-vsp/2.3/local/lib/python3/cmk_addons/plugins/hitachivsp/agent_based/hitachivsp_backup_modules.py new file mode 100644 index 0000000..b4b76f6 --- /dev/null +++ b/hitachi-vsp/2.3/local/lib/python3/cmk_addons/plugins/hitachivsp/agent_based/hitachivsp_backup_modules.py @@ -0,0 +1,96 @@ +#!/usr/bin/env python3 +# -*- encoding: utf-8; py-indent-offset: 4 -*- +# +------------------------------------------------------------------+ +# | ____ _ _ __ __ _ __ | +# | / ___| |__ ___ ___| | __ | \/ | |/ / | +# | | | | '_ \ / _ \/ __| |/ / | |\/| | ' / | +# | | |___| | | | __/ (__| < | | | | . \ | +# | \____|_| |_|\___|\___|_|\_\___|_| |_|_|\_\ | +# | | +# | Copyright Mathias Kettner 2020 mk@mathias-kettner.de | +# +------------------------------------------------------------------+ +# +# This file is part of Check_MK. +# The official homepage is at http://mathias-kettner.de/check_mk. +# +# check_mk is free software; you can redistribute it and/or modify it +# under the terms of the GNU General Public License as published by +# the Free Software Foundation in version 2. check_mk is distributed +# in the hope that it will be useful, but WITHOUT ANY WARRANTY; with- +# out even the implied warranty of MERCHANTABILITY or FITNESS FOR A +# PARTICULAR PURPOSE. See the GNU General Public License for more de- +# tails. You should have received a copy of the GNU General Public +# License along with GNU Make; see the file COPYING. If not, write +# to the Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, +# Boston, MA 02110-1301 USA. + +#example output +#<<>> +#location status bat_location bat_status bat_life +#BKMF-10 Normal +#BKMF-11 Normal BAT-B11 Normal 90 +#BKMF-12 Normal BAT-B12 Normal 90 +#BKMF-13 Normal BAT-B13 Normal 90 +#BKMF-20 Normal +#BKMF-21 Normal BAT-B21 Normal 90 +#BKMF-22 Normal BAT-B22 Normal 90 +#BKMF-23 Normal BAT-B23 Normal 90 + + +from cmk.agent_based.v2 import Service, Result, State, CheckPlugin, Metric + + +def discover_hitachivsp_backup_modules(section): + for line in section: + if "location" not in line: + yield Service(item=line[0]) + + +def check_hitachivsp_backup_modules(item, params, section): + for line in section: + if item == line[0]: + status = line[1] + + if status == "Normal": + state = State.OK + summary = "Backup Module status is Normal" + elif status == "Warning": + state = State.WARN + summary = "Backup Module status is Warning" + elif status == "Blocked": + state = State.CRIT + summary = "Backup Module status is Blocked" + elif status == "Failed": + state = State.CRIT + summary = "Backup Module status is Failed" + + yield Result(state=state, summary=summary) + + if len(line) > 2: + battery_status, battery_percent = line[3:5] + + yield Metric(name="battery_percent", value=int(battery_percent)) + + if battery_status == "Normal": + b_state = State.OK + b_summary = "Battery status is Normal" + elif battery_status == "Warning": + b_state = State.WARN + b_summary = "Battery status is Warning" + elif battery_status == "Blocked": + b_state = State.CRIT + b_summary = "Battery status is Blocked" + elif battery_status == "Failed": + b_state = State.CRIT + b_summary = "Battery status is Failed" + + yield Result(state=b_state, summary=b_summary) + + +check_plugin_hitachivsp_backup_modules = CheckPlugin( + name="hitachivsp_backup_modules", + service_name="Backup Module %s", + discovery_function=discover_hitachivsp_backup_modules, + check_function=check_hitachivsp_backup_modules, + check_default_parameters={}, +) diff --git a/hitachi-vsp/2.3/local/lib/python3/cmk_addons/plugins/hitachivsp/agent_based/hitachivsp_cache_flash_memories.py b/hitachi-vsp/2.3/local/lib/python3/cmk_addons/plugins/hitachivsp/agent_based/hitachivsp_cache_flash_memories.py new file mode 100644 index 0000000..a181e0e --- /dev/null +++ b/hitachi-vsp/2.3/local/lib/python3/cmk_addons/plugins/hitachivsp/agent_based/hitachivsp_cache_flash_memories.py @@ -0,0 +1,72 @@ +#!/usr/bin/env python3 +# -*- encoding: utf-8; py-indent-offset: 4 -*- +# +------------------------------------------------------------------+ +# | ____ _ _ __ __ _ __ | +# | / ___| |__ ___ ___| | __ | \/ | |/ / | +# | | | | '_ \ / _ \/ __| |/ / | |\/| | ' / | +# | | |___| | | | __/ (__| < | | | | . \ | +# | \____|_| |_|\___|\___|_|\_\___|_| |_|_|\_\ | +# | | +# | Copyright Mathias Kettner 2020 mk@mathias-kettner.de | +# +------------------------------------------------------------------+ +# +# This file is part of Check_MK. +# The official homepage is at http://mathias-kettner.de/check_mk. +# +# check_mk is free software; you can redistribute it and/or modify it +# under the terms of the GNU General Public License as published by +# the Free Software Foundation in version 2. check_mk is distributed +# in the hope that it will be useful, but WITHOUT ANY WARRANTY; with- +# out even the implied warranty of MERCHANTABILITY or FITNESS FOR A +# PARTICULAR PURPOSE. See the GNU General Public License for more de- +# tails. You should have received a copy of the GNU General Public +# License along with GNU Make; see the file COPYING. If not, write +# to the Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, +# Boston, MA 02110-1301 USA. + +#example output +#<<>> +#location status type +#CHB-1A Normal 32G Ready 4Port FC +#CHB-1B Normal 32G Ready 4Port FC +#CHB-2A Normal 32G Ready 4Port FC +#CHB-2B Normal 32G Ready 4Port FC + + +from cmk.agent_based.v2 import Service, Result, State, CheckPlugin + + +def discover_hitachivsp_cache_flash_memories(section): + for line in section: + if "location" not in line: + yield Service(item=line[0]) + + +def check_hitachivsp_cache_flash_memories(item, params, section): + for line in section: + if item == line[0]: + status = line[1] + + if status == "Normal": + state = State.OK + summary = "Cache memory status is Normal" + if status == "Warning": + state = State.WARN + summary = "Cache memory status is Warning" + elif status == "Blocked": + state = State.CRIT + summary = "Cache memory status is Blocked" + elif status == "Failed": + state = State.CRIT + summary = "Cache memory status is Failed" + + yield Result(state=state, summary=summary) + + +check_plugin_cache_flash_memories = CheckPlugin( + name="hitachivsp_cache_flash_memories", + service_name="Cache Flash Memory %s", + discovery_function=discover_hitachivsp_cache_flash_memories, + check_function=check_hitachivsp_cache_flash_memories, + check_default_parameters={}, +) diff --git a/hitachi-vsp/2.3/local/lib/python3/cmk_addons/plugins/hitachivsp/agent_based/hitachivsp_cache_memories.py b/hitachi-vsp/2.3/local/lib/python3/cmk_addons/plugins/hitachivsp/agent_based/hitachivsp_cache_memories.py new file mode 100644 index 0000000..79365d4 --- /dev/null +++ b/hitachi-vsp/2.3/local/lib/python3/cmk_addons/plugins/hitachivsp/agent_based/hitachivsp_cache_memories.py @@ -0,0 +1,68 @@ +#!/usr/bin/env python3 +# -*- encoding: utf-8; py-indent-offset: 4 -*- +# +------------------------------------------------------------------+ +# | ____ _ _ __ __ _ __ | +# | / ___| |__ ___ ___| | __ | \/ | |/ / | +# | | | | '_ \ / _ \/ __| |/ / | |\/| | ' / | +# | | |___| | | | __/ (__| < | | | | . \ | +# | \____|_| |_|\___|\___|_|\_\___|_| |_|_|\_\ | +# | | +# | Copyright Mathias Kettner 2020 mk@mathias-kettner.de | +# +------------------------------------------------------------------+ +# +# This file is part of Check_MK. +# The official homepage is at http://mathias-kettner.de/check_mk. +# +# check_mk is free software; you can redistribute it and/or modify it +# under the terms of the GNU General Public License as published by +# the Free Software Foundation in version 2. check_mk is distributed +# in the hope that it will be useful, but WITHOUT ANY WARRANTY; with- +# out even the implied warranty of MERCHANTABILITY or FITNESS FOR A +# PARTICULAR PURPOSE. See the GNU General Public License for more de- +# tails. You should have received a copy of the GNU General Public +# License along with GNU Make; see the file COPYING. If not, write +# to the Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, +# Boston, MA 02110-1301 USA. + +#example output +#<<>> +#location status cacheSize +#CTL1 CMG0 Normal 256 +#CTL1 CMG1 Normal 256 +#CTL2 CMG0 Normal 256 +#CTL2 CMG1 Normal 256 + + +from cmk.agent_based.v2 import Service, Result, State, CheckPlugin, Metric + + +def discover_hitachivsp_cache_memories(section): + for line in section: + if "location" not in line: + yield Service(item=line[0]) + + +def check_hitachivsp_cache_memories(item, params, section): + for line in section: + if item == line[0]: + status, cache_size = line[1:3] + + yield Metric(name="cache_size", value=int(cache_size)) + + if status == "Normal": + state = State.OK + summary = "Cache memory status is Normal" + elif status == "Warning": + state = State.WARN + summary = "Cache memory status is Warning" + + yield Result(state=state, summary=summary) + + +check_plugin_hitachivsp_cache_memories = CheckPlugin( + name="hitachivsp_cache_memories", + service_name="Cache Memory %s", + discovery_function=discover_hitachivsp_cache_memories, + check_function=check_hitachivsp_cache_memories, + check_default_parameters={}, +) diff --git a/hitachi-vsp/2.3/local/lib/python3/cmk_addons/plugins/hitachivsp/agent_based/hitachivsp_channel_board.py b/hitachi-vsp/2.3/local/lib/python3/cmk_addons/plugins/hitachivsp/agent_based/hitachivsp_channel_board.py new file mode 100644 index 0000000..2d94646 --- /dev/null +++ b/hitachi-vsp/2.3/local/lib/python3/cmk_addons/plugins/hitachivsp/agent_based/hitachivsp_channel_board.py @@ -0,0 +1,72 @@ +#!/usr/bin/env python3 +# -*- encoding: utf-8; py-indent-offset: 4 -*- +# +------------------------------------------------------------------+ +# | ____ _ _ __ __ _ __ | +# | / ___| |__ ___ ___| | __ | \/ | |/ / | +# | | | | '_ \ / _ \/ __| |/ / | |\/| | ' / | +# | | |___| | | | __/ (__| < | | | | . \ | +# | \____|_| |_|\___|\___|_|\_\___|_| |_|_|\_\ | +# | | +# | Copyright Mathias Kettner 2020 mk@mathias-kettner.de | +# +------------------------------------------------------------------+ +# +# This file is part of Check_MK. +# The official homepage is at http://mathias-kettner.de/check_mk. +# +# check_mk is free software; you can redistribute it and/or modify it +# under the terms of the GNU General Public License as published by +# the Free Software Foundation in version 2. check_mk is distributed +# in the hope that it will be useful, but WITHOUT ANY WARRANTY; with- +# out even the implied warranty of MERCHANTABILITY or FITNESS FOR A +# PARTICULAR PURPOSE. See the GNU General Public License for more de- +# tails. You should have received a copy of the GNU General Public +# License along with GNU Make; see the file COPYING. If not, write +# to the Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, +# Boston, MA 02110-1301 USA. + +#example output +#<<>> +#location status type +#CHB-1A Normal 32G Ready 4Port FC +#CHB-1B Normal 32G Ready 4Port FC +#CHB-2A Normal 32G Ready 4Port FC +#CHB-2B Normal 32G Ready 4Port FC + + +from cmk.agent_based.v2 import Service, Result, State, CheckPlugin, Metric + + +def discover_hitachivsp_channel_board(section): + for line in section: + if "location" not in line: + yield Service(item=line[0]) + + +def check_hitachivsp_channel_board(item, params, section): + for line in section: + if item == line[0]: + status, type = line[1:3] + + if status == "Normal": + state = State.OK + summary = f"Channel board status is Normal, Channel board type: {type}" + elif status == "Warning": + state = State.WARN + summary = f"Channel board status is Warning, Channel board type: {type}" + elif status == "Blocked": + state = State.CRIT + summary = f"Channel board status is Blocked, Channel board type: {type}" + elif status == "Failed": + state = State.CRIT + summary = f"Channel board status is Failed, Channel board type: {type}" + + yield Result(state=state, summary=summary) + + +check_plugin_hitachivsp_channel_board = CheckPlugin( + name="hitachivsp_channel_board", + service_name="Channel Board %s", + discovery_function=discover_hitachivsp_channel_board, + check_function=check_hitachivsp_channel_board, + check_default_parameters={}, +) diff --git a/hitachi-vsp/2.3/local/lib/python3/cmk_addons/plugins/hitachivsp/agent_based/hitachivsp_clprs.py b/hitachi-vsp/2.3/local/lib/python3/cmk_addons/plugins/hitachivsp/agent_based/hitachivsp_clprs.py new file mode 100644 index 0000000..fb60962 --- /dev/null +++ b/hitachi-vsp/2.3/local/lib/python3/cmk_addons/plugins/hitachivsp/agent_based/hitachivsp_clprs.py @@ -0,0 +1,64 @@ +#!/usr/bin/env python3 +# -*- encoding: utf-8; py-indent-offset: 4 -*- +# +------------------------------------------------------------------+ +# | ____ _ _ __ __ _ __ | +# | / ___| |__ ___ ___| | __ | \/ | |/ / | +# | | | | '_ \ / _ \/ __| |/ / | |\/| | ' / | +# | | |___| | | | __/ (__| < | | | | . \ | +# | \____|_| |_|\___|\___|_|\_\___|_| |_|_|\_\ | +# | | +# | Copyright Mathias Kettner 2020 mk@mathias-kettner.de | +# +------------------------------------------------------------------+ +# +# This file is part of Check_MK. +# The official homepage is at http://mathias-kettner.de/check_mk. +# +# check_mk is free software; you can redistribute it and/or modify it +# under the terms of the GNU General Public License as published by +# the Free Software Foundation in version 2. check_mk is distributed +# in the hope that it will be useful, but WITHOUT ANY WARRANTY; with- +# out even the implied warranty of MERCHANTABILITY or FITNESS FOR A +# PARTICULAR PURPOSE. See the GNU General Public License for more de- +# tails. You should have received a copy of the GNU General Public +# License along with GNU Make; see the file COPYING. If not, write +# to the Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, +# Boston, MA 02110-1301 USA. + +#example output +#<<>> +#clprId cacheMemoryCapacity cacheMemoryUsedCapacity writePendingDataCapacity cacheUsageRate +#0 924672 901454 44959 99 + + +from cmk.agent_based.v2 import Service, Result, State, CheckPlugin, Metric + + +def discover_hitachivsp_clprs(section): + for line in section: + if "clprId" not in line: + yield Service(item=line[0]) + + +def check_hitachivsp_clprs(item, params, section): + for line in section: + if item == line[0]: + total, used, pending, rate = line[1:5] + + yield Metric(name="CacheMemoryCapacity", value=int(total)) + yield Metric(name="CacheMemoryUsedCapacity", value=int(used)) + yield Metric(name="WritePendingDataCapacity", value=int(pending)) + yield Metric(name="CacheUsageRate", value=int(rate)) + + yield Result( + state=State.OK, + summary=f"CacheMemoryCapacity[GB]: {int(total)/1024} ; CacheMemoryUsedCapacity[GB]: {int(used)/1024} ; cacheUsageRate {rate}", + ) + + +check_plugin_hitachivsp_clprs = CheckPlugin( + name="hitachivsp_clprs", + service_name="CLPR %s", + discovery_function=discover_hitachivsp_clprs, + check_function=check_hitachivsp_clprs, + check_default_parameters={}, +) diff --git a/hitachi-vsp/2.3/local/lib/python3/cmk_addons/plugins/hitachivsp/agent_based/hitachivsp_ctls.py b/hitachi-vsp/2.3/local/lib/python3/cmk_addons/plugins/hitachivsp/agent_based/hitachivsp_ctls.py new file mode 100644 index 0000000..01527bd --- /dev/null +++ b/hitachi-vsp/2.3/local/lib/python3/cmk_addons/plugins/hitachivsp/agent_based/hitachivsp_ctls.py @@ -0,0 +1,85 @@ +#!/usr/bin/env python3 +# -*- encoding: utf-8; py-indent-offset: 4 -*- +# +------------------------------------------------------------------+ +# | ____ _ _ __ __ _ __ | +# | / ___| |__ ___ ___| | __ | \/ | |/ / | +# | | | | '_ \ / _ \/ __| |/ / | |\/| | ' / | +# | | |___| | | | __/ (__| < | | | | . \ | +# | \____|_| |_|\___|\___|_|\_\___|_| |_|_|\_\ | +# | | +# | Copyright Mathias Kettner 2020 mk@mathias-kettner.de | +# +------------------------------------------------------------------+ +# +# This file is part of Check_MK. +# The official homepage is at http://mathias-kettner.de/check_mk. +# +# check_mk is free software; you can redistribute it and/or modify it +# under the terms of the GNU General Public License as published by +# the Free Software Foundation in version 2. check_mk is distributed +# in the hope that it will be useful, but WITHOUT ANY WARRANTY; with- +# out even the implied warranty of MERCHANTABILITY or FITNESS FOR A +# PARTICULAR PURPOSE. See the GNU General Public License for more de- +# tails. You should have received a copy of the GNU General Public +# License along with GNU Make; see the file COPYING. If not, write +# to the Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, +# Boston, MA 02110-1301 USA. + +#example output +#<<>> +#location status temperature temperatureStatus charge +#CTL1 Normal 23 Normal 100 +#CTL2 Normal 23 Normal 100 + + +from cmk.agent_based.v2 import Service, Result, State, CheckPlugin, Metric + + +def discover_hitachivsp_ctls(section): + for line in section: + if "location" not in line: + yield Service(item=line[0]) + + +def check_hitachivsp_ctls(item, params, section): + for line in section: + if item == line[0]: + status, temperature, temperature_status, charge = line[1:5] + + yield Metric("temperature", int(temperature)) + yield Metric("charge", int(charge)) + + if status == "Normal": + state = State.OK + summary = "Controller status is Normal" + elif status == "Warning": + state = State.WARN + summary = "Controller status is Warning" + elif status == "Blocked": + state = State.CRIT + summary = "Controller status is Blocked" + elif status == "Failed": + state = State.CRIT + summary = "Controller status is Failed" + + yield Result(state=state, summary=summary) + + if temperature_status == "Normal": + t_state = State.OK + t_summary = f"Temperature Status is Normal: {temperature}" + if temperature_status == "Warning": + t_state = State.WARN + t_summary = f"Temperature Status is Warning: {temperature}" + elif temperature_status == "Failed": + t_state = State.CRIT + t_summary = f"Temperature Status is Failed: %{temperature}" + + yield Result(state=t_state, summary=t_summary) + + +check_plugin_hitachivsp_ctls = CheckPlugin( + name="hitachivsp_ctls", + service_name="CTLS %s", + discovery_function=discover_hitachivsp_ctls, + check_function=check_hitachivsp_ctls, + check_default_parameters={}, +) diff --git a/hitachi-vsp/2.3/local/lib/python3/cmk_addons/plugins/hitachivsp/agent_based/hitachivsp_disk_boards.py b/hitachi-vsp/2.3/local/lib/python3/cmk_addons/plugins/hitachivsp/agent_based/hitachivsp_disk_boards.py new file mode 100644 index 0000000..672df57 --- /dev/null +++ b/hitachi-vsp/2.3/local/lib/python3/cmk_addons/plugins/hitachivsp/agent_based/hitachivsp_disk_boards.py @@ -0,0 +1,72 @@ +#!/usr/bin/env python3 +# -*- encoding: utf-8; py-indent-offset: 4 -*- +# +------------------------------------------------------------------+ +# | ____ _ _ __ __ _ __ | +# | / ___| |__ ___ ___| | __ | \/ | |/ / | +# | | | | '_ \ / _ \/ __| |/ / | |\/| | ' / | +# | | |___| | | | __/ (__| < | | | | . \ | +# | \____|_| |_|\___|\___|_|\_\___|_| |_|_|\_\ | +# | | +# | Copyright Mathias Kettner 2020 mk@mathias-kettner.de | +# +------------------------------------------------------------------+ +# +# This file is part of Check_MK. +# The official homepage is at http://mathias-kettner.de/check_mk. +# +# check_mk is free software; you can redistribute it and/or modify it +# under the terms of the GNU General Public License as published by +# the Free Software Foundation in version 2. check_mk is distributed +# in the hope that it will be useful, but WITHOUT ANY WARRANTY; with- +# out even the implied warranty of MERCHANTABILITY or FITNESS FOR A +# PARTICULAR PURPOSE. See the GNU General Public License for more de- +# tails. You should have received a copy of the GNU General Public +# License along with GNU Make; see the file COPYING. If not, write +# to the Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, +# Boston, MA 02110-1301 USA. + +#example output +#<<>> +#location status type +#DKB-1G Normal Disk Board +#DKB-1H Normal Disk Board +#DKB-2G Normal Disk Board +#DKB-2H Normal Disk Board + + +from cmk.agent_based.v2 import Service, Result, State, CheckPlugin + + +def discover_hitachivsp_disk_boards(section): + for line in section: + if "location" not in line: + yield Service(item=line[0]) + + +def check_hitachivsp_disk_boards(item, params, section): + for line in section: + if item == line[0]: + status = line[1] + + if status == "Normal": + state = State.OK + summary = "Disk Board status is Normal" + elif status == "Warning": + state = State.WARN + summary = "Disk Board status is Warning" + elif status == "Blocked": + state = State.CRIT + summary = "Disk Board status is Blocked" + elif status == "Failed": + state = State.CRIT + summary = "Disk Board status is Failed" + + yield Result(state=state, summary=summary) + + +check_plugin_hitachivsp_disk_boards = CheckPlugin( + name="hitachivsp_disk_boards", + service_name="Disk Board %s", + discovery_function=discover_hitachivsp_disk_boards, + check_function=check_hitachivsp_disk_boards, + check_default_parameters={}, +) diff --git a/hitachi-vsp/2.3/local/lib/python3/cmk_addons/plugins/hitachivsp/agent_based/hitachivsp_drive_boxes_dbps.py b/hitachi-vsp/2.3/local/lib/python3/cmk_addons/plugins/hitachivsp/agent_based/hitachivsp_drive_boxes_dbps.py new file mode 100644 index 0000000..6045fbc --- /dev/null +++ b/hitachi-vsp/2.3/local/lib/python3/cmk_addons/plugins/hitachivsp/agent_based/hitachivsp_drive_boxes_dbps.py @@ -0,0 +1,73 @@ +#!/usr/bin/env python3 +# -*- encoding: utf-8; py-indent-offset: 4 -*- +# +------------------------------------------------------------------+ +# | ____ _ _ __ __ _ __ | +# | / ___| |__ ___ ___| | __ | \/ | |/ / | +# | | | | '_ \ / _ \/ __| |/ / | |\/| | ' / | +# | | |___| | | | __/ (__| < | | | | . \ | +# | \____|_| |_|\___|\___|_|\_\___|_| |_|_|\_\ | +# | | +# | Copyright Mathias Kettner 2020 mk@mathias-kettner.de | +# +------------------------------------------------------------------+ +# +# This file is part of Check_MK. +# The official homepage is at http://mathias-kettner.de/check_mk. +# +# check_mk is free software; you can redistribute it and/or modify it +# under the terms of the GNU General Public License as published by +# the Free Software Foundation in version 2. check_mk is distributed +# in the hope that it will be useful, but WITHOUT ANY WARRANTY; with- +# out even the implied warranty of MERCHANTABILITY or FITNESS FOR A +# PARTICULAR PURPOSE. See the GNU General Public License for more de- +# tails. You should have received a copy of the GNU General Public +# License along with GNU Make; see the file COPYING. If not, write +# to the Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, +# Boston, MA 02110-1301 USA. + +#example output +#<<>> +#drivebox_location dbps_location dbps_status +#DB-00 DBPS00-1 Normal +#DB-00 DBPS00-2 Normal +#DB-01 DBPS01-1 Normal +#DB-01 DBPS01-2 Normal +#DB-02 DBPS02-1 Normal +#DB-02 DBPS02-2 Normal +#DB-03 DBPS03-1 Normal +#DB-03 DBPS03-2 Normal + + +from cmk.agent_based.v2 import Service, Result, State, CheckPlugin + + +def discover_hitachivsp_drive_boxes_dbps(section): + for line in section: + if "drivebox_location" not in line: + yield Service(item=line[1]) + + +def check_hitachivsp_drive_boxes_dbps(item, params, section): + for line in section: + if item == line[1]: + status = line[2] + + if status == "Normal": + state = State.OK + summary = "DriveBox Power Supply status is Normal" + elif status == "Warning": + state = State.WARN + summary = "DriveBox Power Supply status is Warning" + elif status == "Failed": + state = State.CRIT + summary = "DriveBox Power Supply status is Failed" + + yield Result(state=state, summary=summary) + + +check_plugin_hitachivsp_drive_boxes_dbps = CheckPlugin( + name="hitachivsp_drive_boxes_dbps", + service_name="DriveBox Power Supply %s", + discovery_function=discover_hitachivsp_drive_boxes_dbps, + check_function=check_hitachivsp_drive_boxes_dbps, + check_default_parameters={}, +) diff --git a/hitachi-vsp/2.3/local/lib/python3/cmk_addons/plugins/hitachivsp/agent_based/hitachivsp_drive_boxes_drives.py b/hitachi-vsp/2.3/local/lib/python3/cmk_addons/plugins/hitachivsp/agent_based/hitachivsp_drive_boxes_drives.py new file mode 100644 index 0000000..c514eff --- /dev/null +++ b/hitachi-vsp/2.3/local/lib/python3/cmk_addons/plugins/hitachivsp/agent_based/hitachivsp_drive_boxes_drives.py @@ -0,0 +1,99 @@ +#!/usr/bin/env python3 +# -*- encoding: utf-8; py-indent-offset: 4 -*- +# +------------------------------------------------------------------+ +# | ____ _ _ __ __ _ __ | +# | / ___| |__ ___ ___| | __ | \/ | |/ / | +# | | | | '_ \ / _ \/ __| |/ / | |\/| | ' / | +# | | |___| | | | __/ (__| < | | | | . \ | +# | \____|_| |_|\___|\___|_|\_\___|_| |_|_|\_\ | +# | | +# | Copyright Mathias Kettner 2020 mk@mathias-kettner.de | +# +------------------------------------------------------------------+ +# +# This file is part of Check_MK. +# The official homepage is at http://mathias-kettner.de/check_mk. +# +# check_mk is free software; you can redistribute it and/or modify it +# under the terms of the GNU General Public License as published by +# the Free Software Foundation in version 2. check_mk is distributed +# in the hope that it will be useful, but WITHOUT ANY WARRANTY; with- +# out even the implied warranty of MERCHANTABILITY or FITNESS FOR A +# PARTICULAR PURPOSE. See the GNU General Public License for more de- +# tails. You should have received a copy of the GNU General Public +# License along with GNU Make; see the file COPYING. If not, write +# to the Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, +# Boston, MA 02110-1301 USA. + +#example output +#<<>> +#drivebox_location drive_location drive_status drive_recomend_Replacement +#DB-00 HDD00-00 Normal 0 +#DB-00 HDD00-01 Normal 0 +#DB-00 HDD00-02 Normal 0 +#DB-00 HDD00-03 Normal 0 +#DB-00 HDD00-04 Normal 0 +#DB-00 HDD00-05 Normal 0 +#DB-00 HDD00-11 Normal 0 +#DB-01 HDD01-00 Normal 0 +#DB-01 HDD01-01 Normal 0 +#DB-01 HDD01-02 Normal 0 +#DB-01 HDD01-03 Normal 0 +#DB-01 HDD01-04 Normal 0 +#DB-01 HDD01-05 Normal 0 +#DB-02 HDD02-00 Normal 0 +#DB-02 HDD02-01 Normal 0 +#DB-02 HDD02-02 Normal 0 +#DB-02 HDD02-03 Normal 0 +#DB-02 HDD02-04 Normal 0 +#DB-02 HDD02-05 Normal 0 +#DB-03 HDD03-00 Normal 0 +#DB-03 HDD03-01 Normal 0 +#DB-03 HDD03-02 Normal 0 +#DB-03 HDD03-03 Normal 0 +#DB-03 HDD03-04 Normal 0 +#DB-03 HDD03-05 Normal 0 + + +from cmk.agent_based.v2 import Service, Result, State, CheckPlugin + + +def discover_hitachivsp_drive_boxes_drives(section): + for line in section: + if "drivebox_location" not in line: + yield Service(item=line[1]) + + +def check_hitachivsp_drive_boxes_drives(item, params, section): + for line in section: + if item == line[1]: + status, replace = line[2:4] + + if status == "Normal": + state = State.OK + summary = "Drive status is Normal" + elif ("Warning" in status) or ("Copying" in status) or ("Pending" in status): + state = State.WARN + summary = f"Drive status is: {state}" + elif status == "Copy incomplete": + state = State.CRIT + status = "Drive status is Copy Incomplete" + + yield Result(state=state, summary=summary) + + if replace == "0": + r_state = State.OK + r_summary = "Drive replacement is not recommended" + elif replace == "1": + r_state = State.WARN + r_summary = "Drive replacement is recommended" + + yield Result(state=r_state, summary=r_summary) + + +check_plugin_hitachivsp_drive_boxes_drives = CheckPlugin( + name="hitachivsp_drive_boxes_drives", + service_name="Drive %s", + discovery_function=discover_hitachivsp_drive_boxes_drives, + check_function=check_hitachivsp_drive_boxes_drives, + check_default_parameters={}, +) diff --git a/hitachi-vsp/2.3/local/lib/python3/cmk_addons/plugins/hitachivsp/agent_based/hitachivsp_drive_boxes_enc.py b/hitachi-vsp/2.3/local/lib/python3/cmk_addons/plugins/hitachivsp/agent_based/hitachivsp_drive_boxes_enc.py new file mode 100644 index 0000000..071697e --- /dev/null +++ b/hitachi-vsp/2.3/local/lib/python3/cmk_addons/plugins/hitachivsp/agent_based/hitachivsp_drive_boxes_enc.py @@ -0,0 +1,76 @@ +#!/usr/bin/env python3 +# -*- encoding: utf-8; py-indent-offset: 4 -*- +# +------------------------------------------------------------------+ +# | ____ _ _ __ __ _ __ | +# | / ___| |__ ___ ___| | __ | \/ | |/ / | +# | | | | '_ \ / _ \/ __| |/ / | |\/| | ' / | +# | | |___| | | | __/ (__| < | | | | . \ | +# | \____|_| |_|\___|\___|_|\_\___|_| |_|_|\_\ | +# | | +# | Copyright Mathias Kettner 2020 mk@mathias-kettner.de | +# +------------------------------------------------------------------+ +# +# This file is part of Check_MK. +# The official homepage is at http://mathias-kettner.de/check_mk. +# +# check_mk is free software; you can redistribute it and/or modify it +# under the terms of the GNU General Public License as published by +# the Free Software Foundation in version 2. check_mk is distributed +# in the hope that it will be useful, but WITHOUT ANY WARRANTY; with- +# out even the implied warranty of MERCHANTABILITY or FITNESS FOR A +# PARTICULAR PURPOSE. See the GNU General Public License for more de- +# tails. You should have received a copy of the GNU General Public +# License along with GNU Make; see the file COPYING. If not, write +# to the Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, +# Boston, MA 02110-1301 USA. + +#example output +#<<>> +#drivebox_location enc_location enc_status +#DB-00 ENC00-1 Normal +#DB-00 ENC00-2 Normal +#DB-01 ENC01-1 Normal +#DB-01 ENC01-2 Normal +#DB-02 ENC02-1 Normal +#DB-02 ENC02-2 Normal +#DB-03 ENC03-1 Normal +#DB-03 ENC03-2 Normal + + +from cmk.agent_based.v2 import Service, Result, State, CheckPlugin + + +def discover_hitachivsp_drive_boxes_encs(section): + for line in section: + if "drivebox_location" not in line: + yield Service(item=line[1]) + + +def check_hitachivsp_drive_boxes_encs(item, params, section): + for line in section: + if item == line[1]: + status = line[2] + + if status == "Normal": + state = State.OK + summary = "Drive Enclosure status is Normal" + elif status == "Warning": + state = State.WARN + summary = "Drive Enclosure status is Warning" + elif status == "Blocked": + state = State.CRIT + summary = "Drive Enclosure status is Blocked" + elif status == "Failed": + state = State.CRIT + summary = "Drive Enclosure status is Failed" + + yield Result(state=state, summary=summary) + + +check_plugin_hitachivsp_drive_boxes_encs = CheckPlugin( + name="hitachivsp_drive_boxes_encs", + service_name="Drive box enclosure %s", + discovery_function=discover_hitachivsp_drive_boxes_encs, + check_function=check_hitachivsp_drive_boxes_encs, + check_default_parameters={}, +) diff --git a/hitachi-vsp/2.3/local/lib/python3/cmk_addons/plugins/hitachivsp/agent_based/hitachivsp_info.py b/hitachi-vsp/2.3/local/lib/python3/cmk_addons/plugins/hitachivsp/agent_based/hitachivsp_info.py new file mode 100644 index 0000000..232d664 --- /dev/null +++ b/hitachi-vsp/2.3/local/lib/python3/cmk_addons/plugins/hitachivsp/agent_based/hitachivsp_info.py @@ -0,0 +1,67 @@ +#!/usr/bin/env python3 +# -*- encoding: utf-8; py-indent-offset: 4 -*- +# +------------------------------------------------------------------+ +# | ____ _ _ __ __ _ __ | +# | / ___| |__ ___ ___| | __ | \/ | |/ / | +# | | | | '_ \ / _ \/ __| |/ / | |\/| | ' / | +# | | |___| | | | __/ (__| < | | | | . \ | +# | \____|_| |_|\___|\___|_|\_\___|_| |_|_|\_\ | +# | | +# | Copyright Mathias Kettner 2020 mk@mathias-kettner.de | +# +------------------------------------------------------------------+ +# +# This file is part of Check_MK. +# The official homepage is at http://mathias-kettner.de/check_mk. +# +# check_mk is free software; you can redistribute it and/or modify it +# under the terms of the GNU General Public License as published by +# the Free Software Foundation in version 2. check_mk is distributed +# in the hope that it will be useful, but WITHOUT ANY WARRANTY; with- +# out even the implied warranty of MERCHANTABILITY or FITNESS FOR A +# PARTICULAR PURPOSE. See the GNU General Public License for more de- +# tails. You should have received a copy of the GNU General Public +# License along with GNU Make; see the file COPYING. If not, write +# to the Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, +# Boston, MA 02110-1301 USA. + +#. +# .--general-------------------------------------------------------------. +# | _ | +# | __ _ ___ _ __ ___ _ __ __ _| | | +# | / _` |/ _ \ '_ \ / _ \ '__/ _` | | | +# | | (_| | __/ | | | __/ | | (_| | | | +# | \__, |\___|_| |_|\___|_| \__,_|_| | +# | |___/ | +# +----------------------------------------------------------------------+ +# | | +# '----------------------------------------------------------------------' + +#example output +#<<>> +#666666 666666666666 88-04-03/00 VSP G700 + + +from cmk.agent_based.v2 import Service, Result, State, CheckPlugin + + +def discover_hitachivsp_info(section): + for line in section: + yield Service(item=line[0]) + + +def check_hitachivsp_info(item, params, section): + for line in section: + if item == line[0]: + yield Result( + state=State.OK, + summary=f"Model: {line[3]}, Serial Number: {line[0]}, StorageDeviceID: {line[1]}, dkcMicroVersion: {line[2]}" + ) + + +check_plugin_hitachivsp_info = CheckPlugin( + name="hitachivsp_info", + service_name="Hitachi VSP Info %s", + discovery_function=discover_hitachivsp_info, + check_function=check_hitachivsp_info, + check_default_parameters={}, +) diff --git a/hitachi-vsp/2.3/local/lib/python3/cmk_addons/plugins/hitachivsp/agent_based/hitachivsp_ldevs.py b/hitachi-vsp/2.3/local/lib/python3/cmk_addons/plugins/hitachivsp/agent_based/hitachivsp_ldevs.py new file mode 100644 index 0000000..56accfb --- /dev/null +++ b/hitachi-vsp/2.3/local/lib/python3/cmk_addons/plugins/hitachivsp/agent_based/hitachivsp_ldevs.py @@ -0,0 +1,76 @@ +#!/usr/bin/env python3 +# -*- encoding: utf-8; py-indent-offset: 4 -*- +# +------------------------------------------------------------------+ +# | ____ _ _ __ __ _ __ | +# | / ___| |__ ___ ___| | __ | \/ | |/ / | +# | | | | '_ \ / _ \/ __| |/ / | |\/| | ' / | +# | | |___| | | | __/ (__| < | | | | . \ | +# | \____|_| |_|\___|\___|_|\_\___|_| |_|_|\_\ | +# | | +# | Copyright Mathias Kettner 2020 mk@mathias-kettner.de | +# +------------------------------------------------------------------+ +# +# This file is part of Check_MK. +# The official homepage is at http://mathias-kettner.de/check_mk. +# +# check_mk is free software; you can redistribute it and/or modify it +# under the terms of the GNU General Public License as published by +# the Free Software Foundation in version 2. check_mk is distributed +# in the hope that it will be useful, but WITHOUT ANY WARRANTY; with- +# out even the implied warranty of MERCHANTABILITY or FITNESS FOR A +# PARTICULAR PURPOSE. See the GNU General Public License for more de- +# tails. You should have received a copy of the GNU General Public +# License along with GNU Make; see the file COPYING. If not, write +# to the Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, +# Boston, MA 02110-1301 USA. + +#example output +#<<>> +#ldevId clprId byteFormatCapacity blockCapacity label status +#0 0 500.00 G 1048576000 vg_test0 NML +#1 0 400.00 G 838860800 vg_test1 NML +#2 0 10.00 T 21474836480 vmware_legacy_ssd0 NML +#3 0 10.00 T 21474836480 vmware_legacy_ssd1 NML +#4 0 5.00 T 10737418240 vmware_legacy_ssd2 NML +#5 0 5.00 T 10737418240 vmware_legacy_ssd3 NML + + +from cmk.agent_based.v2 import Service, Result, State, CheckPlugin, Metric + + +def discover_hitachivsp_ldevs(section): + for line in section: + if "ldevId" not in line: + yield Service(item=line[0]) + + +def check_hitachivsp_ldevs(item, params, section): + for line in section: + if item == line[0]: + byte_cap, blk_cap, label, status = line[2:6] + + yield Metric("BlockCapacity", int(blk_cap)) + + if status == "NML": + state = State.OK + summary = f"Ldev is in normal status; byteFormatCapacity: {byte_cap}; blockCapacity: {blk_cap}; label {label}; status {status}" + elif status == "BLK": + state = State.CRIT + summary = f"Ldev is Blocked!; byteFormatCapacity: {byte_cap}; blockCapacity: {blk_cap}; label {label}; status {status}" + elif status == "BSY": + state = State.CRIT + summary = f"Ldev status is being changed!; byteFormatCapacity: {byte_cap}; blockCapacity: {blk_cap}; label {label}; status {status}" + else: + state = State.UNKNOWN + summary = "Ldev status is unknown (not supported)" + + yield Result(state=state, summary=summary) + + +check_plugin_hitachivsp_ldevs = CheckPlugin( + name="hitachivsp_ldevs", + service_name="LDEV %s", + discovery_function=discover_hitachivsp_ldevs, + check_function=check_hitachivsp_ldevs, + check_default_parameters={}, +) diff --git a/hitachi-vsp/2.3/local/lib/python3/cmk_addons/plugins/hitachivsp/agent_based/hitachivsp_parity_groups.py b/hitachi-vsp/2.3/local/lib/python3/cmk_addons/plugins/hitachivsp/agent_based/hitachivsp_parity_groups.py new file mode 100644 index 0000000..751bc8a --- /dev/null +++ b/hitachi-vsp/2.3/local/lib/python3/cmk_addons/plugins/hitachivsp/agent_based/hitachivsp_parity_groups.py @@ -0,0 +1,68 @@ +#!/usr/bin/env python3 +# -*- encoding: utf-8; py-indent-offset: 4 -*- +# +------------------------------------------------------------------+ +# | ____ _ _ __ __ _ __ | +# | / ___| |__ ___ ___| | __ | \/ | |/ / | +# | | | | '_ \ / _ \/ __| |/ / | |\/| | ' / | +# | | |___| | | | __/ (__| < | | | | . \ | +# | \____|_| |_|\___|\___|_|\_\___|_| |_|_|\_\ | +# | | +# | Copyright Mathias Kettner 2020 mk@mathias-kettner.de | +# +------------------------------------------------------------------+ +# +# This file is part of Check_MK. +# The official homepage is at http://mathias-kettner.de/check_mk. +# +# check_mk is free software; you can redistribute it and/or modify it +# under the terms of the GNU General Public License as published by +# the Free Software Foundation in version 2. check_mk is distributed +# in the hope that it will be useful, but WITHOUT ANY WARRANTY; with- +# out even the implied warranty of MERCHANTABILITY or FITNESS FOR A +# PARTICULAR PURPOSE. See the GNU General Public License for more de- +# tails. You should have received a copy of the GNU General Public +# License along with GNU Make; see the file COPYING. If not, write +# to the Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, +# Boston, MA 02110-1301 USA. + +#example output +#<<>> +#parityGroupId numOfLdevs usedCapacityRate clprId availableVolumeCapacity totalCapacity physicalCapacity +#1-1 26 44 0 87245 157286 39321 +#1-2 51 93 0 10448 157286 39321 +#1-3 25 42 0 90317 157286 39321 +#1-4 52 95 0 7376 157286 39321 +#1-5 54 99 0 1232 157286 39321 +#1-6 25 42 0 90317 157286 39321 + + +from cmk.agent_based.v2 import Service, Result, State, CheckPlugin, Metric + + +def discover_hitachivsp_parity_groups(section): + for line in section: + if "parityGroupId" not in line: + yield Service(item=line[0]) + + +def check_hitachivsp_parity_groups(item, params, section): + for line in section: + if item == line[0]: + rate, _, avail, total = line[2:6] + + yield Metric(name="UsedCapacityRate", value=int(rate)) + yield Metric(name="AvailableVolumeCapacity", value=int(avail)) + yield Metric(name="TotalCapacity", value=int(total)) + + yield Result( + state=State.OK, + summary=f"UsedCapacityRate: {rate}; AvailableVolumeCapacity(GB): {avail}; TotalCapacity(GB): {total}" + ) + + +check_plugin_hitachivsp_parity_groups = CheckPlugin( + name="hitachivsp_parity_groups", + service_name="Parity Group %s", + discovery_function=discover_hitachivsp_parity_groups, + check_function=check_hitachivsp_parity_groups, + check_default_parameters={}, +) diff --git a/hitachi-vsp/2.3/local/lib/python3/cmk_addons/plugins/hitachivsp/agent_based/hitachivsp_pools.py b/hitachi-vsp/2.3/local/lib/python3/cmk_addons/plugins/hitachivsp/agent_based/hitachivsp_pools.py new file mode 100644 index 0000000..e5cae4a --- /dev/null +++ b/hitachi-vsp/2.3/local/lib/python3/cmk_addons/plugins/hitachivsp/agent_based/hitachivsp_pools.py @@ -0,0 +1,75 @@ +#!/usr/bin/env python3 +# -*- encoding: utf-8; py-indent-offset: 4 -*- +# +------------------------------------------------------------------+ +# | ____ _ _ __ __ _ __ | +# | / ___| |__ ___ ___| | __ | \/ | |/ / | +# | | | | '_ \ / _ \/ __| |/ / | |\/| | ' / | +# | | |___| | | | __/ (__| < | | | | . \ | +# | \____|_| |_|\___|\___|_|\_\___|_| |_|_|\_\ | +# | | +# | Copyright Mathias Kettner 2020 mk@mathias-kettner.de | +# +------------------------------------------------------------------+ +# +# This file is part of Check_MK. +# The official homepage is at http://mathias-kettner.de/check_mk. +# +# check_mk is free software; you can redistribute it and/or modify it +# under the terms of the GNU General Public License as published by +# the Free Software Foundation in version 2. check_mk is distributed +# in the hope that it will be useful, but WITHOUT ANY WARRANTY; with- +# out even the implied warranty of MERCHANTABILITY or FITNESS FOR A +# PARTICULAR PURPOSE. See the GNU General Public License for more de- +# tails. You should have received a copy of the GNU General Public +# License along with GNU Make; see the file COPYING. If not, write +# to the Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, +# Boston, MA 02110-1301 USA. + +#example output +#<<>> +#poolID poolType poolName totalPhysicalCapacity totalPoolCapacity availableVolumeCapacity usedCapacityRate poolStatus +#0 RT RAID6_HDT_01 397630296 397630296 208964826 47 POLN +#1 HTI THIN_IMAGE_POOL 46453344 46453344 46453344 0 POLN + + +from cmk.agent_based.v2 import Service, Result, State, CheckPlugin, Metric + + +def discover_hitachivsp_pools(section): + for line in section: + if "poolID" not in line: + yield Service(item=line[0]) + + +def check_hitachivsp_pools(item, params, section): + for line in section: + if item == line[0]: + name, phys_cap, pool_cap, avail, rate, status = line[2:8] + + yield Metric(name="TotalPhysicalCapacity", value=int(phys_cap)) + yield Metric(name="TotalPoolCapacity", value=int(pool_cap)) + yield Metric(name="AvailableVolumeCapacity", value=int(avail)) + yield Metric(name="UsedCapacityRate", value=int(rate)) + + if status == "POLN": + state = State.OK + summary = f"Pool {name} is Normal" + elif status == "POLE": + state = State.CRIT + summary = f"Pool {name} is suspended in failure status" + elif status == "POLF": + state = State.CRIT + summary = f"Pool {name} is Full" + elif status == "POLS": + state = State.CRIT + summary = f"Pool {name} is Suspended" + + yield Result(state=state, summary=summary) + + +check_plugin_hitachivsp_pools = CheckPlugin( + name="hitachivsp_pools", + service_name="Pool %s", + discovery_function=discover_hitachivsp_pools, + check_function=check_hitachivsp_pools, + check_default_parameters={}, +) diff --git a/hitachi-vsp/2.3/local/lib/python3/cmk_addons/plugins/hitachivsp/agent_based/hitachivsp_power_consumption.py b/hitachi-vsp/2.3/local/lib/python3/cmk_addons/plugins/hitachivsp/agent_based/hitachivsp_power_consumption.py new file mode 100644 index 0000000..e1b1186 --- /dev/null +++ b/hitachi-vsp/2.3/local/lib/python3/cmk_addons/plugins/hitachivsp/agent_based/hitachivsp_power_consumption.py @@ -0,0 +1,54 @@ +#!/usr/bin/env python3 +# -*- encoding: utf-8; py-indent-offset: 4 -*- +# +------------------------------------------------------------------+ +# | ____ _ _ __ __ _ __ | +# | / ___| |__ ___ ___| | __ | \/ | |/ / | +# | | | | '_ \ / _ \/ __| |/ / | |\/| | ' / | +# | | |___| | | | __/ (__| < | | | | . \ | +# | \____|_| |_|\___|\___|_|\_\___|_| |_|_|\_\ | +# | | +# | Copyright Mathias Kettner 2020 mk@mathias-kettner.de | +# +------------------------------------------------------------------+ +# +# This file is part of Check_MK. +# The official homepage is at http://mathias-kettner.de/check_mk. +# +# check_mk is free software; you can redistribute it and/or modify it +# under the terms of the GNU General Public License as published by +# the Free Software Foundation in version 2. check_mk is distributed +# in the hope that it will be useful, but WITHOUT ANY WARRANTY; with- +# out even the implied warranty of MERCHANTABILITY or FITNESS FOR A +# PARTICULAR PURPOSE. See the GNU General Public License for more de- +# tails. You should have received a copy of the GNU General Public +# License along with GNU Make; see the file COPYING. If not, write +# to the Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, +# Boston, MA 02110-1301 USA. + +#example output +#<<>> +#power_consumption 1357 + + +from cmk.agent_based.v2 import Service, Result, State, CheckPlugin, Metric + + +def discover_hitachivsp_power_consumption(section): + for line in section: + yield Service(item=line[0]) + + +def check_hitachivsp_power_consumption(item, params, section): + for line in section: + if item == line[0]: + power = line[1] + yield Metric(name="Power", value=int(power)) + yield Result(state=State.OK, summary=f"Power {power}") + + +check_plugin_hitachivsp_power_consumption = CheckPlugin( + name="hitachivsp_power_consumption", + service_name="PowerConsumption %s", + discovery_function=discover_hitachivsp_power_consumption, + check_function=check_hitachivsp_power_consumption, + check_default_parameters={}, +) diff --git a/hitachi-vsp/2.3/local/lib/python3/cmk_addons/plugins/hitachivsp/agent_based/hitachivsp_sfps.py b/hitachi-vsp/2.3/local/lib/python3/cmk_addons/plugins/hitachivsp/agent_based/hitachivsp_sfps.py new file mode 100644 index 0000000..78baaa6 --- /dev/null +++ b/hitachi-vsp/2.3/local/lib/python3/cmk_addons/plugins/hitachivsp/agent_based/hitachivsp_sfps.py @@ -0,0 +1,94 @@ +#!/usr/bin/env python3 +# -*- encoding: utf-8; py-indent-offset: 4 -*- +# +------------------------------------------------------------------+ +# | ____ _ _ __ __ _ __ | +# | / ___| |__ ___ ___| | __ | \/ | |/ / | +# | | | | '_ \ / _ \/ __| |/ / | |\/| | ' / | +# | | |___| | | | __/ (__| < | | | | . \ | +# | \____|_| |_|\___|\___|_|\_\___|_| |_|_|\_\ | +# | | +# | Copyright Mathias Kettner 2020 mk@mathias-kettner.de | +# +------------------------------------------------------------------+ +# +# This file is part of Check_MK. +# The official homepage is at http://mathias-kettner.de/check_mk. +# +# check_mk is free software; you can redistribute it and/or modify it +# under the terms of the GNU General Public License as published by +# the Free Software Foundation in version 2. check_mk is distributed +# in the hope that it will be useful, but WITHOUT ANY WARRANTY; with- +# out even the implied warranty of MERCHANTABILITY or FITNESS FOR A +# PARTICULAR PURPOSE. See the GNU General Public License for more de- +# tails. You should have received a copy of the GNU General Public +# License along with GNU Make; see the file COPYING. If not, write +# to the Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, +# Boston, MA 02110-1301 USA. + +#example output +#<<>> +#portId status type speed portCondition +#1A Normal Short Wave 16 Gbps Available (Connected) +#3A Normal Short Wave 16 Gbps Available (Connected) +#5A Normal Short Wave 16 Gbps Available (Connected) +#7A Normal Short Wave 16 Gbps Available (Connected) +#1B Normal Short Wave 16 Gbps Available (Connected) +#3B Normal Short Wave 16 Gbps Available (Connected) +#5B Normal Short Wave 16 Gbps Available (Connected) +#7B Normal Short Wave 16 Gbps Available (Connected) +#2A Normal Short Wave 16 Gbps Available (Connected) +#4A Normal Short Wave 16 Gbps Available (Connected) +#6A Normal Short Wave 16 Gbps Available (Connected) +#8A Normal Short Wave 16 Gbps Available (Connected) +#2B Normal Short Wave 16 Gbps Available (Connected) +#4B Normal Short Wave 16 Gbps Available (Connected) +#6B Normal Short Wave 16 Gbps Available (Connected) +#8B Normal Short Wave 16 Gbps Available (Connected) + + +from cmk.agent_based.v2 import Service, Result, State, CheckPlugin + + +def discover_hitachivsp_sfps(section): + for line in section: + if "portId" not in line: + yield Service(item=line[0]) + + +def check_hitachivsp_sfps(item, params, section): + for line in section: + if item == line[0]: + status = line[1] + port_condition = line[4] + + if status == "Normal": + state = State.OK + summary = "SFP status is Normal" + elif status == "Warning": + state = State.WARN + summary = "SFP status is Warning" + elif status == "Not fix": + state = State.CRIT + summary ="SFP status is Not fix" + + yield Result(state=state, summary=summary) + + if port_condition == "Available (Connected)": + p_state = State.OK + p_summary = "SFP is Connected" + elif port_condition == "Available (Not Connected)": + p_state = State.WARN + p_summary = "SFP is not Connected" + elif port_condition == "Not Available": + p_state = State.CRIT + p_summary = "SFP is not available" + + yield Result(state=p_state, summary=p_summary) + + +check_plugin_hitachivsp_sfps = CheckPlugin( + name="hitachivsp_sfps", + service_name="SFP Port %s", + discovery_function=discover_hitachivsp_sfps, + check_function=check_hitachivsp_sfps, + check_default_parameters={}, +) diff --git a/hitachi-vsp/2.3/local/lib/python3/cmk_addons/plugins/hitachivsp/libexec/agent_hitachivsp b/hitachi-vsp/2.3/local/lib/python3/cmk_addons/plugins/hitachivsp/libexec/agent_hitachivsp new file mode 100755 index 0000000..74af4b4 --- /dev/null +++ b/hitachi-vsp/2.3/local/lib/python3/cmk_addons/plugins/hitachivsp/libexec/agent_hitachivsp @@ -0,0 +1,1394 @@ +#!/usr/bin/env python3 +# -*- encoding: utf-8; py-indent-offset: 4 -*- +# +------------------------------------------------------------------+ +# | ____ _ _ __ __ _ __ | +# | / ___| |__ ___ ___| | __ | \/ | |/ / | +# | | | | '_ \ / _ \/ __| |/ / | |\/| | ' / | +# | | |___| | | | __/ (__| < | | | | . \ | +# | \____|_| |_|\___|\___|_|\_\___|_| |_|_|\_\ | +# | | +# | Copyright Mathias Kettner 2020 mk@mathias-kettner.de | +# +------------------------------------------------------------------+ +# +# This file is part of Check_MK. +# The official homepage is at http://mathias-kettner.de/check_mk. +# +# check_mk is free software; you can redistribute it and/or modify it +# under the terms of the GNU General Public License as published by +# the Free Software Foundation in version 2. check_mk is distributed +# in the hope that it will be useful, but WITHOUT ANY WARRANTY; with- +# out even the implied warranty of MERCHANTABILITY or FITNESS FOR A +# PARTICULAR PURPOSE. See the GNU General Public License for more de- +# tails. You should have received a copy of the GNU General Public +# License along with GNU Make; see the file COPYING. If not, write +# to the Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, +# Boston, MA 02110-1301 USA. + +import sys +import getopt +import pprint +import json +import urllib3 +import requests + +def usage(): + sys.stderr.write("""Check_MK Hitachi VSP + +USAGE: agent_hitachivsp [OPTIONS] HOST + +OPTIONS: + -h, --help Show this help message and exit + --address Host address + --user Username + --password Password + --no-cert-check Disable certificate check +""") + sys.exit(1) + + +short_options = "h" +long_options = ["help", "username=", "password=", "address=", "demo", "no-cert-check"] + + +if len(sys.argv) < 2: + usage() + sys.exit(1) + +try: + opts, args = getopt.getopt(sys.argv[1:], short_options, long_options) +except getopt.GetoptError as err: + sys.stderr.write("%s\n" % err) + sys.exit(1) + + +opt_demo = False +opt_cert = True +args_dict = {} + + +for o,a in opts: + if o in [ "--address" ]: + args_dict["address"] = a + elif o in [ "--username" ]: + args_dict["username"] = a + elif o in [ "--password" ]: + args_dict["password"] = a + elif o in [ "--demo" ]: + opt_demo = True + elif o in [ "--no-cert-check" ]: + opt_cert = False + elif o in [ "-h", "--help" ]: + usage() + + +def query(url): + if not opt_cert: + urllib3.disable_warnings(urllib3.exceptions.InsecureRequestWarning) + response = requests.get(url, + auth=(args_dict["username"], args_dict["password"]), + verify=opt_cert) + raw_json = response.text + return raw_json + + +output_lines = [] +def output(line): +###this is working correctly only on python3. not needed for python2 +# if type(line) not in [str]: +# output_lines.append(pprint.pprint(line)) +# else: + output_lines.append(line) + + +def get_storage_info(): + if opt_demo: + raw_json = storage_info + return raw_json + url = "https://%(address)s/ConfigurationManager/v1/objects/storages/instance" % args_dict + return query(url) + + +def get_storage_pools(): + if opt_demo: + raw_json = storage_pools + return raw_json + url = "https://%(address)s/ConfigurationManager/v1/objects/pools" % args_dict + return query(url) + + +def get_storage_clprs(): + if opt_demo: + raw_json = storage_clprs + return raw_json + url = "https://%(address)s/ConfigurationManager/v1/objects/clprs" % args_dict + return query(url) + + +def get_storage_ldevs(): + if opt_demo: + raw_json = storage_ldevs + return raw_json + url = "https://%(address)s/ConfigurationManager/v1/objects/ldevs" % args_dict + return query(url) + + +def get_storage_parity_groups(): + if opt_demo: + raw_json = storage_parity_groups + return raw_json + url = "https://%(address)s/ConfigurationManager/v1/objects/parity-groups" % args_dict + return query(url) + + +def get_storage_hardware_status(): + if opt_demo: + raw_json = storage_hardware_status + return raw_json + url = "https://%(address)s/ConfigurationManager/v1/objects/components/instance" % args_dict + return query(url) + + +def process_storage_hardware_status(): + raw_json = get_storage_hardware_status() + full_data = json.loads(raw_json) + system = full_data["system"] + output("<<>>") + output("power_consumption\t%s" % (system["powerConsumption"])) + ctls = full_data["ctls"] + output("<<>>") + output("location\tstatus\ttemperature\ttemperatureStatus\tcharge") + for ctl in ctls: + output("%s\t%s\t%s\t%s\t%s" % (ctl["location"], ctl["status"], ctl["temperature"], ctl["temperatureStatus"], + ctl["charge"])) + + cachememories = full_data["cacheMemories"] + output("<<>>") + output("location\tstatus\tcacheSize") + for cachemem in cachememories: + output("%s\t%s\t%s" % (cachemem["location"], cachemem["status"], cachemem["cacheSize"])) + + channelsboards = full_data["chbs"] + output("<<>>") + output("location\tstatus\ttype") + for channelboard in channelsboards: + output("%s\t%s\t%s" % (channelboard["location"], channelboard["status"], channelboard["type"])) + + cacheflashmemories = full_data["cacheFlashMemories"] + output("<<>>") + output("location\tstatus\ttype") + for cacheflashmemory in cacheflashmemories: + output("%s\t%s\t%s" % (cacheflashmemory["location"], cacheflashmemory["status"], cacheflashmemory["type"])) + + disk_boards = full_data["dkbs"] + output("<<>>") + output("location\tstatus\ttype") + for dkb in disk_boards: + output("%s\t%s\t%s" % (dkb["location"], dkb["status"], dkb["type"])) + + sfps = full_data["sfps"] + output("<<>>") + output("portId\tstatus\ttype\tspeed\tportCondition") + for sfp in sfps: + output("%s\t%s\t%s\t%s\t%s" % (sfp["portId"], sfp["status"], sfp["type"], sfp["speed"], sfp["portCondition"])) + + backup_modules = full_data["bkmfs"] + output("<<>>") + output("location\tstatus\tbat_location\tbat_status\tbat_life") + for backup_module in backup_modules: + if backup_module["batteries"]: + battery = backup_module["batteries"][0] + output("%s\t%s\t%s\t%s\t%s" % (backup_module["location"], backup_module["status"], + battery["location"], + battery["status"], + battery["life"])) + else: + output("%s\t%s\t\t\t" % (backup_module["location"], backup_module["status"])) + + driveboxes = full_data["driveBoxes"] + output("<<>>") + output("drivebox_location\tdrive_location\tdrive_status\tdrive_recomend_Replacement") + for drivebox in driveboxes: + drives=drivebox["drives"] + for drive in drives: + output("%s\t%s\t%s\t%s" % (drivebox["location"], drive["location"], drive["status"], + drive["recomendReplacement"])) + + output("<<>>") + output("drivebox_location\tenc_location\tenc_status") + for drivebox in driveboxes: + encs=drivebox["encs"] + for enc in encs: + output("%s\t%s\t%s" % (drivebox["location"], enc["location"], enc["status"] )) + + output("<<>>") + output("drivebox_location\tdbps_location\tdbps_status") + for drivebox in driveboxes: + dbps=drivebox["dbps"] + for power_supply in dbps: + output("%s\t%s\t%s" % (drivebox["location"], power_supply["location"], power_supply["status"] )) + +def process_storage_parity_groups(): + output("<<>>") + raw_json = get_storage_parity_groups() + full_data = json.loads(raw_json) + data = full_data["data"] + output("parityGroupId\tnumOfLdevs\tusedCapacityRate\tclprId\tavailableVolumeCapacity\t" + "totalCapacity\tphysicalCapacity") + for parity_group in data: + output("%s\t%s\t%s\t%s\t%s\t%s\t%s" % (parity_group["parityGroupId"], parity_group["numOfLdevs"], + parity_group["usedCapacityRate"], parity_group["clprId"], + parity_group["availableVolumeCapacity"], parity_group["totalCapacity"], + parity_group["physicalCapacity"] )) + + +def process_storage_ldevs(): + output("<<>>") + raw_json = get_storage_ldevs() + full_data = json.loads(raw_json) + data = full_data["data"] + output("ldevId\tclprId\tbyteFormatCapacity\tblockCapacity\t" + "label\tstatus") + for ldev in data: + output("%s\t%s\t%s\t%s\t%s\t%s" % (ldev["ldevId"], ldev["clprId"], ldev["byteFormatCapacity"], + ldev["blockCapacity"], ldev["label"], ldev["status"])) + + +def process_storage_clprs(): + output("<<>>") + raw_json = get_storage_clprs() + full_data = json.loads(raw_json) + data = full_data["data"] + output("clprId\tcacheMemoryCapacity\tcacheMemoryUsedCapacity\twritePendingDataCapacity\t" + "writePendingDataCapacity\tcacheUsageRate") + for clpr in data: + output("%s\t%s\t%s\t%s\t%s" % (clpr["clprId"], clpr["cacheMemoryCapacity"], clpr["cacheMemoryUsedCapacity"], + clpr["writePendingDataCapacity"], clpr["cacheUsageRate"])) + + +def process_storage_pools (): + output("<<>>") + raw_json = get_storage_pools() + full_data = json.loads(raw_json) + data = full_data["data"] + output("poolID\tpoolType\tpoolName\ttotalPhysicalCapacity\ttotalPoolCapacity\tavailableVolumeCapacity\tusedCapacityRate\tpoolStatus") + for pool in data: + output("%s\t%s\t%s\t%s\t%s\t%s\t%s\t%s" % (pool["poolId"], pool["poolType"], pool["poolName"], + pool["totalPhysicalCapacity"], pool["totalPoolCapacity"], + pool["availableVolumeCapacity"], pool["usedCapacityRate"], + pool["poolStatus"],)) + + +def process_storage_info(): + output("<<>>") + raw_json = get_storage_info() + data = json.loads(raw_json) + output("%s\t%s\t%s\t%s" % (data["serialNumber"], data["storageDeviceId"], data["dkcMicroVersion"], data["model"])) + +def main(): + try: + process_storage_info() + process_storage_pools() + process_storage_clprs() + process_storage_ldevs() + process_storage_parity_groups() + process_storage_hardware_status() + sys.stdout.write("\n".join(output_lines) + "\n") + except Exception as e: + sys.stderr.write("Connection error: %s" % e) + sys.exit(1) + + +storage_info = """{ + "storageDeviceId": "666666666666", + "model": "VSP G700", + "serialNumber": 666666, + "ctl1Ip": "192.168.223.69", + "ctl2Ip": "192.168.223.70", + "dkcMicroVersion": "88-04-03/00", + "communicationModes": [ + { + "communicationMode": "lanConnectionMode" + } + ], + "isSecure": true +}""" + +storage_clprs="""{ + "data": [ + { + "clprId": 0, + "clprName": "CLPR0", + "cacheMemoryCapacity": 924672, + "cacheMemoryUsedCapacity": 901454, + "writePendingDataCapacity": 44959, + "sideFilesCapacity": 0, + "cacheUsageRate": 99, + "writePendingDataRate": 5, + "sideFilesUsageRate": 0 + } + ] +}""" + + +storage_hardware_status = """{ + "system": { + "powerConsumption": 1357 + }, + "ctls": [ + { + "location": "CTL1", + "status": "Normal", + "temperature": 23, + "temperatureStatus": "Normal", + "charge": 100, + "type": "-" + }, + { + "location": "CTL2", + "status": "Normal", + "temperature": 23, + "temperatureStatus": "Normal", + "charge": 100, + "type": "-" + } + ], + "cacheMemories": [ + { + "location": "CTL1 CMG0", + "status": "Normal", + "cacheSize": 256 + }, + { + "location": "CTL1 CMG1", + "status": "Normal", + "cacheSize": 256 + }, + { + "location": "CTL2 CMG0", + "status": "Normal", + "cacheSize": 256 + }, + { + "location": "CTL2 CMG1", + "status": "Normal", + "cacheSize": 256 + } + ], + "chbs": [ + { + "location": "CHB-1A", + "status": "Normal", + "type": "32G Ready 4Port FC" + }, + { + "location": "CHB-1B", + "status": "Normal", + "type": "32G Ready 4Port FC" + }, + { + "location": "CHB-2A", + "status": "Normal", + "type": "32G Ready 4Port FC" + }, + { + "location": "CHB-2B", + "status": "Normal", + "type": "32G Ready 4Port FC" + } + ], + "cacheFlashMemories": [ + { + "location": "CFM-10", + "status": "Normal", + "type": "BM45" + }, + { + "location": "CFM-11", + "status": "Normal", + "type": "BM45" + }, + { + "location": "CFM-20", + "status": "Normal", + "type": "BM45" + }, + { + "location": "CFM-21", + "status": "Normal", + "type": "BM45" + } + ], + "dkbs": [ + { + "location": "DKB-1G", + "status": "Normal", + "type": "Disk Board" + }, + { + "location": "DKB-1H", + "status": "Normal", + "type": "Disk Board" + }, + { + "location": "DKB-2G", + "status": "Normal", + "type": "Disk Board" + }, + { + "location": "DKB-2H", + "status": "Normal", + "type": "Disk Board" + } + ], + "lanbs": [ + { + "location": "LAN1", + "status": "Normal" + }, + { + "location": "LAN2", + "status": "Normal" + } + ], + "sfps": [ + { + "portId": "1A", + "status": "Normal", + "type": "Short Wave", + "speed": "16 Gbps", + "portCondition": "Available (Connected)" + }, + { + "portId": "3A", + "status": "Normal", + "type": "Short Wave", + "speed": "16 Gbps", + "portCondition": "Available (Connected)" + }, + { + "portId": "5A", + "status": "Normal", + "type": "Short Wave", + "speed": "16 Gbps", + "portCondition": "Available (Connected)" + }, + { + "portId": "7A", + "status": "Normal", + "type": "Short Wave", + "speed": "16 Gbps", + "portCondition": "Available (Connected)" + }, + { + "portId": "1B", + "status": "Normal", + "type": "Short Wave", + "speed": "16 Gbps", + "portCondition": "Available (Connected)" + }, + { + "portId": "3B", + "status": "Normal", + "type": "Short Wave", + "speed": "16 Gbps", + "portCondition": "Available (Connected)" + }, + { + "portId": "5B", + "status": "Normal", + "type": "Short Wave", + "speed": "16 Gbps", + "portCondition": "Available (Connected)" + }, + { + "portId": "7B", + "status": "Normal", + "type": "Short Wave", + "speed": "16 Gbps", + "portCondition": "Available (Connected)" + }, + { + "portId": "2A", + "status": "Normal", + "type": "Short Wave", + "speed": "16 Gbps", + "portCondition": "Available (Connected)" + }, + { + "portId": "4A", + "status": "Normal", + "type": "Short Wave", + "speed": "16 Gbps", + "portCondition": "Available (Connected)" + }, + { + "portId": "6A", + "status": "Normal", + "type": "Short Wave", + "speed": "16 Gbps", + "portCondition": "Available (Connected)" + }, + { + "portId": "8A", + "status": "Normal", + "type": "Short Wave", + "speed": "16 Gbps", + "portCondition": "Available (Connected)" + }, + { + "portId": "2B", + "status": "Normal", + "type": "Short Wave", + "speed": "16 Gbps", + "portCondition": "Available (Connected)" + }, + { + "portId": "4B", + "status": "Normal", + "type": "Short Wave", + "speed": "16 Gbps", + "portCondition": "Available (Connected)" + }, + { + "portId": "6B", + "status": "Normal", + "type": "Short Wave", + "speed": "16 Gbps", + "portCondition": "Available (Connected)" + }, + { + "portId": "8B", + "status": "Normal", + "type": "Short Wave", + "speed": "16 Gbps", + "portCondition": "Available (Connected)" + } + ], + "bkmfs": [ + { + "location": "BKMF-10", + "status": "Normal", + "batteries": [] + }, + { + "location": "BKMF-11", + "status": "Normal", + "batteries": [ + { + "location": "BAT-B11", + "status": "Normal", + "life": 90 + } + ] + }, + { + "location": "BKMF-12", + "status": "Normal", + "batteries": [ + { + "location": "BAT-B12", + "status": "Normal", + "life": 90 + } + ] + }, + { + "location": "BKMF-13", + "status": "Normal", + "batteries": [ + { + "location": "BAT-B13", + "status": "Normal", + "life": 90 + } + ] + }, + { + "location": "BKMF-20", + "status": "Normal", + "batteries": [] + }, + { + "location": "BKMF-21", + "status": "Normal", + "batteries": [ + { + "location": "BAT-B21", + "status": "Normal", + "life": 90 + } + ] + }, + { + "location": "BKMF-22", + "status": "Normal", + "batteries": [ + { + "location": "BAT-B22", + "status": "Normal", + "life": 90 + } + ] + }, + { + "location": "BKMF-23", + "status": "Normal", + "batteries": [ + { + "location": "BAT-B23", + "status": "Normal", + "life": 90 + } + ] + } + ], + "dkcpss": [ + { + "location": "DKCPS1", + "status": "Normal" + }, + { + "location": "DKCPS2", + "status": "Normal" + } + ], + "driveBoxes": [ + { + "location": "DB-00", + "type": "DBF", + "led": "OFF", + "drives": [ + { + "location": "HDD00-00", + "modelCode": "NFHAJ-Q13RSS", + "status": "Normal", + "usage": "DATA", + "recomendReplacement": 0 + }, + { + "location": "HDD00-01", + "modelCode": "NFHAJ-Q13RSS", + "status": "Normal", + "usage": "DATA", + "recomendReplacement": 0 + }, + { + "location": "HDD00-02", + "modelCode": "NFHAJ-Q13RSS", + "status": "Normal", + "usage": "DATA", + "recomendReplacement": 0 + }, + { + "location": "HDD00-03", + "modelCode": "NFHAJ-Q13RSS", + "status": "Normal", + "usage": "DATA", + "recomendReplacement": 0 + }, + { + "location": "HDD00-04", + "modelCode": "NFHAJ-Q13RSS", + "status": "Normal", + "usage": "DATA", + "recomendReplacement": 0 + }, + { + "location": "HDD00-05", + "modelCode": "NFHAJ-Q13RSS", + "status": "Normal", + "usage": "DATA", + "recomendReplacement": 0 + }, + { + "location": "HDD00-11", + "modelCode": "NFHAJ-Q13RSS", + "status": "Normal", + "usage": "Spare", + "recomendReplacement": 0 + } + ], + "encs": [ + { + "location": "ENC00-1", + "status": "Normal" + }, + { + "location": "ENC00-2", + "status": "Normal" + } + ], + "dbps": [ + { + "location": "DBPS00-1", + "status": "Normal" + }, + { + "location": "DBPS00-2", + "status": "Normal" + } + ] + }, + { + "location": "DB-01", + "type": "DBF", + "led": "OFF", + "drives": [ + { + "location": "HDD01-00", + "modelCode": "NFHAK-Q13RSS", + "status": "Normal", + "usage": "DATA", + "recomendReplacement": 0 + }, + { + "location": "HDD01-01", + "modelCode": "NFHAK-Q13RSS", + "status": "Normal", + "usage": "DATA", + "recomendReplacement": 0 + }, + { + "location": "HDD01-02", + "modelCode": "NFHAK-Q13RSS", + "status": "Normal", + "usage": "DATA", + "recomendReplacement": 0 + }, + { + "location": "HDD01-03", + "modelCode": "NFHAK-Q13RSS", + "status": "Normal", + "usage": "DATA", + "recomendReplacement": 0 + }, + { + "location": "HDD01-04", + "modelCode": "NFHAK-Q13RSS", + "status": "Normal", + "usage": "DATA", + "recomendReplacement": 0 + }, + { + "location": "HDD01-05", + "modelCode": "NFHAK-Q13RSS", + "status": "Normal", + "usage": "DATA", + "recomendReplacement": 0 + } + ], + "encs": [ + { + "location": "ENC01-1", + "status": "Normal" + }, + { + "location": "ENC01-2", + "status": "Normal" + } + ], + "dbps": [ + { + "location": "DBPS01-1", + "status": "Normal" + }, + { + "location": "DBPS01-2", + "status": "Normal" + } + ] + }, + { + "location": "DB-02", + "type": "DBF", + "led": "OFF", + "drives": [ + { + "location": "HDD02-00", + "modelCode": "NFHAJ-Q13RSS", + "status": "Normal", + "usage": "DATA", + "recomendReplacement": 0 + }, + { + "location": "HDD02-01", + "modelCode": "NFHAJ-Q13RSS", + "status": "Normal", + "usage": "DATA", + "recomendReplacement": 0 + }, + { + "location": "HDD02-02", + "modelCode": "NFHAJ-Q13RSS", + "status": "Normal", + "usage": "DATA", + "recomendReplacement": 0 + }, + { + "location": "HDD02-03", + "modelCode": "NFHAJ-Q13RSS", + "status": "Normal", + "usage": "DATA", + "recomendReplacement": 0 + }, + { + "location": "HDD02-04", + "modelCode": "NFHAJ-Q13RSS", + "status": "Normal", + "usage": "DATA", + "recomendReplacement": 0 + }, + { + "location": "HDD02-05", + "modelCode": "NFHAJ-Q13RSS", + "status": "Normal", + "usage": "DATA", + "recomendReplacement": 0 + } + ], + "encs": [ + { + "location": "ENC02-1", + "status": "Normal" + }, + { + "location": "ENC02-2", + "status": "Normal" + } + ], + "dbps": [ + { + "location": "DBPS02-1", + "status": "Normal" + }, + { + "location": "DBPS02-2", + "status": "Normal" + } + ] + }, + { + "location": "DB-03", + "type": "DBF", + "led": "OFF", + "drives": [ + { + "location": "HDD03-00", + "modelCode": "NFHAK-Q13RSS", + "status": "Normal", + "usage": "DATA", + "recomendReplacement": 0 + }, + { + "location": "HDD03-01", + "modelCode": "NFHAK-Q13RSS", + "status": "Normal", + "usage": "DATA", + "recomendReplacement": 0 + }, + { + "location": "HDD03-02", + "modelCode": "NFHAK-Q13RSS", + "status": "Normal", + "usage": "DATA", + "recomendReplacement": 0 + }, + { + "location": "HDD03-03", + "modelCode": "NFHAK-Q13RSS", + "status": "Normal", + "usage": "DATA", + "recomendReplacement": 0 + }, + { + "location": "HDD03-04", + "modelCode": "NFHAK-Q13RSS", + "status": "Normal", + "usage": "DATA", + "recomendReplacement": 0 + }, + { + "location": "HDD03-05", + "modelCode": "NFHAK-Q13RSS", + "status": "Normal", + "usage": "DATA", + "recomendReplacement": 0 + } + ], + "encs": [ + { + "location": "ENC03-1", + "status": "Normal" + }, + { + "location": "ENC03-2", + "status": "Normal" + } + ], + "dbps": [ + { + "location": "DBPS03-1", + "status": "Normal" + }, + { + "location": "DBPS03-2", + "status": "Normal" + } + ] + } + ], + "fans": [], + "upsMode": "Standard Mode", + "pecbs": [], + "chbb": {}, + "pcps": [], + "swpks": [], + "chbbfans": [], + "chbbpss": [] +}""" + + +storage_pools = """ +{ + "data" : [ { + "poolId" : 0, + "poolStatus" : "POLN", + "usedCapacityRate" : 47, + "usedPhysicalCapacityRate" : 47, + "poolName" : "RAID6_HDT_01", + "availableVolumeCapacity" : 208964826, + "availablePhysicalVolumeCapacity" : 208964826, + "totalPoolCapacity" : 397630296, + "totalPhysicalCapacity" : 397630296, + "numOfLdevs" : 136, + "firstLdevId" : 3, + "warningThreshold" : 80, + "depletionThreshold" : 90, + "virtualVolumeCapacityRate" : -1, + "isMainframe" : false, + "isShrinking" : true, + "locatedVolumeCount" : 242, + "totalLocatedCapacity" : 234976098, + "blockingMode" : "NB", + "totalReservedCapacity" : 0, + "reservedVolumeCount" : 0, + "poolActionMode" : "AUT", + "tierOperationStatus" : "MON", + "dat" : "VAL", + "poolType" : "RT", + "monitoringMode" : "CM", + "tiers" : [ { + "tierNumber" : 1, + "tierLevelRange" : "00000001", + "tierDeltaRange" : "00000005", + "tierUsedCapacity" : 31524696, + "tierTotalCapacity" : 37087848, + "tablespaceRate" : 10, + "performanceRate" : 4, + "progressOfReplacing" : 100, + "bufferRate" : 5 + }, { + "tierNumber" : 2, + "tierLevelRange" : "00000000", + "tierDeltaRange" : "00000005", + "tierUsedCapacity" : 98679336, + "tierTotalCapacity" : 116093208, + "tablespaceRate" : 10, + "performanceRate" : 12, + "progressOfReplacing" : 100, + "bufferRate" : 5 + }, { + "tierNumber" : 3, + "tierLevelRange" : "00000000", + "tierDeltaRange" : "00000000", + "tierUsedCapacity" : 58461480, + "tierTotalCapacity" : 244449240, + "tablespaceRate" : 10, + "performanceRate" : 62, + "progressOfReplacing" : 100, + "bufferRate" : 5 + } ], + "dataReductionAccelerateCompCapacity" : 0, + "dataReductionAccelerateCompRate" : 0, + "compressionRate" : 0, + "dataReductionAccelerateCompIncludingSystemData" : { + "isReductionCapacityAvailable" : true, + "reductionCapacity" : 0, + "isReductionRateAvailable" : true, + "reductionRate" : 0 + }, + "capacitiesExcludingSystemData" : { + "usedVirtualVolumeCapacity" : 386386968576 + } + }, { + "poolId" : 1, + "poolStatus" : "POLN", + "usedCapacityRate" : 0, + "usedPhysicalCapacityRate" : 0, + "snapshotCount" : 0, + "poolName" : "THIN_IMAGE_POOL", + "availableVolumeCapacity" : 46453344, + "availablePhysicalVolumeCapacity" : 46453344, + "totalPoolCapacity" : 46453344, + "totalPhysicalCapacity" : 46453344, + "numOfLdevs" : 16, + "firstLdevId" : 22, + "warningThreshold" : 80, + "virtualVolumeCapacityRate" : -1, + "isMainframe" : false, + "isShrinking" : false, + "poolType" : "HTI", + "dataReductionAccelerateCompCapacity" : 0, + "dataReductionAccelerateCompRate" : 0, + "compressionRate" : 0, + "dataReductionAccelerateCompIncludingSystemData" : { + "isReductionCapacityAvailable" : true, + "reductionCapacity" : 0, + "isReductionRateAvailable" : false + }, + "capacitiesExcludingSystemData" : { + "usedVirtualVolumeCapacity" : 0 + } + } ] +}""" + +storage_ldevs = """ { + "data" : [ { + "ldevId" : 0, + "clprId" : 0, + "emulationType" : "OPEN-V-CVS", + "byteFormatCapacity" : "500.00 G", + "blockCapacity" : 1048576000, + "numOfPorts" : 4, + "ports" : [ { + "portId" : "CL2-B", + "hostGroupNumber" : 1, + "hostGroupName" : "demosrv.example.com", + "lun" : 1 + }, { + "portId" : "CL1-B", + "hostGroupNumber" : 1, + "hostGroupName" : "demosrv.example.com", + "lun" : 1 + }, { + "portId" : "CL2-A", + "hostGroupNumber" : 1, + "hostGroupName" : "demosrv.example.com", + "lun" : 1 + }, { + "portId" : "CL1-A", + "hostGroupNumber" : 1, + "hostGroupName" : "demosrv.example.com", + "lun" : 1 + } ], + "attributes" : [ "CVS", "HDP" ], + "label" : "vg_test0", + "status" : "NML", + "mpBladeId" : 0, + "ssid" : "0004", + "poolId" : 0, + "numOfUsedBlock" : 0, + "isFullAllocationEnabled" : false, + "resourceGroupId" : 0, + "dataReductionStatus" : "DISABLED", + "dataReductionMode" : "disabled", + "isAluaEnabled" : false + }, { + "ldevId" : 1, + "clprId" : 0, + "emulationType" : "OPEN-V-CVS", + "byteFormatCapacity" : "400.00 G", + "blockCapacity" : 838860800, + "numOfPorts" : 4, + "ports" : [ { + "portId" : "CL2-B", + "hostGroupNumber" : 1, + "hostGroupName" : "demosrv.example.com", + "lun" : 2 + }, { + "portId" : "CL1-B", + "hostGroupNumber" : 1, + "hostGroupName" : "demosrv.example.com", + "lun" : 2 + }, { + "portId" : "CL2-A", + "hostGroupNumber" : 1, + "hostGroupName" : "demosrv.example.com", + "lun" : 2 + }, { + "portId" : "CL1-A", + "hostGroupNumber" : 1, + "hostGroupName" : "demosrv.example.com", + "lun" : 2 + } ], + "attributes" : [ "CVS", "HDP" ], + "label" : "vg_test1", + "status" : "NML", + "mpBladeId" : 1, + "ssid" : "0004", + "poolId" : 0, + "numOfUsedBlock" : 0, + "isFullAllocationEnabled" : false, + "resourceGroupId" : 0, + "dataReductionStatus" : "DISABLED", + "dataReductionMode" : "disabled", + "isAluaEnabled" : false + }, { + "ldevId" : 2, + "clprId" : 0, + "emulationType" : "OPEN-V-CVS", + "byteFormatCapacity" : "10.00 T", + "blockCapacity" : 21474836480, + "numOfPorts" : 52, + "ports" : [ { + "portId" : "CL2-B", + "hostGroupNumber" : 2, + "hostGroupName" : "demosrv0803", + "lun" : 6 + }, { + "portId" : "CL1-B", + "hostGroupNumber" : 2, + "hostGroupName" : "demosrv0803", + "lun" : 6 + }, { + "portId" : "CL2-A", + "hostGroupNumber" : 2, + "hostGroupName" : "demosrv0803", + "lun" : 6 + }, { + "portId" : "CL1-A", + "hostGroupNumber" : 2, + "hostGroupName" : "demosrv0803", + "lun" : 6 + } ], + "attributes" : [ "CVS", "HDP" ], + "label" : "vmware_legacy_ssd0", + "status" : "NML", + "mpBladeId" : 0, + "ssid" : "0004", + "poolId" : 0, + "numOfUsedBlock" : 9604460544, + "isFullAllocationEnabled" : false, + "resourceGroupId" : 0, + "dataReductionStatus" : "DISABLED", + "dataReductionMode" : "disabled", + "isAluaEnabled" : false + }, { + "ldevId" : 3, + "clprId" : 0, + "emulationType" : "OPEN-V-CVS", + "byteFormatCapacity" : "10.00 T", + "blockCapacity" : 21474836480, + "numOfPorts" : 52, + "ports" : [ { + "portId" : "CL2-B", + "hostGroupNumber" : 2, + "hostGroupName" : "demosrv0803", + "lun" : 5 + }, { + "portId" : "CL1-B", + "hostGroupNumber" : 2, + "hostGroupName" : "demosrv0803", + "lun" : 5 + }, { + "portId" : "CL2-A", + "hostGroupNumber" : 2, + "hostGroupName" : "demosrv0803", + "lun" : 5 + }, { + "portId" : "CL1-A", + "hostGroupNumber" : 2, + "hostGroupName" : "demosrv0803", + "lun" : 5 + } ], + "attributes" : [ "CVS", "HDP" ], + "label" : "vmware_legacy_ssd1", + "status" : "NML", + "mpBladeId" : 1, + "ssid" : "0004", + "poolId" : 0, + "numOfUsedBlock" : 7754084352, + "isFullAllocationEnabled" : false, + "resourceGroupId" : 0, + "dataReductionStatus" : "DISABLED", + "dataReductionMode" : "disabled", + "isAluaEnabled" : false + }, { + "ldevId" : 4, + "clprId" : 0, + "emulationType" : "OPEN-V-CVS", + "byteFormatCapacity" : "5.00 T", + "blockCapacity" : 10737418240, + "numOfPorts" : 52, + "ports" : [ { + "portId" : "CL2-B", + "hostGroupNumber" : 2, + "hostGroupName" : "demosrv0803", + "lun" : 4 + }, { + "portId" : "CL1-B", + "hostGroupNumber" : 2, + "hostGroupName" : "demosrv0803", + "lun" : 4 + }, { + "portId" : "CL2-A", + "hostGroupNumber" : 2, + "hostGroupName" : "demosrv0803", + "lun" : 4 + }, { + "portId" : "CL1-A", + "hostGroupNumber" : 2, + "hostGroupName" : "demosrv0803", + "lun" : 4 + } ], + "attributes" : [ "CVS", "HDP" ], + "label" : "vmware_legacy_ssd2", + "status" : "NML", + "mpBladeId" : 0, + "ssid" : "0004", + "poolId" : 0, + "numOfUsedBlock" : 5074944, + "isFullAllocationEnabled" : false, + "resourceGroupId" : 0, + "dataReductionStatus" : "DISABLED", + "dataReductionMode" : "disabled", + "isAluaEnabled" : false + }, { + "ldevId" : 5, + "clprId" : 0, + "emulationType" : "OPEN-V-CVS", + "byteFormatCapacity" : "5.00 T", + "blockCapacity" : 10737418240, + "numOfPorts" : 52, + "ports" : [ { + "portId" : "CL2-B", + "hostGroupNumber" : 2, + "hostGroupName" : "demosrv0803", + "lun" : 3 + }, { + "portId" : "CL1-B", + "hostGroupNumber" : 2, + "hostGroupName" : "demosrv0803", + "lun" : 3 + }, { + "portId" : "CL2-A", + "hostGroupNumber" : 2, + "hostGroupName" : "demosrv0803", + "lun" : 3 + }, { + "portId" : "CL1-A", + "hostGroupNumber" : 2, + "hostGroupName" : "demosrv0803", + "lun" : 3 + } ], + "attributes" : [ "CVS", "HDP" ], + "label" : "vmware_legacy_ssd3", + "status" : "NML", + "mpBladeId" : 1, + "ssid" : "0004", + "poolId" : 0, + "numOfUsedBlock" : 1014042624, + "isFullAllocationEnabled" : false, + "resourceGroupId" : 0, + "dataReductionStatus" : "DISABLED", + "dataReductionMode" : "disabled", + "isAluaEnabled" : false + } ] +}""" + +storage_parity_groups = """ { + "data": [ + { + "parityGroupId": "1-1", + "numOfLdevs": 26, + "usedCapacityRate": 44, + "availableVolumeCapacity": 87245, + "raidLevel": "RAID5", + "raidType": "3D+1P", + "clprId": 0, + "driveType": "NFHAF-Q13RSS", + "driveTypeName": "SSD(FMC)", + "totalCapacity": 157286, + "physicalCapacity": 39321, + "isAcceleratedCompressionEnabled": true, + "availableVolumeCapacityInKB": 91483790592 + }, + { + "parityGroupId": "1-2", + "numOfLdevs": 51, + "usedCapacityRate": 93, + "availableVolumeCapacity": 10448, + "raidLevel": "RAID5", + "raidType": "3D+1P", + "clprId": 0, + "driveType": "NFHAF-Q13RSS", + "driveTypeName": "SSD(FMC)", + "totalCapacity": 157286, + "physicalCapacity": 39321, + "isAcceleratedCompressionEnabled": true, + "availableVolumeCapacityInKB": 10955611392 + }, + { + "parityGroupId": "1-3", + "numOfLdevs": 25, + "usedCapacityRate": 42, + "availableVolumeCapacity": 90317, + "raidLevel": "RAID5", + "raidType": "3D+1P", + "clprId": 0, + "driveType": "NFHAF-Q13RSS", + "driveTypeName": "SSD(FMC)", + "totalCapacity": 157286, + "physicalCapacity": 39321, + "isAcceleratedCompressionEnabled": true, + "availableVolumeCapacityInKB": 94704917760 + }, + { + "parityGroupId": "1-4", + "numOfLdevs": 52, + "usedCapacityRate": 95, + "availableVolumeCapacity": 7376, + "raidLevel": "RAID5", + "raidType": "3D+1P", + "clprId": 0, + "driveType": "NFHAF-Q13RSS", + "driveTypeName": "SSD(FMC)", + "totalCapacity": 157286, + "physicalCapacity": 39321, + "isAcceleratedCompressionEnabled": true, + "availableVolumeCapacityInKB": 7734484224 + }, + { + "parityGroupId": "1-5", + "numOfLdevs": 54, + "usedCapacityRate": 99, + "availableVolumeCapacity": 1232, + "raidLevel": "RAID5", + "raidType": "3D+1P", + "clprId": 0, + "driveType": "NFHAF-Q13RSS", + "driveTypeName": "SSD(FMC)", + "totalCapacity": 157286, + "physicalCapacity": 39321, + "isAcceleratedCompressionEnabled": true, + "availableVolumeCapacityInKB": 1292229888 + }, + { + "parityGroupId": "1-6", + "numOfLdevs": 25, + "usedCapacityRate": 42, + "availableVolumeCapacity": 90317, + "raidLevel": "RAID5", + "raidType": "3D+1P", + "clprId": 0, + "driveType": "NFHAF-Q13RSS", + "driveTypeName": "SSD(FMC)", + "totalCapacity": 157286, + "physicalCapacity": 39321, + "isAcceleratedCompressionEnabled": true, + "availableVolumeCapacityInKB": 94704917760 + } + ] +}""" +if __name__ == "__main__": + main() diff --git a/hitachi-vsp/2.3/local/lib/python3/cmk_addons/plugins/hitachivsp/rulesets/hitachivsp.py b/hitachi-vsp/2.3/local/lib/python3/cmk_addons/plugins/hitachivsp/rulesets/hitachivsp.py new file mode 100644 index 0000000..dc76532 --- /dev/null +++ b/hitachi-vsp/2.3/local/lib/python3/cmk_addons/plugins/hitachivsp/rulesets/hitachivsp.py @@ -0,0 +1,45 @@ +#!/usr/bin/env python3 + +from cmk.rulesets.v1.form_specs.validators import LengthInRange +from cmk.rulesets.v1.form_specs import Dictionary, DictElement, String, Password, BooleanChoice, DefaultValue +from cmk.rulesets.v1.rule_specs import SpecialAgent, Topic, Title, Help + + +def _formspec(): + return Dictionary( + title=Title("Check HITACHI VSP Storages"), + help_text=Help("This rule set selects the special agent for Hitachi VSP " + "Storages instead of the normal Check_MK agent and allows " + "monitoring via Web API. "), + elements={ + "user": DictElement( + required=True, + parameter_form=String( + title=Title("Username"), + custom_validate=(LengthInRange(min_value=1),), + ), + ), + "password": DictElement( + required=True, + parameter_form=Password( + title=Title("Password"), + custom_validate=(LengthInRange(min_value=1),), + ) + ), + "cert": DictElement( + required=True, + parameter_form=BooleanChoice( + title=Title("SSL certificate verification"), + prefill=DefaultValue(True), + ) + ), + }, + ) + + +rule_spec_agent_config_hitachivsp = SpecialAgent( + topic=Topic.STORAGE, + name="hitachivsp", + title=Title("Hitachi VSP"), + parameter_form=_formspec, +) diff --git a/hitachi-vsp/2.3/local/lib/python3/cmk_addons/plugins/hitachivsp/server_side_calls/special_agent.py b/hitachi-vsp/2.3/local/lib/python3/cmk_addons/plugins/hitachivsp/server_side_calls/special_agent.py new file mode 100644 index 0000000..1c1c86f --- /dev/null +++ b/hitachi-vsp/2.3/local/lib/python3/cmk_addons/plugins/hitachivsp/server_side_calls/special_agent.py @@ -0,0 +1,50 @@ +#!/usr/bin/env python3 +# +# -*- encoding: utf-8; py-indent-offset: 4 -*- +# +------------------------------------------------------------------+ +# | ____ _ _ __ __ _ __ | +# | / ___| |__ ___ ___| | __ | \/ | |/ / | +# | | | | '_ \ / _ \/ __| |/ / | |\/| | ' / | +# | | |___| | | | __/ (__| < | | | | . \ | +# | \____|_| |_|\___|\___|_|\_\___|_| |_|_|\_\ | +# | | +# | Copyright Mathias Kettner 2017 mk@mathias-kettner.de | +# +------------------------------------------------------------------+ +# +# This file is part of Check_MK. +# The official homepage is at http://mathias-kettner.de/check_mk. +# +# check_mk is free software; you can redistribute it and/or modify it +# under the terms of the GNU General Public License as published by +# the Free Software Foundation in version 2. check_mk is distributed +# in the hope that it will be useful, but WITHOUT ANY WARRANTY; with- +# out even the implied warranty of MERCHANTABILITY or FITNESS FOR A +# PARTICULAR PURPOSE. See the GNU General Public License for more de- +# tails. You should have received a copy of the GNU General Public +# License along with GNU Make; see the file COPYING. If not, write +# to the Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, +# Boston, MA 02110-1301 USA. + +from cmk.server_side_calls.v1 import noop_parser, SpecialAgentConfig, SpecialAgentCommand + + +def _agent_arguments(params, host_config): + address = (host_config.ipv4_config or host_config.ipv6_config).address + + args = [ + "--address", address, + "--user", params["user"], + "--password", params['password'].unsafe(), + ] + + if params["cert"] is False: + args.append("--no-cert-check") + + yield SpecialAgentCommand(command_arguments=args) + + +special_agent_hitachivsp = SpecialAgentConfig( + name="hitachivsp", + parameter_parser=noop_parser, + commands_function=_agent_arguments, +)