# Supported notification methods:
# - emails
# - pushover.net notifications
+# - pushbullet.com push notifications
# - slack.com notifications
# - telegram.org notifications
#
SEND_PUSHOVER="YES"
SEND_TELEGRAM="YES"
SEND_EMAIL="YES"
+SEND_PUSHBULLET="YES"
# slack configs
SLACK_WEBHOOK_URL=
DEFAULT_RECIPIENT_PUSHOVER=
declare -A role_recipients_pushover=()
+# pushbullet configs
+PUSHBULLET_ACCESS_TOKEN=
+DEFAULT_RECIPIENT_PUSHBULLET=
+declare -A role_recipients_pushbullet=()
+
# telegram configs
TELEGRAM_BOT_TOKEN=
DEFAULT_RECIPIENT_TELEGRAM=
declare -A arr_slack=()
declare -A arr_pushover=()
+declare -A arr_pushbullet=()
declare -A arr_telegram=()
declare -A arr_email=()
[ "${r}" != "disabled" ] && filter_recipient_by_criticality pushover "${r}" && arr_pushover[${r/|*/}]="1"
done
+ # pushbullet
+ a="${role_recipients_pushbullet[${x}]}"
+ [ -z "${a}" ] && a="${DEFAULT_RECIPIENT_PUSHBULLET}"
+ for r in ${a//,/ }
+ do
+ [ "${r}" != "disabled" ] && filter_recipient_by_criticality pushbullet "${r}" && arr_pushbullet[${r/|*/}]="1"
+ done
+
# telegram
a="${role_recipients_telegram[${x}]}"
[ -z "${a}" ] && a="${DEFAULT_RECIPIENT_TELEGRAM}"
to_pushover="${!arr_pushover[*]}"
[ -z "${to_pushover}" ] && SEND_PUSHOVER="NO"
+# build the list of pushbulet recipients (user tokens)
+to_pushbullet="${!arr_pushbullet[*]}"
+[ -z "${to_pushbullet}" ] && SEND_PUSHBULLET="NO"
+
# check array of telegram recipients (chat ids)
to_telegram="${!arr_telegram[*]}"
[ -z "${to_telegram}" ] && SEND_TELEGRAM="NO"
# check pushover
[ -z "${PUSHOVER_APP_TOKEN}" ] && SEND_PUSHOVER="NO"
+# check pushbullet
+[ -z "${DEFAULT_RECIPIENT_PUSHBULLET}" ] && SEND_PUSHBULLET="NO"
+
# check telegram
[ -z "${TELEGRAM_BOT_TOKEN}" ] && SEND_TELEGRAM="NO"
-if [ \( "${SEND_PUSHOVER}" = "YES" -o "${SEND_SLACK}" = "YES" -o "${SEND_TELEGRAM}" = "YES" \) -a -z "${curl}" ]
+if [ \( "${SEND_PUSHOVER}" = "YES" -o "${SEND_SLACK}" = "YES" -o "${SEND_TELEGRAM}" = "YES" -o "${SEND_PUSHBULLET}" = "YES" \) -a -z "${curl}" ]
then
curl="$(which curl 2>/dev/null || command -v curl 2>/dev/null)"
if [ -z "${curl}" ]
then
SEND_PUSHOVER="NO"
+ SEND_PUSHBULLET="NO"
SEND_TELEGRAM="NO"
SEND_SLACK="NO"
fi
fi
# check that we have at least a method enabled
-if [ "${SEND_EMAIL}" != "YES" -a "${SEND_PUSHOVER}" != "YES" -a "${SEND_TELEGRAM}" != "YES" -a "${SEND_SLACK}" != "YES" ]
+if [ "${SEND_EMAIL}" != "YES" -a "${SEND_PUSHOVER}" != "YES" -a "${SEND_TELEGRAM}" != "YES" -a "${SEND_SLACK}" != "YES" -a "${SEND_PUSHBULLET}" != "YES" ]
then
fatal "All notification methods are disabled. Not sending a notification."
fi
return 1
}
+# -----------------------------------------------------------------------------
+# pushbullet sender
+
+send_pushbullet() {
+ local userapikey="${1}" recipients="${2}" message="${3}" title="${4}" httpcode sent=0 user
+ if [ "${SEND_PUSHBULLET}" = "YES" -a ! -z "${userapikey}" -a ! -z "${recipients}" -a ! -z "${message}" -a ! -z "${title}" ]
+ then
+ #https://docs.pushbullet.com/#create-push
+ for user in ${recipients}
+ do
+ httpcode=$(${curl} --write-out %{http_code} --silent --output /dev/null \
+ --header 'Access-Token: '$userapikey'' \
+ --header 'Content-Type: application/json' \
+ --data-binary @<(cat <<EOF
+ {"title": "${title}",
+ "type": "note",
+ "email": "${user}",
+ "body": "$( echo -n ${message})"}
+EOF
+ ) "https://api.pushbullet.com/v2/pushes" -X POST)
+
+ if [ "${httpcode}" == "200" ]
+ then
+ echo >&2 "${me}: Sent pushbullet notification for: ${host} ${chart}.${name} is ${status} to '${user}'"
+ sent=$((sent + 1))
+ else
+ echo >&2 "${me}: Failed to send pushbullet notification for: ${host} ${chart}.${name} is ${status} to '${user}' with HTTP error code ${httpcode}."
+ fi
+ done
+
+ [ ${sent} -gt 0 ] && return 0
+ fi
+
+ return 1
+}
# -----------------------------------------------------------------------------
# telegram sender
SENT_PUSHOVER=$?
+# -----------------------------------------------------------------------------
+# send the pushbullet notification
+
+pushbullet_message="${alarm} \n
+Severity: ${severity} \n
+Chart: ${chart} \n
+Family: ${family} \n
+To View Netdata go to: ${goto_url} \n
+The source of this alarm is line ${src}"
+pushbullet_title="${status} at ${host} ${status_message} - ${name//_/ } - ${chart}}"
+send_pushbullet "${PUSHBULLET_ACCESS_TOKEN}" "${to_pushbullet}" "$pushbullet_message" "$pushbullet_title"
+
+SENT_PUSHBULLET=$?
+
# -----------------------------------------------------------------------------
# send the telegram.org message
# let netdata know
# we did send something
-[ ${SENT_EMAIL} -eq 0 -o ${SENT_PUSHOVER} -eq 0 -o ${SENT_TELEGRAM} -eq 0 -o ${SENT_SLACK} -eq 0 ] && exit 0
+[ ${SENT_EMAIL} -eq 0 -o ${SENT_PUSHOVER} -eq 0 -o ${SENT_TELEGRAM} -eq 0 -o ${SENT_SLACK} -eq 0 -o ${SENT_PUSHBULLET} -eq 0 ] && exit 0
# we did not send anything
exit 1