icinga-plugins/notification/pushover/scripts/pushover-host-notification.sh

164 lines
5.5 KiB
Bash
Executable File
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#!/bin/bash
####################################################################################################################
#
# full dokumentation on https://pushover.net/api
#
# POST an HTTPS request to https://api.pushover.net/1/messages.json with the following parameters:
# token (required) - your application's API token
# user (required) - the user/group key (not e-mail address) of your user (or you),
# viewable when logged into our dashboard (often referred to as USER_KEY in our documentation and code examples)
# message (required) - your message
#
# Some optional parameters may be included:
# device - your user's device name to send the message directly to that device,
# rather than all of the user's devices (multiple devices may be separated by a comma)
# title - your message's title, otherwise your app's name is used
# url - a supplementary URL to show with your message
# url_title - a title for your supplementary URL, otherwise just the URL is shown
# priority - send as
# -2 to generate no notification/alert,
# -1 to always send as a quiet notification,
# 0 (default) to send notification with sound, vibration and display(not in quiet hours)
# 1 to display as high-priority and bypass the user's quiet hours, or
# 2 to also require confirmation from the user
# retry
# expire
# timestamp - a Unix timestamp of your message's date and time to display to the user, rather than the time your message is received by our API
# sound - the name of one of the sounds supported by device clients to override the user's default sound choice
#
# That's it. Make sure your application is friendly to our API servers and you're all set.
# For more information on each parameter, keep reading or jump to a section at the left.
#
# Need help using our API or found an error in the documentation? Drop us a line.
#
####################################################################################################################
logpath="/var/log/pushover_icinga.txt"
ICINGA2HOST="$(hostname)"
CURLPROXY=""
debug="0"
UP_SOUND="pushover"
DOWN_SOUND="siren"
UNREACHABLE_SOUND=""
#####################################################
#Übergebene Parameter
#
# PUSHOVERUSER = "$user.vars.pushover_user$"
# PUSHOVERTOKEN = "$user.vars.pushover_token$"
# PUSHOVERDEVICE = "$user.vars.pushover_device$"
#
# PUSHOVERPRIORITY = "$host.vars.pushover_priority$"
# PUSHOVERRETRY = "$host.vars.pushover_retry$"
# PUSHOVEREXPIRE = "$host.vars.pushover_expire$"
#
# NOTIFICATIONTYPE = "$notification.type$"
# NOTIFICATIONCOMMENT = "$notification.comment$"
# NOTIFICATIONAUTHOR = "$notification.author$"
#
# ICINGALONGDATETIME = "$icinga.long_date_time$"
#
# HOSTNAME = "$host.name$"
# HOSTDISPLAYNAME = "$host.display_name$"
# HOSTSTATE = "$host.state$"
# HOSTOUTPUT = "$host.output$"
#
#####################################################
#***** Host Monitoring on $ICINGA2HOST *****
PUSHOVERMESSAGE=$(cat << EOF
***** Host Monitoring on icinga *****
$HOSTDISPLAYNAME is $HOSTSTATE!
Info: $HOSTOUTPUT
When: $ICINGALONGDATETIME
Host: $HOSTNAME
EOF
)
#Wenn ein Kommentar eingetragen wurde (Downtimekommentar, Benachrichtigungskommentar), wird dieser angehangen
if [ -n "$NOTIFICATIONCOMMENT" ]
then
PUSHOVERMESSAGE=$(cat << EOF
$PUSHOVERMESSAGE
Comment: $NOTIFICATIONCOMMENT
Author: $NOTIFICATIONAUTHOR
EOF
)
fi
PUSHOVERTITLE="$NOTIFICATIONTYPE - Host $HOSTDISPLAYNAME is $HOSTSTATE!"
#Wenn die Priorität 2 vergeben wurde, ist ein retry zwingend erforderlich
#Sollte retry nicht gesetzt sein, wird er auf 30 gesetzt
if [ "$PUSHOVERPRIORITY" = "2" ] && [ "$PUSHOVERRETRY" = "" ]
then
PUSHOVERRETRY="30"
fi
#Wenn die Priorität 2 vergeben wurde, ist ein expire zwingend erforderlich
#Sollte expire nicht gesetzt sein, wird er auf 300 gesetzt
if [ "$PUSHOVERPRIORITY" = "2" ] && [ "$PUSHOVEREXPIRE" = "" ]
then
PUSHOVEREXPIRE="300"
fi
#The hosts current state. Can be one of UNREACHABLE, UP and DOWN.
if [ "$HOSTSTATE" = "UP" ]
then
SOUND=$UP_SOUND
elif [ "$SERVICESTATE" = "DOWN" ]
then
SOUND=$DOWN_SOUND
elif [ "$SERVICESTATE" = "UNREACHABLE" ]
then
SOUND=$UNREACHABLE_SOUND
fi
#Kommando, um per curl die Pushover-message zu verschicken
failstate=$(curl \
--silent \
--insecure --proxy "$CURLPROXY" \
--form-string "token=$PUSHOVERTOKEN" \
--form-string "user=$PUSHOVERUSER" \
--form-string "message=$PUSHOVERMESSAGE" \
--form-string "title=$PUSHOVERTITLE" \
--form-string "sound=$SOUND" \
--form-string "priority=$PUSHOVERPRIORITY" \
--form-string "retry=$PUSHOVERRETRY" \
--form-string "expire=$PUSHOVEREXPIRE" \
--form-string "device=$PUSHOVERDEVICE" \
--location https://api.pushover.net/1/messages.json)
#Wenn das debugging eingeschaltet ist, wird die folgende Meldung ausgegeben
#$logpath sollte vorhanden sein und auf nagios:nagios gesetzt sein
if [ "$debug" = "1" ]
then
cat << EOF >> "$logpath"
###########################################
Debugging-Tool
###########################################
DatumZeit: $(date)
PUSHOVERTOKEN: $PUSHOVERTOKEN
PUSHOVERUSER: $PUSHOVERUSER
PUSHOVERTITLE: $PUSHOVERTITLE
PUSHOVERDEVICE: $PUSHOVERDEVICE
PUSHOVERPRIORITY: $PUSHOVERPRIORITY
PUSHOVERRETRY: $PUSHOVERRETRY
PUSHOVEREXPIRE: $PUSHOVEREXPIRE
HOSTDISPLAYNAME: $HOSTDISPLAYNAME
ICINGALONGDATETIME: $ICINGALONGDATETIME
NOTIFICATIONTYPE: $NOTIFICATIONTYPE
NOTIFICATIONCOMMENT: $NOTIFICATIONCOMMENT
NOTIFICATIONAUTHOR: $NOTIFICATIONAUTHOR
ICINGA2HOST: $ICINGA2HOST
HOSTNAME: $HOSTNAME
HOSTSTATE: $HOSTSTATE
HOSTOUTPUT: $HOSTOUTPUT
pushover json output: $failstate
EOF
fi