checkmk-plugins/check_mk-scality-ring/local/share/check_mk/checks/scality

168 lines
5.7 KiB
Python

#!/usr/bin/env python3
# -*- coding: utf-8 -*-
# Copyright (C) 2019 tribe29 GmbH - License: GNU General Public License v2
# This file is part of Checkmk (https://checkmk.com). It is subject to the terms and
# conditions defined in the file COPYING, which is part of this source code package.
# NOTE: Careful when replacing the *-import below with a more specific import. This can cause
# problems because it might remove variables from the check-context which are necessary for
# resolving legacy discovery results such as [("SUMMARY", "diskstat_default_levels")]. Furthermore,
# it might also remove variables needed for accessing discovery rulesets.
#from cmk.base.check_legacy_includes.cisco_sensor_item import * # pylint: disable=wildcard-import,unused-wildcard-import
def inventory_scality_disk(info):
for line in info[0]:
yield (line[0],{})
def check_scality_disk(item, params, info):
if params.get("disks"):
warn, crit = params["disks"]
for line in info[0]:
if item in line:
ringdisktotal = int(line[3])
perfdata = [("Disks", ringdisktotal)]
infotext = "Number of disks: %s. " %ringdisktotal
if ringdisktotal <= warn:
if ringdisktotal <= crit:
infotext += "This is lower or equal with %s, critical level" %crit
yield 2, infotext, perfdata
else:
infotext += "This is lower or equal with %s, warning level" %warn
yield 1, infotext, perfdata
else:
yield 0, infotext, perfdata
else:
for line in info[0]:
if item in line:
ringdisktotal = line[3]
perfdata = [("Disks", ringdisktotal)]
infotext = "Number of disks: %s" %ringdisktotal
yield 0, infotext, perfdata
check_info["scality_ring.disk"] = {
"check_function": check_scality_disk,
"inventory_function": inventory_scality_disk,
"service_description": "Ring %s Disks",
"has_perfdata": True,
"group": "scality_disks"
}
##############RING STATUS############
def inventory_scality_supervisor(info):
for line in info[1]:
yield (line[0],{})
def check_scality_supervisor(item, no_params, info):
for line in info[1]:
if item == str(line[0]):
infotext = ""
status = 0
supNbSrvTotal = int(line[1])
supNbSrvOk = int(line[2])
supNbSrvNok = int(line[3])
supAvailable = int(line[4])
if supAvailable != 1 :
status = 2
infotext += "Supervisor is not available"
yield status, infotext
else:
infotext = "Supervisor is available "
yield status, infotext
if supNbSrvNok > 0 :
status = 2
infotext = "There are %s unavailable servers" %supNbSrvNok
yield status, infotext
else:
infotext = "All servers are available"
yield status, infotext
check_info["scality_ring.supervisor"] = {
"check_function": check_scality_supervisor,
"inventory_function": inventory_scality_supervisor,
"service_description": "Supervisor %s",
}
#############Storage#############
from cmk.base.check_legacy_includes.df import *
from cmk.base.check_legacy_includes.size_trend import *
#factory_settings["filesystem_default_levels"] = FILESYSTEM_DEFAULT_LEVELS
def inventory_scality_storage(info):
for line in info[0]:
yield (line[0],{})
def check_scality_storage(item, params, info):
for line in info[0]:
if item in line:
ringStorageAvailable = float(line[5])
ringStorageTotal = float(line[6])
fslist=[(item, ringStorageTotal, ringStorageAvailable, 0)]
return df_check_filesystem_list(item, params, fslist)
check_info["scality_ring.storage"] = {
"check_function": check_scality_storage,
"inventory_function": inventory_scality_storage,
"service_description": "Ring %s Storage",
"default_levels_variable": "filesystem_default_levels",
"has_perfdata": True,
"group": "filesystem",
}
##############RING STATUS############
def inventory_scality_ring(info):
for line in info[0]:
yield (line[0],{})
def check_scality_ring(item, no_params, info):
for line in info[0]:
if item in line:
ringstaterun = line[1]
ringstate = line[2]
if ringstate == "RUN":
status = 0
text = "Ring is in Run State"
elif ringstate =="LOOP":
status = 2
text = "Ring is LOOP State"
else:
status = 2
text = "Ring is in Balancing State"
yield status, text
check_info["scality_ring"] = {
"check_function": check_scality_ring,
"inventory_function": inventory_scality_ring,
"service_description": "Ring %s State",
"snmp_info": [
(".1.3.6.1.4.1.37489.2.1.1.1.4.1.1",
[
"2", #ringName
"3", #ringStateRun
"8", #ringState
"9", #ringDiskTotal
"13", #ringStorageUsed
"14", #ringStorageAvailable
"15", #ringStorageTotal
]),
(".1.3.6.1.4.1.37489.2.1.1.1.4.2.1",
[
"2", #supName
"5", #supNbSrvTotal
"6", #supNbSrvOK
"7", #supNbSrvNok
"8", #supAvailable
],
),
],
"snmp_scan_function": lambda oid: "scality" in oid(".1.3.6.1.2.1.1.1.0").lower(),
}