summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--config/gluster-commands.cfg5
-rw-r--r--config/gluster-templates.cfg1
-rw-r--r--config/glustercluster.cfg.sample1
-rw-r--r--plugins/Makefile.am1
-rwxr-xr-xplugins/check_cluster_status.py74
-rw-r--r--plugins/config_generator.py2
-rw-r--r--tests/test_config_generator.py2
7 files changed, 83 insertions, 3 deletions
diff --git a/config/gluster-commands.cfg b/config/gluster-commands.cfg
index c2fe324..73b9e7a 100644
--- a/config/gluster-commands.cfg
+++ b/config/gluster-commands.cfg
@@ -80,3 +80,8 @@ define command {
command_name check_vol_quota_status
command_line $USER1$/gluster/check_vol_server.py $ARG1$ $ARG2$ -o quota
}
+
+define command{
+ command_name check_cluster_status
+ command_line $USER1$/gluster/check_cluster_status.py $HOSTNAME$
+}
diff --git a/config/gluster-templates.cfg b/config/gluster-templates.cfg
index eaffcda..a1da860 100644
--- a/config/gluster-templates.cfg
+++ b/config/gluster-templates.cfg
@@ -18,6 +18,7 @@ define host {
use gluster-generic-host
register 0
_gluster_entity Cluster
+ check_command check_cluster_status
}
define host{
diff --git a/config/glustercluster.cfg.sample b/config/glustercluster.cfg.sample
index c7de065..d51688d 100644
--- a/config/glustercluster.cfg.sample
+++ b/config/glustercluster.cfg.sample
@@ -28,7 +28,6 @@ define host{
host_name test-cluster ; The name of cluster. SHOULD BE SAME AS hostgroup defined above
alias test-cluster ; A longer name to be used for display
address dummy ; IP address of the host
- check_command check_dummy!0
}
################################################################################
diff --git a/plugins/Makefile.am b/plugins/Makefile.am
index 78d0d8a..9779c2d 100644
--- a/plugins/Makefile.am
+++ b/plugins/Makefile.am
@@ -1,5 +1,6 @@
dist_glusternagiosplugins_PYTHON = \
constants.py \
+ check_cluster_status.py \
check_cluster_vol_usage.py \
check_remote_host.py \
check_vol_server.py \
diff --git a/plugins/check_cluster_status.py b/plugins/check_cluster_status.py
new file mode 100755
index 0000000..ab2a484
--- /dev/null
+++ b/plugins/check_cluster_status.py
@@ -0,0 +1,74 @@
+#!/usr/bin/python
+#
+# check_cluster_status
+# Aggregated status for a gluster cluster
+# The plugin reads status data using mk-livestatus
+# Assumptions:
+# - Volume utilization service names has "Status"
+#
+# Copyright (C) 2014 Red Hat Inc
+#
+# This program 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; either version 2
+# of the License, or (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA
+#
+
+import sys
+from argparse import ArgumentParser
+import livestatus
+from glusternagios import utils
+
+
+def findClusterStatus(clusterName):
+ exitStatus = utils.PluginStatusCode.OK
+ # Write command to socket
+ cmd = "GET services\nColumns: state\n" \
+ "Filter: description ~~ %s\n" \
+ "Filter: host_name = %s" % ('Volume Status', clusterName)
+ table = livestatus.readLiveStatus(cmd)
+ noOfVolumesInCriticalState = 0
+ noOfVolumes = len(table)
+ for row in table:
+ if len(row) > 0 and row[0] == '2':
+ noOfVolumesInCriticalState += 1
+ if noOfVolumesInCriticalState == noOfVolumes:
+ print "Cluster Status CRITICAL: All Volumes are in Critical State " \
+ "| noOfVolumes=%s noOfVolumesInCriticalState=%s" \
+ % (noOfVolumes, noOfVolumesInCriticalState)
+ exitStatus = utils.PluginStatusCode.CRITICAL
+ elif noOfVolumesInCriticalState > 0:
+ print "Cluster Status WARNING : Some Volumes are in Critical State " \
+ "| noOfVolumes=%s noOfVolumesInCriticalState=%s" \
+ % (noOfVolumes, noOfVolumesInCriticalState)
+ exitStatus = utils.PluginStatusCode.WARNING
+ else:
+ print "Cluster Status OK : None of the Volumes are in Critical " \
+ "State | noOfVolumes=%s noOfVolumesInCriticalState=%s" \
+ % (noOfVolumes, noOfVolumesInCriticalState)
+ return exitStatus
+
+
+def parse_input():
+
+ parser = ArgumentParser(usage='%(prog)s [-h] <cluster>')
+ parser.add_argument("cluster", help="Name of the cluster")
+ args = parser.parse_args()
+ return args
+
+
+# Main method
+if __name__ == "__main__":
+ args = parse_input()
+ # Find the cluster status
+ exitStatus = findClusterStatus(args.cluster)
+ sys.exit(exitStatus)
diff --git a/plugins/config_generator.py b/plugins/config_generator.py
index 6d725ef..49ea335 100644
--- a/plugins/config_generator.py
+++ b/plugins/config_generator.py
@@ -167,7 +167,7 @@ class GlusterNagiosConfManager:
cluster['name'], cluster['hosts'][-1]['hostip']))
clusterHostConfig = self.createHost(
cluster['name'], cluster['name'], "gluster-cluster",
- cluster['name'], "", "check_dummy", clusterServices)
+ cluster['name'], "", "", clusterServices)
hostsConfigs.append(clusterHostConfig)
for host in cluster['hosts']:
brickServices = self.createBrickServices(host)
diff --git a/tests/test_config_generator.py b/tests/test_config_generator.py
index 21500a9..1161eab 100644
--- a/tests/test_config_generator.py
+++ b/tests/test_config_generator.py
@@ -50,7 +50,7 @@ class TestGlusterNagiosConfManager(TestCaseBase):
self.assertEqual(config['host_name'], clusterData['name'])
self.assertEqual(config['alias'], clusterData['name'])
self.assertEqual(config['address'], clusterData['name'])
- self.assertEqual(config['check_command'], "check_dummy")
+ self.assertEqual(config['check_command'], "")
self.assertEqual(config['use'], 'gluster-cluster')
def createBricks(self, count):