icinga-plugins/notification/pushover/scripts/pushover-service-notificati...

173 lines
5.8 KiB
Bash
Executable File
Raw 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"
OK_SOUND="pushover"
WARNING_SOUND="intermission"
CRITICAL_SOUND="siren"
UNKNOWN_SOUND=""
#####################################################
#Übergebene Parameter
#
# PUSHOVERUSER = "$user.vars.pushover_user$"
# PUSHOVERTOKEN = "$user.vars.pushover_token$"
# PUSHOVERDEVICE = "$user.vars.pushover_device$"
#
# PUSHOVERPRIORITY = "$service.vars.pushover_priority$"
# PUSHOVERRETRY = "$service.vars.pushover_retry$"
# PUSHOVEREXPIRE = "$service.vars.pushover_expire$"
#
# NOTIFICATIONTYPE = "$notification.type$"
# NOTIFICATIONCOMMENT = "$notification.comment$"
# NOTIFICATIONAUTHOR = "$notification.author$"
#
# ICINGALONGDATETIME = "$icinga.long_date_time$"
#
# HOSTNAME = "$host.name$"
# SERVICENAME = "$service.name$"
# SERVICEDISPLAYNAME = "$service.display_name$"
# SERVICESTATE = "$service.state$"
# HOSTDISPLAYNAME = "$host.display_name$"
# SERVICESTATE = "$service.state$"
# SERVICEOUTPUT = "$service.output$"
#
#####################################################
#***** Service Monitoring on $ICINGA2HOST *****
PUSHOVERMESSAGE=$(cat << EOF
***** Service Monitoring on icinga *****
$SERVICEDISPLAYNAME on $HOSTDISPLAYNAME is ${SERVICESTATE}!
Info: $SERVICEOUTPUT
When: $ICINGALONGDATETIME
Service: $SERVICENAME
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 - $HOSTDISPLAYNAME - $SERVICEDISPLAYNAME is $SERVICESTATE"
#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 services current state. Can be one of OK, WARNING, CRITICAL and UNKNOWN
if [ "$SERVICESTATE" = "OK" ]
then
SOUND=$OK_SOUND
elif [ "$SERVICESTATE" = "WARNING" ]
then
SOUND=$WARNING_SOUND
elif [ "$SERVICESTATE" = "CRITICAL" ]
then
SOUND=$CRITICAL_SOUND
else
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
NOTIFICATIONTYPE: $NOTIFICATIONTYPE
NOTIFICATIONCOMMENT: $NOTIFICATIONCOMMENT
NOTIFICATIONAUTHOR: $NOTIFICATIONAUTHOR
HOSTDISPLAYNAME: $HOSTDISPLAYNAME
SERVICEDISPLAYNAME: $SERVICEDISPLAYNAME
SERVICESTATE: $SERVICESTATE
SOUND: $SOUND
ICINGALONGDATETIME: $ICINGALONGDATETIME
ICINGA2HOST: $ICINGA2HOST
SERVICEOUTPUT: $SERVICEOUTPUT
SERVICENAME: $SERVICENAME
pushover json output: $failstate
EOF
fi