#!/bin/bash
# ============================================================
# easyNag Notification Script for Icinga 2
# ============================================================
EASYNAG_DEFAULT_INSTANCE="MyIcinga2"
EASYNAG_API_URL="https://api.easynag.com/v1/push/alert"

if [ -z "${EASYNAG_USER_KEY}" ]; then
    echo "easyNag: no user_key" >&2
    exit 0
fi

INSTANCE="${EASYNAG_INSTANCE:-${EASYNAG_DEFAULT_INSTANCE}}"
DATE="${ICINGA_LONGDATETIME:-$(date '+%Y-%m-%d %H:%M')}"
AUTHOR="${ICINGA_NOTIFICATIONAUTHORNAME:-}"
COMMENT="${ICINGA_NOTIFICATIONCOMMENT:-}"

if [ -n "${ICINGA_SERVICEDESC}" ]; then
    WHAT="SERVICE"
    STATE="${ICINGA_SERVICESTATE}"
    OUTPUT="${ICINGA_SERVICEOUTPUT}"
    SERVICE="${ICINGA_SERVICEDESC}"
else
    WHAT="HOST"
    STATE="${ICINGA_HOSTSTATE}"
    OUTPUT="${ICINGA_HOSTOUTPUT}"
    SERVICE=""
fi

OUTPUT_ESCAPED=$(printf '%s' "${OUTPUT}" | sed 's/\\/\\\\/g; s/"/\\"/g')

RESPONSE=$(curl -s --max-time 10 \
    --request POST \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --data "{
        \"user_key\":  \"${EASYNAG_USER_KEY}\",
        \"what\":      \"${WHAT}\",
        \"type\":      \"${ICINGA_NOTIFICATIONTYPE}\",
        \"state\":     \"${STATE}\",
        \"hostname\":  \"${ICINGA_HOSTNAME}\",
        \"service\":   \"${SERVICE}\",
        \"output\":    \"${OUTPUT_ESCAPED}\",
        \"author\":    \"${AUTHOR}\",
        \"comment\":   \"${COMMENT}\",
        \"date\":      \"${DATE}\",
        \"instance\":  \"${INSTANCE}\"
    }" \
    "${EASYNAG_API_URL}")

if [ $? -ne 0 ]; then
    echo "easyNag: error - check network connectivity to ${EASYNAG_API_URL}" >&2
    exit 1
fi

echo "easyNag response: ${RESPONSE}" >&2
