You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

142 lines
3.9 KiB
Bash

#!/bin/sh
PATH=/usr/local/bin:/usr/bin:/bin
# Mail settings in case we want to do to OOB email notifications
email="eloyd@everwatch.global"
print_usage() {
cat << EOF
Generic event handler. Should not be executed by hand.
Order of arguments is:
hostname
description of the service that failed
state of the service that failed
type of state (HARD or SOFT)
number of times it's been in this state
[-d] debug (must be last parameter - ONLY FOR DEBUGGING)
We have to figure out what action to take based on the description.
EOF
exit 1
}
do_foobar() {
echo "Foobar debug=$debug host=$host what=$what service=$service state=$state hardSoft=$hardSoft tries=$tries"
}
do_HTTP() {
case "$host" in
"192.168.1.88") /usr/local/nagios/libexec/check_3gstore_outlet -H "192.168.1.3" -o 2 -c RESTART;;
esac
}
do_email() {
[ -z "$email" ] && return
myHost=`echo $host | tr " " "+"`
myService=`echo $service | tr " " "+"`
echo "https://192.168.1.19/nagiosxi/includes/components/xicore/status.php?show=servicedetail&host=$myHost&service=$myService&dest=auto" | mail -s "Restarted $host:$service" $email
}
################################################################################
# Here's where the program really starts (main)
################################################################################
# Command line help for debugging
[ "$1" = "-h" ] && print_usage
host="$1"
service="$2"
colonService=`echo $service | awk -F: '{print $1}'`
dashService=`echo $service | awk -F- '{print $1}' | tr -d " "`
state="$3"
hardSoft="$4"
tries="$5"
debug="false"
[ "$6" = "-d" ] && debug="true"
# Make SSH do something useful or add keys, username, or other options, in case we need it
ssh="/bin/ssh"
[ ! -x "$ssh" ] && ssh="/usr/bin/ssh"
[ ! -x "$ssh" ] && ssh="/usr/local/bin/ssh"
[ ! -x "$ssh" ] && exit 1
# do_restart is the main entry point for ALL services that use this event handler.
do_restart() {
$debug && echo "We're going to see if we can restart $service on $host..."
case "$service" in
"Service Status - ntpd") sudo systemctl restart ntpd; do_email;;
"HTTP") do_HTTP;;
*) do_nothing;;
esac
}
date >> /tmp/event_handler.log
env >> /tmp/event_handler.log
echo "" >> /tmp/event_handler.log
# Nothing to do (yet?)
do_nothing() {
$debug && echo "$service is in $state state ($hardSoft) for $tries tries."
}
# Do we restart soft services? Yes, if this is the 3rd soft state
do_soft() {
case "$tries" in
3) do_restart;; # Okay, let's restart it before it goes hard
*) do_nothing;; # Don't restart yet
esac
}
# See if there's something to do
do_unknown() {
case "$hardSoft" in
SOFT) do_soft;; # Take action before it's too late?
HARD) do_restart;; # Hard CRITICAL - Our last chance to take action
*) do_nothing;;
esac
}
# See if there's something to do
do_warning() {
case "$hardSoft" in
SOFT) do_soft;; # Take action before it's too late?
HARD) do_restart;; # Hard CRITICAL - Our last chance to take action
*) do_nothing;;
esac
}
# See if there's something to do
do_critical() {
case "$hardSoft" in
SOFT) do_soft;; # Take action before it's too late?
HARD) do_restart;; # Hard CRITICAL - Our last chance to take action
*) do_nothing;;
esac
}
# See if there's something to recover
# So far, we only do it for Apache workers
do_fixit() {
case "$colonService" in
Priority) do_restart;;
*) do_nothing;;
esac
case "$dashService" in
ImportantService) do_restart;;
*) do_nothing;;
esac
}
# Main entry point - what's the status of the thing?
echo "state is $state"
case "$state" in
0|OK) do_fixit;; # If it ain't broke, maybe fix it.
1|WARNING|warning|Warning) do_warning;; # If it ain't really broke, probably don't fix it.
2|CRITICAL|critical|Critical) do_critical;; # Figure out what we should do
3|UNKNOWN|unknown|Unknown) do_unknown;; # Probably can't touch it anyway.
*) do_nothing;;
esac