From 7de5bb0965f4cc0cf9d0a73c776be2b094180413 Mon Sep 17 00:00:00 2001 From: Ramesh Nachimuthu Date: Wed, 14 May 2014 13:29:25 +0530 Subject: server-addons: fix for hostgroup issue in brick status event handler Macro "$HOSTGROUPNAME$" is used in brick status event handler. But this macro gives only one of the host group to which the host belongs to. But in gluster monitoring, all gluster hosts will have two host groups ('gluster-host' and a host group with cluster name). So using the macro "$HOSTGROUPNAMES$" to pass all the host groups to event handler and internally getting the currect cluster name. Change-Id: I61713ecabff52bcd7f585e9f678426370b9b24d4 Signed-off-by: Ramesh Nachimuthu Reviewed-on: http://review.gluster.org/7761 Reviewed-by: Nishanth Thomas Reviewed-by: Kanagaraj M Reviewed-by: Timothy Asir --- config/gluster-commands.cfg | 5 +++ config/gluster-templates.cfg | 2 +- plugins/Makefile.am | 1 + plugins/brick_status_event_handler.py | 65 +++++++++++++++++++++++++++++++++++ 4 files changed, 72 insertions(+), 1 deletion(-) create mode 100755 plugins/brick_status_event_handler.py diff --git a/config/gluster-commands.cfg b/config/gluster-commands.cfg index 3110e5b..d2ebdce 100644 --- a/config/gluster-commands.cfg +++ b/config/gluster-commands.cfg @@ -106,6 +106,11 @@ define command{ command_line $USER1$/gluster/submit_external_command.py -c '$ARG1$' -H '$ARG2$' -s '$ARG3$' -t '$ARG4$' } +define command{ + command_name brick_status_event_handler + command_line $USER1$/gluster/brick_status_event_handler.py -hg '$HOSTGROUPNAMES$' -v $_SERVICEVOL_NAME$ -st $SERVICESTATETYPE$ +} + define command { command_name check_brick_status command_line $USER1$/check_nrpe -H $HOSTADDRESS$ -c check_brick_status -a $_SERVICEVOL_NAME$ $_SERVICEBRICK_DIR$ diff --git a/config/gluster-templates.cfg b/config/gluster-templates.cfg index 1530f21..b8b47bc 100644 --- a/config/gluster-templates.cfg +++ b/config/gluster-templates.cfg @@ -57,7 +57,7 @@ define service { use gluster-service register 0 _GLUSTER_ENTITY Brick - event_handler submit_external_command!'SCHEDULE_SVC_CHECK'!$HOSTGROUPNAME$!'Volume Status - $_SERVICEVOL_NAME$'!'$LONGDATETIME$' + event_handler brick_status_event_handler check_command check_brick_status } diff --git a/plugins/Makefile.am b/plugins/Makefile.am index 5400d5c..3365ae3 100644 --- a/plugins/Makefile.am +++ b/plugins/Makefile.am @@ -12,6 +12,7 @@ dist_glusternagiosplugins_PYTHON = \ config_generator.py \ servicesnmptrapgenerator.py \ submit_external_command.py \ + brick_status_event_handler.py \ server_utils.py \ $(NULL) diff --git a/plugins/brick_status_event_handler.py b/plugins/brick_status_event_handler.py new file mode 100755 index 0000000..cf2b252 --- /dev/null +++ b/plugins/brick_status_event_handler.py @@ -0,0 +1,65 @@ +#!/usr/bin/python +# brick_status_event_handler.py Event handler for Brick status +# Service. Reschedules the check for volume status service whenever a +# brick status changes. +# 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 argparse +import sys +import datetime + +import submit_external_command +from glusternagios import utils + + +GLUSTER_HOST_GROUP = "gluster-host" + + +def parse_input(): + parser = argparse.ArgumentParser(description="Nagios plugin to handle " + "brick status events") + parser.add_argument('-hg', '--hostgroups', action='store', + dest='hostGroups', + type=str, required=True, help='Hostgroups') + parser.add_argument('-st', '--statetype', action='store', + dest='stateType', + type=str, required=True, help='Service State Type') + parser.add_argument('-v', '--volume', action='store', dest='volume', + type=str, required=True, help='Volume Name') + args = parser.parse_args() + return args + + +def _findClusterName(hostGroupNames): + hostGroups = hostGroupNames.split(",") + for hostGroup in hostGroups: + if hostGroup != GLUSTER_HOST_GROUP: + return hostGroup + + +if __name__ == '__main__': + args = parse_input() + if args.stateType == "SOFT": + sys.exit(utils.PluginStatusCode.OK) + hostName = _findClusterName(args.hostGroups) + now = datetime.datetime.now() + command = "SCHEDULE_SVC_CHECK" + volumeStatusService = "Volume Status - %s" % args.volume + cmdStr = "[%s] %s;%s;%s;%s\n" % (now, command, hostName, + volumeStatusService, now) + submit_external_command.submitExternalCommand(cmdStr) + sys.exit(utils.PluginStatusCode.OK) -- cgit