#!/usr/bin/env bash ## /etc/icinga2/scripts/host-by-telegram.sh / 20170330 ## Marianne M. Spiller ## Last updated 20170424 ## Tested icinga2-2.6.3-1 PROG="`basename $0`" HOSTNAME="`hostname`" TRANSPORT="curl" if [ -z "`which $TRANSPORT`" ] ; then echo "$TRANSPORT not in \$PATH. Consider installing it." exit 1 fi Usage() { cat << EOF host-by-mail notification script for Icinga 2 by spillerm The following are mandatory: -4 HOSTADDRESS (\$address$) -6 HOSTADDRESS6 (\$address6\) -d LONGDATETIME (\$icinga.long_date_time$) -l HOSTALIAS (\$host.name$) -n HOSTDISPLAYNAME (\$host.display_name$) -o HOSTOUTPUT (\$host.output$) -p TELEGRAM_BOT (\$telegram_bot$) -q TELEGRAM_BOTID (\$telegram_botid$) -r TELEGRAM_BOTTOKEN (\$telegram_bottoken$) -s HOSTSTATE (\$host.state$) -t NOTIFICATIONTYPE (\$notification.type$) And these are optional: -b NOTIFICATIONAUTHORNAME (\$notification.author$) -c NOTIFICATIONCOMMENT (\$notification.comment$) -i HAS_ICINGAWEB2 (\$icingaweb2url$, Default: unset) -v (\$notification_logtosyslog$, Default: false) EOF exit 1; } while getopts 4:6::b:c:d:hi:l:n:o:p:q:r:s:t:u:v: opt do case "$opt" in 4) HOSTADDRESS=$OPTARG ;; 6) HOSTADDRESS6=$OPTARG ;; b) NOTIFICATIONAUTHORNAME=$OPTARG ;; c) NOTIFICATIONCOMMENT=$OPTARG ;; d) LONGDATETIME=$OPTARG ;; h) Usage ;; i) HAS_ICINGAWEB2=$OPTARG ;; l) HOSTALIAS=$OPTARG ;; n) HOSTDISPLAYNAME=$OPTARG ;; o) HOSTOUTPUT=$OPTARG ;; p) TELEGRAM_BOT=$OPTARG ;; q) TELEGRAM_BOTID=$OPTARG ;; r) TELEGRAM_BOTTOKEN=$OPTARG ;; s) HOSTSTATE=$OPTARG ;; t) NOTIFICATIONTYPE=$OPTARG ;; v) VERBOSE=$OPTARG ;; \?) echo "ERROR: Invalid option -$OPTARG" >&2 Usage ;; :) echo "Missing option argument for -$OPTARG" >&2 Usage ;; *) echo "Unimplemented option: -$OPTARG" >&2 Usage ;; esac done ## Build the message's subject SUBJECT="[$NOTIFICATIONTYPE] $SERVICEDISPLAYNAME on $HOSTDISPLAYNAME is $SERVICESTATE!" ## Build the message itself NOTIFICATION_MESSAGE=$(cat << EOF $HOSTDISPLAYNAME ($HOSTALIAS) is $HOSTSTATE! When? $LONGDATETIME Info? $HOSTOUTPUT Host? $HOSTALIAS IPv4? $HOSTADDRESS EOF ) ## Is this host IPv6 capable? if [ -n "$HOSTADDRESS6" ] ; then NOTIFICATION_MESSAGE="$NOTIFICATION_MESSAGE IPv6? $HOSTADDRESS6" fi ## Are there any comments? Put them into the message! if [ -n "$NOTIFICATIONCOMMENT" ] ; then NOTIFICATION_MESSAGE="$NOTIFICATION_MESSAGE Comment by $NOTIFICATIONAUTHORNAME: $NOTIFICATIONCOMMENT" fi ## Are we using Icinga Web 2? Put the URL into the message! if [ -n "$HAS_ICINGAWEB2" ] ; then NOTIFICATION_MESSAGE="$NOTIFICATION_MESSAGE Get live status: $HAS_ICINGAWEB2/monitoring/host/show?host=$HOSTALIAS" fi ## Build the message's subject SUBJECT="[$NOTIFICATIONTYPE] Host $HOSTDISPLAYNAME is $HOSTSTATE!" ## Are we verbose? Then put a message to syslog... if [ "$VERBOSE" == "true" ] ; then logger "$PROG sends $SUBJECT => Telegram Channel $TELEGRAM_BOT" fi ## And finally, send the message /usr/bin/curl --silent --output /dev/null \ --data-urlencode "chat_id=${TELEGRAM_BOTID}" \ --data-urlencode "text=${NOTIFICATION_MESSAGE}" \ --data-urlencode "parse_mode=HTML" \ --data-urlencode "disable_web_page_preview=true" \ "https://api.telegram.org/bot${TELEGRAM_BOTTOKEN}/sendMessage"