summaryrefslogtreecommitdiffstats
path: root/plugins/check_cluster_status.py
diff options
context:
space:
mode:
Diffstat (limited to 'plugins/check_cluster_status.py')
-rwxr-xr-xplugins/check_cluster_status.py74
1 files changed, 74 insertions, 0 deletions
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)