From 140a06bfc04d956089eadfb41ab541f39adc4495 Mon Sep 17 00:00:00 2001 From: Markus Birth Date: Tue, 28 Nov 2017 15:02:38 +0100 Subject: [PATCH] Added lynx_rct5023g. --- src/lynx_rct5023g/baseinfo.ini | 7 ++ src/lynx_rct5023g/checks/lynx_rct5023g_fan | 59 ++++++++++++++++ src/lynx_rct5023g/checks/lynx_rct5023g_power | 64 ++++++++++++++++++ src/lynx_rct5023g/checks/lynx_rct5023g_state | 53 +++++++++++++++ .../web/htdocs/images/icons/Lynx.png | Bin 0 -> 7274 bytes 5 files changed, 183 insertions(+) create mode 100644 src/lynx_rct5023g/baseinfo.ini create mode 100644 src/lynx_rct5023g/checks/lynx_rct5023g_fan create mode 100644 src/lynx_rct5023g/checks/lynx_rct5023g_power create mode 100644 src/lynx_rct5023g/checks/lynx_rct5023g_state create mode 100644 src/lynx_rct5023g/web/htdocs/images/icons/Lynx.png diff --git a/src/lynx_rct5023g/baseinfo.ini b/src/lynx_rct5023g/baseinfo.ini new file mode 100644 index 0000000..3a7c8de --- /dev/null +++ b/src/lynx_rct5023g/baseinfo.ini @@ -0,0 +1,7 @@ +[info] +title = Lynx RCT5023g frame controller +author = Markus Birth +description = SNMP based checks (fans, PSUs, system status) for the Lynx RCT5023g frame controller. +version = 2016.07.06.1 +version.min_required = 1.2.8p2 +download_url = https://github.com/mbirth/check_mk-plugins diff --git a/src/lynx_rct5023g/checks/lynx_rct5023g_fan b/src/lynx_rct5023g/checks/lynx_rct5023g_fan new file mode 100644 index 0000000..22834b9 --- /dev/null +++ b/src/lynx_rct5023g/checks/lynx_rct5023g_fan @@ -0,0 +1,59 @@ +#!/usr/bin/python +# -*- coding: utf-8; py-indent-offset: 4 -*- +# _______ __ _ ____ __ +# | | \ | |___ \ / / +# | | \| | __) | / /-,_ +# | | |\ |/ __/ /__ _| +# |_______|_| \__|_____| |_| +# +# @author Markus Birth + +def inventory_lynx_rct5023g_fan(info): + inventory = [] + for OID_END, name, label, f1name, f2name, f3name, f1stat, f2stat, f3stat in info: + inventory.append( (name, None) ) + return inventory + +def check_lynx_rct5023g_fan(item, _no_params, info): + states = [ "ok", "fail", "missing" ] + status = 0 + for OID_END, name, label, f1name, f2name, f3name, f1stat, f2stat, f3stat in info: + if item != name: + continue + + f1stat = states[int(f1stat)] + f2stat = states[int(f2stat)] + f3stat = states[int(f3stat)] + + if "fail" in f1stat+f2stat+f3stat: + status = 2 + elif not "ok" in f1stat+f2stat+f3stat: + status = 1 + + message = u"%s, ❃1:%s, ❃2:%s, ❃3:%s" % (label, f1stat, f2stat, f3stat) + message += u"\r\n1: %s" % (f1name) + message += u"\r\n2: %s" % (f2name) + message += u"\r\n3: %s" % (f3name) + + return status, message + + return 3, "%s not found in SNMP data." % item + +check_info["lynx_rct5023g_fan"] = { + "check_function" : check_lynx_rct5023g_fan, + "inventory_function" : inventory_lynx_rct5023g_fan, + "service_description" : "%s Fans", + "snmp_info" : (".1.3.6.1.4.1.14755.2", ["49672.644.1.1", "49673.644.1.1"], [ + OID_END, + 1, # Device name + 2, # Custom name + 38, # fan1Name + 39, # fan2Name + 40, # fan3Name + 41, # fan1Status + 42, # fan2Status + 43, # fan3Status + ]), + "snmp_scan_function" : lambda oid: oid(".1.3.6.1.4.1.14755.2.49672.*"), + "has_perfdata" : False +} diff --git a/src/lynx_rct5023g/checks/lynx_rct5023g_power b/src/lynx_rct5023g/checks/lynx_rct5023g_power new file mode 100644 index 0000000..bc72c91 --- /dev/null +++ b/src/lynx_rct5023g/checks/lynx_rct5023g_power @@ -0,0 +1,64 @@ +#!/usr/bin/python +# -*- coding: utf-8; py-indent-offset: 4 -*- +# _______ __ _ ____ __ +# | | \ | |___ \ / / +# | | \| | __) | / /-,_ +# | | |\ |/ __/ /__ _| +# |_______|_| \__|_____| |_| +# +# @author Markus Birth + +def inventory_lynx_rct5023g_power(info): + inventory = [] + for OID_END, name, label, p1name, p1stat, p1volt, p1temp, p2name, p2stat, p2volt, p2temp in info: + inventory.append( (name, None) ) + return inventory + +def check_lynx_rct5023g_power(item, _no_params, info): + status = 0 + for OID_END, name, label, p1name, p1stat, p1volt, p1temp, p2name, p2stat, p2volt, p2temp in info: + if item != name: + continue + + p1volt = savefloat(p1volt)/10 + p1temp = saveint(p1temp) + p2volt = savefloat(p2volt)/10 + p2temp = saveint(p2temp) + + if p1stat != "" or p2stat != "": + status = 2 + + if p1stat == "": + p1stat = "OK" + + if p2stat == "": + p2stat = "OK" + + message = u"%s, ⚡1:%s (%.1fV, %s℃), ⚡2:%s (%.1fV, %s℃)" % (label, p1stat, p1volt, p1temp, p2stat, p2volt, p2temp) + message += u"\r\n1: %s" % (p1name) + message += u"\r\n2: %s" % (p2name) + + return status, message + + return 3, "%s not found in SNMP data." % item + +check_info["lynx_rct5023g_power"] = { + "check_function" : check_lynx_rct5023g_power, + "inventory_function" : inventory_lynx_rct5023g_power, + "service_description" : "%s PSU", + "snmp_info" : (".1.3.6.1.4.1.14755.2", ["49672.644.1.1", "49673.644.1.1"], [ + OID_END, + 1, # Device name + 2, # Custom name + 18, # psu1Name + 19, # psu1Status + 20, # psu1Voltage + 21, # psu1Temp + 22, # psu2Name + 23, # psu2Status + 24, # psu2Voltage + 25, # psu2Temp + ]), + "snmp_scan_function" : lambda oid: oid(".1.3.6.1.4.1.14755.2.49672.*"), + "has_perfdata" : False +} diff --git a/src/lynx_rct5023g/checks/lynx_rct5023g_state b/src/lynx_rct5023g/checks/lynx_rct5023g_state new file mode 100644 index 0000000..0086974 --- /dev/null +++ b/src/lynx_rct5023g/checks/lynx_rct5023g_state @@ -0,0 +1,53 @@ +#!/usr/bin/python +# -*- coding: utf-8; py-indent-offset: 4 -*- +# _______ __ _ ____ __ +# | | \ | |___ \ / / +# | | \| | __) | / /-,_ +# | | |\ |/ __/ /__ _| +# |_______|_| \__|_____| |_| +# +# @author Markus Birth + +def inventory_lynx_rct5023g_state(info): + inventory = [] + for OID_END, name, label, color, text in info: + inventory.append( (name, None) ) + return inventory + +def check_lynx_rct5023g_state(item, _no_params, info): + ledColors = [ "unknown", "black", "green", "yellow", "red" ] + status = 0 + for OID_END, name, label, color, text in info: + if item != name: + continue + + color = int(color) + colorname = ledColors[color] + + if colorname == "yellow": + status = 1 + elif colorname == "red" or colorname == "black": + status = 2 + elif colorname == "unknown": + status = 3 + + message = "%s, LED:%s, Status:%s" % (label, colorname, text) + + return status, message + + return 3, "%s not found in SNMP data." % item + +check_info["lynx_rct5023g_state"] = { + "check_function" : check_lynx_rct5023g_state, + "inventory_function" : inventory_lynx_rct5023g_state, + "service_description" : "%s Status", + "snmp_info" : (".1.3.6.1.4.1.14755.2", ["49672.644.1.1", "49673.644.1.1"], [ + OID_END, + 1, # Device name + 2, # Custom name + 7, # statusColor + 9, # statusText + ]), + "snmp_scan_function" : lambda oid: oid(".1.3.6.1.4.1.14755.2.49672.*"), + "has_perfdata" : False +} diff --git a/src/lynx_rct5023g/web/htdocs/images/icons/Lynx.png b/src/lynx_rct5023g/web/htdocs/images/icons/Lynx.png new file mode 100644 index 0000000000000000000000000000000000000000..f062611605c9026ed48220180ceeb53db475c9f3 GIT binary patch literal 7274 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