Module: check_mk
Branch: master
Commit: 1e7b757c39e65c12b9c48dbc21a07a7997984746
URL:
http://git.mathias-kettner.de/git/?p=check_mk.git;a=commit;h=1e7b757c39e65c…
Author: Bastian Kuhn <bk(a)mathias-kettner.de>
Date: Thu Dec 4 14:54:29 2014 +0100
#1598 FIX bluecat_dhcp: Check is not longer found in inventory if dhcp service is not
activated
---
.werks/1598 | 9 ++++++
ChangeLog | 1 +
bluecat_dhcp | 101 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
bluecat_dns | 95 ++++++++++++++++++++++++++++++++++++++++++++++++++++++
4 files changed, 206 insertions(+)
diff --git a/.werks/1598 b/.werks/1598
new file mode 100644
index 0000000..06833b5
--- /dev/null
+++ b/.werks/1598
@@ -0,0 +1,9 @@
+Title: bluecat_dhcp: Check is not longer found in inventory if dhcp service is not
activated
+Level: 1
+Component: checks
+Compatible: compat
+Version: 1.2.5i7
+Date: 1417701215
+Class: fix
+
+
diff --git a/ChangeLog b/ChangeLog
index 29f13a7..f115d4b 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -90,6 +90,7 @@
* 1617 FIX: lnx_if: Deal with data provided by cluster host
* 1618 FIX: ad_replication: Output of timeLastSuccess and timeLastFailure was
inverted...
* 1623 FIX: hp_proliant_mem: support for some yet unhandled status situations
+ * 1598 FIX: bluecat_dhcp: Check is not longer found in inventory if dhcp service is
not activated
Multisite:
* 1508 Allow input of plugin output and perfdata when faking check results...
diff --git a/bluecat_dhcp b/bluecat_dhcp
new file mode 100644
index 0000000..c24564b
--- /dev/null
+++ b/bluecat_dhcp
@@ -0,0 +1,101 @@
+#!/usr/bin/python
+# -*- encoding: utf-8; py-indent-offset: 4 -*-
+# +------------------------------------------------------------------+
+# | ____ _ _ __ __ _ __ |
+# | / ___| |__ ___ ___| | __ | \/ | |/ / |
+# | | | | '_ \ / _ \/ __| |/ / | |\/| | ' / |
+# | | |___| | | | __/ (__| < | | | | . \ |
+# | \____|_| |_|\___|\___|_|\_\___|_| |_|_|\_\ |
+# | |
+# | Copyright Mathias Kettner 2013 mk(a)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-
+# ails. 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.
+
+factory_settings["bluecat_dhcp"] = {
+ "oper_states" : {
+ "warning" : [ 2, 3, 4 ],
+ "critical" : [ 5 ],
+ },
+}
+
+def inventory_bluecat_dhcp(info):
+ # Check if DHCP is not stopped on at least one host
+ for node, oper_state, leases in info:
+ if oper_state != '2':
+ return [(None, None)]
+
+def check_bluecat_dhcp(item, params, info):
+ oper_states = {
+ 1 : "running normally",
+ 2 : "not running",
+ 3 : "currently starting",
+ 4 : "currently stopping",
+ 5 : "fault"
+ }
+
+ ok_on_node = False
+ states = {}
+ state = 0
+
+ # Collect states of nodes
+ for node, oper_state, leases in info:
+ oper_state, leases_sec = map(int, (oper_state, leases))
+ temp_state = 0
+ if oper_state in params['oper_states']['warning']:
+ state = max(state, 1)
+ temp_state = 1
+ elif oper_state in params['oper_states']['critical']:
+ state = 2
+ temp_state = 2
+ else:
+ # If node one ok, the total check is ok
+ ok_on_node = node
+ # Only needed in cluster:
+ states[node] = {'oper_state' : oper_states[oper_state],
'leases_sec' : leases_sec, 'state' : temp_state }
+
+ # Are we in a Cluster?
+ if len(info) > 1:
+ if ok_on_node:
+ node = ok_on_node
+ # One Node is OK:
+ yield 0, "DHCP is %s on %s" % (states[node]['oper_state'],
node)
+ yield 0, '%s Leases per second' %
(states[node]['leases_sec']), [ ('leases',
states[node]['leases_sec']) ]
+ else:
+ # None of the nodes is ok:
+ for node, data in states.items():
+ yield data['state'], "%s on %s" %
(data['oper_state'], node)
+ return
+
+ # Default behavior without Cluster
+ yield state, "DHCP is %s" % oper_states[oper_state]
+ yield 0, '%s Leases per second' % leases_sec, [ ('leases', leases_sec
) ]
+
+
+check_info["bluecat_dhcp"] = {
+ "check_function" : check_bluecat_dhcp,
+ "inventory_function" : inventory_bluecat_dhcp,
+ "node_info" : True,
+ "service_description" : "DHCP",
+ "has_perfdata" : True,
+ "default_levels_variable" : "bluecat_dhcp",
+ "group" : "bluecat_dhcp",
+ "snmp_scan_function" : lambda oid:
oid(".1.3.6.1.2.1.1.2.0") == ".1.3.6.1.4.1.13315.2.1",
+ "snmp_info" : (".1.3.6.1.4.1.13315.3.1.1.2.1", [
+ 1, # dhcpOperState
+ 3, #
dhcpLeaseStatsSuccess
+ ])
+}
+
diff --git a/bluecat_dns b/bluecat_dns
new file mode 100644
index 0000000..98d0b0c
--- /dev/null
+++ b/bluecat_dns
@@ -0,0 +1,95 @@
+#!/usr/bin/python
+# -*- encoding: utf-8; py-indent-offset: 4 -*-
+# +------------------------------------------------------------------+
+# | ____ _ _ __ __ _ __ |
+# | / ___| |__ ___ ___| | __ | \/ | |/ / |
+# | | | | '_ \ / _ \/ __| |/ / | |\/| | ' / |
+# | | |___| | | | __/ (__| < | | | | . \ |
+# | \____|_| |_|\___|\___|_|\_\___|_| |_|_|\_\ |
+# | |
+# | Copyright Mathias Kettner 2013 mk(a)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-
+# ails. 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.
+
+factory_settings["bluecat_dns"] = {
+ "oper_states" : {
+ "warning" : [ 2, 3, 4 ],
+ "critical" : [ 5 ],
+ },
+}
+
+def inventory_bluecat_dns(info):
+ return [(None, None)]
+
+def check_bluecat_dns(item, params, info):
+ oper_states = {
+ 1 : "running normally",
+ 2 : "not running",
+ 3 : "currently starting",
+ 4 : "currently stopping",
+ 5 : "fault"
+ }
+
+ if not info:
+ return
+
+ ok_on_node = False
+ states = {}
+ state = 0
+
+ for node, oper_state in info:
+ oper_state = int(oper_state)
+ temp_state = 0
+ if oper_state in params['oper_states']['warning']:
+ state = max(1, state)
+ temp_state = 1
+ elif oper_state in params['oper_states']['critical']:
+ state = 2
+ temp_state = 2
+ else:
+ # If node one ok, the total check is ok
+ ok_on_node = node
+ # Only needed in cluster:
+ states[node] = {'oper_state' : oper_states[oper_state], 'state' :
temp_state }
+
+ # Are we in a Cluster?
+ if len(info) > 1:
+ if ok_on_node:
+ node = ok_on_node
+ # One Node is OK:
+ yield 0, "DNS is %s on %s" % (states[node]['oper_state'],
node)
+ else:
+ # None of the nodes is ok:
+ for node, data in states.items():
+ yield data['state'], "%s on %s" %
(data['oper_state'], node)
+ return
+
+ # Default behavior without Cluster
+ yield state, "DNS is %s" % oper_states[oper_state]
+
+check_info["bluecat_dns"] = {
+ "check_function" : check_bluecat_dns,
+ "inventory_function" : inventory_bluecat_dns,
+ "node_info" : True,
+ "service_description" : "DNS",
+ "default_levels_variable" : "bluecat_dns",
+ "group" : "bluecat_dns",
+ "snmp_scan_function" : lambda oid:
oid(".1.3.6.1.2.1.1.2.0") == ".1.3.6.1.4.1.13315.2.1",
+ "snmp_info" : (".1.3.6.1.4.1.13315.3.1.2.2.1", [
+ 1, # DnsSerOperState
+ ])
+}
+