diff options
author | Nishanth Thomas <nthomas@redhat.com> | 2014-04-15 11:53:35 +0530 |
---|---|---|
committer | Bala.FA <barumuga@redhat.com> | 2014-04-29 10:21:37 +0530 |
commit | 4529ce7d5e539e42ce9d38d09d3badea3f5247ca (patch) | |
tree | c67ca568788cad7d5a1b9cde46b99b17151a07c7 /plugins | |
parent | 210b28d84f91050fd4a293653d0f5982ae34f189 (diff) |
Cluster Status: Plugin to display the overall status of cluster
This plugin use mk-livestatus to retrieve the status of the
all the volumes and provide aggregrate status of the cluster
Addressed review comments
Change-Id: Ia83b41cfdc6dcfc1f379c024ba6ea33f9ccfe598
Signed-off-by: Nishanth Thomas <nthomas@redhat.com>
Diffstat (limited to 'plugins')
-rw-r--r-- | plugins/Makefile.am | 1 | ||||
-rwxr-xr-x | plugins/check_cluster_status.py | 74 | ||||
-rw-r--r-- | plugins/config_generator.py | 2 |
3 files changed, 76 insertions, 1 deletions
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) |