checkmk-plugins/hitachi-vsp/agent_hitachivsp
2020-08-06 20:41:53 +03:00

564 lines
16 KiB
Python
Executable File

#!/usr/bin/env python
# -*- 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
#from requests.packages.urllib3.exceptions import InsecureRequestWarning
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"]
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 = True
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 opt_cert == False:
requests.packages.urllib3.disable_warnings(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):
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 process_storage_ldevs():
output("<<<hitachi_storage_ldevs:sep(9)>>>")
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("<<<hitachi_storage_clprs:sep(9)>>>")
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("<<<hitachi_storage_pools:sep(9)>>>")
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("<<<hitachi_storage_info:sep(9)>>>")
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()
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_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
} ]
}"""
if __name__ == "__main__":
main()