1
0

Added netgear_readynas.

This commit is contained in:
2017-11-28 15:04:29 +01:00
parent c1ce9295c0
commit a4d77bb9a4
6 changed files with 274 additions and 0 deletions
+7
View File
@@ -0,0 +1,7 @@
[info]
title = Netgear ReadyNAS SNMP Checks
author = Markus Birth
description = SNMP based checks for the Netgear ReadyNAS.
version = 2016.08.23.1
version.min_required = 1.2.8p2
download_url = https://github.com/mbirth/check_mk-plugins
@@ -0,0 +1,55 @@
#!/usr/bin/python
# -*- coding: utf-8; py-indent-offset: 4 -*-
# _______ __ _ ____ __
# | | \ | |___ \ / /
# | | \| | __) | / /-,_
# | | |\ |/ __/ /__ _|
# |_______|_| \__|_____| |_|
#
# @author Markus Birth <markus.birth@weltn24.de>
netgear_readynas_fan_default_levels = { "lower": (2000, 1000), "upper": (8000, 9000) }
def inventory_netgear_readynas_fan(info):
inventory = []
for fanNumber, fanRpm, fanArea in info:
inventory.append( (fanArea, "netgear_readynas_fan_default_levels") )
return inventory
def check_netgear_readynas_fan(item, params, info):
status = 0
for fanNumber, fanRpm, fanArea in info:
if fanArea != item: continue
rpm = saveint(fanRpm)
lowerwarn, lowercrit = params["lower"]
upperwarn, uppercrit = params["upper"]
rpmsym = ""
if rpm > uppercrit or rpm < lowercrit:
status = 2
rpmsym = " (!!)"
elif rpm > upperwarn or rpm < lowerwarn:
status = 1
rpmsym = " (!)"
message = "Fan %s is at %i rpm.%s" % (fanArea, rpm, rpmsym)
perfdata = [ ("rpm", rpm, upperwarn, uppercrit, 0, uppercrit) ]
return (status, message, perfdata)
return (3, "%s not found in SNMP data." % item)
check_info["netgear_readynas_fan"] = {
"check_function" : check_netgear_readynas_fan,
"inventory_function" : inventory_netgear_readynas_fan,
"group" : "hw_fans",
"service_description" : "Fan %s",
"snmp_info" : (".1.3.6.1.4.1.4526.18.4.1", [
1, # fanNumber
2, # fanRPM
3, # fanType
]),
"snmp_scan_function" : lambda oid: oid(".1.3.6.1.4.1.4526.18.1.0"),
"has_perfdata" : True
}
@@ -0,0 +1,55 @@
#!/usr/bin/python
# -*- coding: utf-8; py-indent-offset: 4 -*-
# _______ __ _ ____ __
# | | \ | |___ \ / /
# | | \| | __) | / /-,_
# | | |\ |/ __/ /__ _|
# |_______|_| \__|_____| |_|
#
# @author Markus Birth <markus.birth@weltn24.de>
def inventory_netgear_readynas_hdd(info):
inventory = []
for diskNumber, diskChannel, diskModel, diskState, diskTemperature in info:
inventory.append( ("HDD Status", {}) )
return inventory
def check_netgear_readynas_hdd(item, params, info):
status = 0
hddcount = 0
badcount = 0
hddlist = []
for diskNumber, diskChannel, diskModel, diskState, diskTemperature in info:
hddcount += 1
celsius = fahrenheit_to_celsius(saveint(diskTemperature))
hddlist.append(u"%s-%s. %s: %i℃ (%s)" % (diskNumber, diskChannel, diskModel, celsius, diskState))
if diskState != "ok":
status = 1
badcount += 1
if badcount > 0:
statusmsg = u"%i bad disks! (!)" % (badcount)
else:
statusmsg = u"All ok."
hddlist_str = "\\n".join(hddlist)
message = u"%i HDDs installed. %s\\n%s" % (hddcount, statusmsg, hddlist_str)
return (status, message)
check_info["netgear_readynas_hdd"] = {
"check_function" : check_netgear_readynas_hdd,
"inventory_function" : inventory_netgear_readynas_hdd,
"group" : "filesystem",
"service_description" : "%s",
"snmp_info" : (".1.3.6.1.4.1.4526.18.3.1", [
1, # diskNumber
2, # diskChannel
3, # diskModel
4, # diskState
5, # diskTemperature
]),
"snmp_scan_function" : lambda oid: oid(".1.3.6.1.4.1.4526.18.1.0"),
"includes" : [ "temperature.include" ],
"has_perfdata" : False
}
@@ -0,0 +1,42 @@
#!/usr/bin/python
# -*- coding: utf-8; py-indent-offset: 4 -*-
# _______ __ _ ____ __
# | | \ | |___ \ / /
# | | \| | __) | / /-,_
# | | |\ |/ __/ /__ _|
# |_______|_| \__|_____| |_|
#
# @author Markus Birth <markus.birth@weltn24.de>
def inventory_netgear_readynas_power(info):
inventory = []
for psuNumber, psuDesc, psuStatus in info:
inventory.append( (psuNumber, None) )
return inventory
def check_netgear_readynas_power(item, params, info):
status = 0
for psuNumber, psuDesc, psuStatus in info:
if psuNumber != item: continue
if psuStatus != "ok":
status = 1
message = "%s (%s)" % (psuDesc, psuStatus)
return (status, message)
return (3, "%s not found in SNMP data." % item)
check_info["netgear_readynas_power"] = {
"check_function" : check_netgear_readynas_power,
"inventory_function" : inventory_netgear_readynas_power,
"service_description" : "PSU %s",
"snmp_info" : (".1.3.6.1.4.1.4526.18.8.1", [
1, # psuNumber
2, # psuDesc
3, # psuStatus
]),
"snmp_scan_function" : lambda oid: oid(".1.3.6.1.4.1.4526.18.1.0"),
"has_perfdata" : False
}
@@ -0,0 +1,60 @@
#!/usr/bin/python
# -*- coding: utf-8; py-indent-offset: 4 -*-
# _______ __ _ ____ __
# | | \ | |___ \ / /
# | | \| | __) | / /-,_
# | | |\ |/ __/ /__ _|
# |_______|_| \__|_____| |_|
#
# @author Markus Birth <markus.birth@weltn24.de>
netgear_readynas_temp_default_levels = { "levels": (60, 80) }
def inventory_netgear_readynas_temp(info):
inventory = []
for tempNumber, tempFht, tempStatus in info:
inventory.append( (tempNumber, "netgear_readynas_temp_default_levels") )
return inventory
def check_netgear_readynas_temp(item, params, info):
status = 0
for tempNumber, tempFht, tempStatus in info:
if tempNumber != item: continue
fht = saveint(tempFht)
cel = fahrenheit_to_celsius(fht)
if tempStatus != "ok":
status = 1
upperwarn, uppercrit = params["levels"]
tempsym = ""
if cel > uppercrit:
status = 2
tempsym = " (!!)"
elif cel > upperwarn and status <= 1:
status = 1
tempsym = " (!)"
message = u"Temperature %s is %i℃ (%i℉). (%s)%s" % (tempNumber, cel, fht, tempStatus, tempsym)
perfdata = [ ("Temperature_C", cel, upperwarn, uppercrit, 0, uppercrit) ]
return (status, message, perfdata)
return (3, "%s not found in SNMP data." % item)
check_info["netgear_readynas_temp"] = {
"check_function" : check_netgear_readynas_temp,
"inventory_function" : inventory_netgear_readynas_temp,
"group" : "temperature",
"service_description" : "Temperature %s",
"snmp_info" : (".1.3.6.1.4.1.4526.18.5.1", [
1, # tempNumber
2, # tempFahrenheit
3, # tempStatus
]),
"snmp_scan_function" : lambda oid: oid(".1.3.6.1.4.1.4526.18.1.0"),
"includes" : [ "temperature.include" ],
"has_perfdata" : True
}
@@ -0,0 +1,55 @@
#!/usr/bin/python
# -*- coding: utf-8; py-indent-offset: 4 -*-
# _______ __ _ ____ __
# | | \ | |___ \ / /
# | | \| | __) | / /-,_
# | | |\ |/ __/ /__ _|
# |_______|_| \__|_____| |_|
#
# @author Markus Birth <markus.birth@weltn24.de>
def inventory_netgear_readynas_volume(info):
mplist = []
for volNumber, volName, volRaidLevel, volStatus, volSize, volFreeSpace in info:
mplist.append( volNumber )
return df_inventory(mplist)
def check_netgear_readynas_volume(item, params, info):
fslist = []
status = 0
for volNumber, volName, volRaidLevel, volStatus, volSize, volFreeSpace in info:
if volNumber != item: continue
total = saveint(volSize)
free = saveint(volFreeSpace)
fslist.append( (("vol%s" % item), total, free, 0) )
status, message, perfdata = df_check_filesystem_list(("vol%s" % item), params, fslist)
message = u"%s: %s, %s (%s)" % (volName, message, volRaidLevel, volStatus)
if volStatus != "ok":
status = max(status, 1)
message = u"%s: Volume Status %s (!), %s" % (volName, volStatus, volRaidLevel)
return (status, message, perfdata)
return (3, "%s not found in SNMP data." % item)
check_info["netgear_readynas_volume"] = {
"check_function" : check_netgear_readynas_volume,
"inventory_function" : inventory_netgear_readynas_volume,
"group" : "filesystem",
"default_levels_variable": "filesystem_default_levels",
"service_description" : "Volume %s",
"snmp_info" : (".1.3.6.1.4.1.4526.18.7.1", [
1, # volumeNumber
2, # volumeName
3, # volumeRAIDLevel
4, # volumeStatus
5, # volumeSize
6, # volumeFreeSpace
]),
"snmp_scan_function" : lambda oid: oid(".1.3.6.1.4.1.4526.18.1.0"),
"includes" : [ "df.include" ],
"has_perfdata" : True
}