Add Gotify notification support to ZED
This commit adds the zed_notify_gotify() function and hooks it into zed_notify(). This will allow ZED to send notifications to a self-hosted Gotify service, which can be received on a desktop or mobile device. It is configured with ZED_GOTIFY_URL, ZED_GOTIFY_APPTOKEN and ZED_GOTIFY_PRIORITY variables in zed.rc. Reviewed-by: Brian Behlendorf <behlendorf1@llnl.gov> Signed-off-by: gofaster <felix.gofaster@gmail.com> Closes #15693
This commit is contained in:
parent
e78aca3b33
commit
a382e21194
|
@ -209,6 +209,10 @@ zed_notify()
|
||||||
[ "${rv}" -eq 0 ] && num_success=$((num_success + 1))
|
[ "${rv}" -eq 0 ] && num_success=$((num_success + 1))
|
||||||
[ "${rv}" -eq 1 ] && num_failure=$((num_failure + 1))
|
[ "${rv}" -eq 1 ] && num_failure=$((num_failure + 1))
|
||||||
|
|
||||||
|
zed_notify_gotify "${subject}" "${pathname}"; rv=$?
|
||||||
|
[ "${rv}" -eq 0 ] && num_success=$((num_success + 1))
|
||||||
|
[ "${rv}" -eq 1 ] && num_failure=$((num_failure + 1))
|
||||||
|
|
||||||
[ "${num_success}" -gt 0 ] && return 0
|
[ "${num_success}" -gt 0 ] && return 0
|
||||||
[ "${num_failure}" -gt 0 ] && return 1
|
[ "${num_failure}" -gt 0 ] && return 1
|
||||||
return 2
|
return 2
|
||||||
|
@ -624,6 +628,97 @@ zed_notify_ntfy()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
# zed_notify_gotify (subject, pathname)
|
||||||
|
#
|
||||||
|
# Send a notification via Gotify <https://gotify.net/>.
|
||||||
|
# The Gotify URL (ZED_GOTIFY_URL) defines a self-hosted Gotify location.
|
||||||
|
# The Gotify application token (ZED_GOTIFY_APPTOKEN) defines a
|
||||||
|
# Gotify application token which is associated with a message.
|
||||||
|
# The optional Gotify priority value (ZED_GOTIFY_PRIORITY) overrides the
|
||||||
|
# default or configured priority at the Gotify server for the application.
|
||||||
|
#
|
||||||
|
# Requires curl and sed executables to be installed in the standard PATH.
|
||||||
|
#
|
||||||
|
# References
|
||||||
|
# https://gotify.net/docs/index
|
||||||
|
#
|
||||||
|
# Arguments
|
||||||
|
# subject: notification subject
|
||||||
|
# pathname: pathname containing the notification message (OPTIONAL)
|
||||||
|
#
|
||||||
|
# Globals
|
||||||
|
# ZED_GOTIFY_URL
|
||||||
|
# ZED_GOTIFY_APPTOKEN
|
||||||
|
# ZED_GOTIFY_PRIORITY
|
||||||
|
#
|
||||||
|
# Return
|
||||||
|
# 0: notification sent
|
||||||
|
# 1: notification failed
|
||||||
|
# 2: not configured
|
||||||
|
#
|
||||||
|
zed_notify_gotify()
|
||||||
|
{
|
||||||
|
local subject="$1"
|
||||||
|
local pathname="${2:-"/dev/null"}"
|
||||||
|
local msg_body
|
||||||
|
local msg_out
|
||||||
|
local msg_err
|
||||||
|
|
||||||
|
[ -n "${ZED_GOTIFY_URL}" ] && [ -n "${ZED_GOTIFY_APPTOKEN}" ] || return 2
|
||||||
|
local url="${ZED_GOTIFY_URL}/message?token=${ZED_GOTIFY_APPTOKEN}"
|
||||||
|
|
||||||
|
if [ ! -r "${pathname}" ]; then
|
||||||
|
zed_log_err "gotify cannot read \"${pathname}\""
|
||||||
|
return 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
zed_check_cmd "curl" "sed" || return 1
|
||||||
|
|
||||||
|
# Read the message body in.
|
||||||
|
#
|
||||||
|
msg_body="$(cat "${pathname}")"
|
||||||
|
|
||||||
|
if [ -z "${msg_body}" ]
|
||||||
|
then
|
||||||
|
msg_body=$subject
|
||||||
|
subject=""
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Send the POST request and check for errors.
|
||||||
|
#
|
||||||
|
if [ -n "${ZED_GOTIFY_PRIORITY}" ]; then
|
||||||
|
msg_out="$( \
|
||||||
|
curl \
|
||||||
|
--form-string "title=${subject}" \
|
||||||
|
--form-string "message=${msg_body}" \
|
||||||
|
--form-string "priority=${ZED_GOTIFY_PRIORITY}" \
|
||||||
|
"${url}" \
|
||||||
|
2>/dev/null \
|
||||||
|
)"; rv=$?
|
||||||
|
else
|
||||||
|
msg_out="$( \
|
||||||
|
curl \
|
||||||
|
--form-string "title=${subject}" \
|
||||||
|
--form-string "message=${msg_body}" \
|
||||||
|
"${url}" \
|
||||||
|
2>/dev/null \
|
||||||
|
)"; rv=$?
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [ "${rv}" -ne 0 ]; then
|
||||||
|
zed_log_err "curl exit=${rv}"
|
||||||
|
return 1
|
||||||
|
fi
|
||||||
|
msg_err="$(echo "${msg_out}" \
|
||||||
|
| sed -n -e 's/.*"errors" *:.*\[\(.*\)\].*/\1/p')"
|
||||||
|
if [ -n "${msg_err}" ]; then
|
||||||
|
zed_log_err "gotify \"${msg_err}"\"
|
||||||
|
return 1
|
||||||
|
fi
|
||||||
|
return 0
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
# zed_rate_limit (tag, [interval])
|
# zed_rate_limit (tag, [interval])
|
||||||
#
|
#
|
||||||
|
|
|
@ -169,3 +169,24 @@ ZED_SYSLOG_SUBCLASS_EXCLUDE="history_event"
|
||||||
# <https://docs.ntfy.sh/install/>
|
# <https://docs.ntfy.sh/install/>
|
||||||
# https://ntfy.sh by default; uncomment to enable an alternative service url.
|
# https://ntfy.sh by default; uncomment to enable an alternative service url.
|
||||||
#ZED_NTFY_URL="https://ntfy.sh"
|
#ZED_NTFY_URL="https://ntfy.sh"
|
||||||
|
|
||||||
|
##
|
||||||
|
# Gotify server URL
|
||||||
|
# This defines a URL that the Gotify call will be directed toward.
|
||||||
|
# <https://gotify.net/docs/index>
|
||||||
|
# Disabled by default; uncomment to enable.
|
||||||
|
#ZED_GOTIFY_URL=""
|
||||||
|
|
||||||
|
##
|
||||||
|
# Gotify application token
|
||||||
|
# This defines a Gotify application token which a message is associated with.
|
||||||
|
# This token is generated when an application is created on the Gotify server.
|
||||||
|
# Disabled by default; uncomment to enable.
|
||||||
|
#ZED_GOTIFY_APPTOKEN=""
|
||||||
|
|
||||||
|
##
|
||||||
|
# Gotify priority (optional)
|
||||||
|
# If defined, this overrides the default priority of the
|
||||||
|
# Gotify application associated with ZED_GOTIFY_APPTOKEN.
|
||||||
|
# Value is an integer 0 and up.
|
||||||
|
#ZED_GOTIFY_PRIORITY=""
|
||||||
|
|
Loading…
Reference in New Issue