diff options
-rw-r--r-- | config/gluster-commands.cfg | 5 | ||||
-rw-r--r-- | config/gluster-templates.cfg | 2 | ||||
-rw-r--r-- | plugins/Makefile.am | 1 | ||||
-rwxr-xr-x | plugins/brick_status_event_handler.py | 65 |
4 files changed, 72 insertions, 1 deletions
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) |