From c2b6f6b2462fe0a3c58ce9425f985173628b784a Mon Sep 17 00:00:00 2001 From: Andreas Unterkircher Date: Wed, 5 Dec 2018 07:05:43 +0100 Subject: [PATCH] service and host mail-notifications, add line-breaks to very long output strings --- etc/icinga2/scripts/mail-host-notification.sh | 28 ++++++++++++++++--- .../scripts/mail-service-notification.sh | 28 ++++++++++++++++--- 2 files changed, 48 insertions(+), 8 deletions(-) diff --git a/etc/icinga2/scripts/mail-host-notification.sh b/etc/icinga2/scripts/mail-host-notification.sh index 781fee355..2cb73e563 100755 --- a/etc/icinga2/scripts/mail-host-notification.sh +++ b/etc/icinga2/scripts/mail-host-notification.sh @@ -92,13 +92,33 @@ shift $((OPTIND - 1)) ## Keep formatting in sync with mail-service-notification.sh for P in LONGDATETIME HOSTNAME HOSTDISPLAYNAME HOSTOUTPUT HOSTSTATE USEREMAIL NOTIFICATIONTYPE ; do - eval "PAR=\$${P}" + eval "PAR=\$${P}" - if [ ! "$PAR" ] ; then - Error "Required parameter '$P' is missing." - fi + if [ ! "$PAR" ] ; then + Error "Required parameter '$P' is missing." + fi done +## Add line-breaks to very long host-outputs to avoid +## mail servers rejecting the message because of hitting +## a max. message line limit (RFC821 max. 1000b per line) +## +## but move on, if the strings seems to take care of its +## own formating (containing \n or \r) +if [ ! -z "${HOSTOUTPUT}" ] \ + && [ "${#HOSTOUTPUT}" -ge 900 ] \ + && ! [[ "${HOSTOUTPUT}" =~ ($'\n'|$'\r') ]]; then + TMP_OUTPUT='' + STR_CNT=0 + STR_STEPS=600 + while [ $STR_CNT -lt ${#HOSTOUTPUT} ]; do + TMP_OUTPUT+="${HOSTOUTPUT:$STR_CNT:$STR_STEPS}\\n" + ((STR_CNT+=STR_STEPS)) || true + done + HOSTOUTPUT="${TMP_OUTPUT}" + unset TMP_OUTPUT STR_CNT +fi + ## Build the message's subject SUBJECT="[$NOTIFICATIONTYPE] Host $HOSTDISPLAYNAME is $HOSTSTATE!" diff --git a/etc/icinga2/scripts/mail-service-notification.sh b/etc/icinga2/scripts/mail-service-notification.sh index d4a1944dc..b84e7c2db 100755 --- a/etc/icinga2/scripts/mail-service-notification.sh +++ b/etc/icinga2/scripts/mail-service-notification.sh @@ -96,13 +96,33 @@ shift $((OPTIND - 1)) ## Keep formatting in sync with mail-host-notification.sh for P in LONGDATETIME HOSTNAME HOSTDISPLAYNAME SERVICENAME SERVICEDISPLAYNAME SERVICEOUTPUT SERVICESTATE USEREMAIL NOTIFICATIONTYPE ; do - eval "PAR=\$${P}" + eval "PAR=\$${P}" - if [ ! "$PAR" ] ; then - Error "Required parameter '$P' is missing." - fi + if [ ! "$PAR" ] ; then + Error "Required parameter '$P' is missing." + fi done +## Add line-breaks to very long service-outputs to avoid +## mail servers rejecting the message because of hitting +## a max. message line limit (RFC821 max. 1000b per line) +## +## but move on, if the strings seems to take care of its +## own formating (containing \n or \r) +if [ ! -z "${SERVICEOUTPUT}" ] \ + && [ "${#SERVICEOUTPUT}" -ge 900 ] \ + && ! [[ "${SERVICEOUTPUT}" =~ ($'\n'|$'\r') ]]; then + TMP_OUTPUT='' + STR_CNT=0 + STR_STEPS=600 + while [ $STR_CNT -lt ${#SERVICEOUTPUT} ]; do + TMP_OUTPUT+="${SERVICEOUTPUT:$STR_CNT:$STR_STEPS}\\n" + ((STR_CNT+=STR_STEPS)) || true + done + SERVICEOUTPUT="${TMP_OUTPUT}" + unset TMP_OUTPUT STR_CNT +fi + ## Build the message's subject SUBJECT="[$NOTIFICATIONTYPE] $SERVICEDISPLAYNAME on $HOSTDISPLAYNAME is $SERVICESTATE!"