mirror of
				https://git.proxmox.com/git/mirror_zfs.git
				synced 2025-10-26 18:05:04 +03:00 
			
		
		
		
	Add Ntfy notification support to ZED
This commit adds the zed_notify_ntfy() function and hooks it into zed_notify(). This will allow ZED to send notifications to ntfy.sh or a self-hosted Ntfy service, which can be received on a desktop or mobile device. It is configured with ZED_NTFY_TOPIC, ZED_NTFY_URL, and ZED_NTFY_ACCESS_TOKEN variables in zed.rc. Reviewed-by: @classabbyamp Reviewed-by: Brian Behlendorf <behlendorf1@llnl.gov> Signed-off-by: Dex Wood <slash2314@gmail.com> Closes #15584
This commit is contained in:
		
							parent
							
								
									bcd83ccd25
								
							
						
					
					
						commit
						014265f4e6
					
				@ -205,6 +205,10 @@ zed_notify()
 | 
			
		||||
    [ "${rv}" -eq 0 ] && num_success=$((num_success + 1))
 | 
			
		||||
    [ "${rv}" -eq 1 ] && num_failure=$((num_failure + 1))
 | 
			
		||||
 | 
			
		||||
    zed_notify_ntfy "${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_failure}" -gt 0 ] && return 1
 | 
			
		||||
    return 2
 | 
			
		||||
@ -527,6 +531,100 @@ zed_notify_pushover()
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
# zed_notify_ntfy (subject, pathname)
 | 
			
		||||
#
 | 
			
		||||
# Send a notification via Ntfy.sh <https://ntfy.sh/>.
 | 
			
		||||
# The ntfy topic (ZED_NTFY_TOPIC) identifies the topic that the notification
 | 
			
		||||
# will be sent to Ntfy.sh server. The ntfy url (ZED_NTFY_URL) defines the
 | 
			
		||||
# self-hosted or provided hosted ntfy service location. The ntfy access token
 | 
			
		||||
# <https://docs.ntfy.sh/publish/#access-tokens> (ZED_NTFY_ACCESS_TOKEN) reprsents an
 | 
			
		||||
# access token that could be used if a topic is read/write protected. If a
 | 
			
		||||
# topic can be written to publicaly, a ZED_NTFY_ACCESS_TOKEN is not required.
 | 
			
		||||
#
 | 
			
		||||
# Requires curl and sed executables to be installed in the standard PATH.
 | 
			
		||||
#
 | 
			
		||||
# References
 | 
			
		||||
#   https://docs.ntfy.sh
 | 
			
		||||
#
 | 
			
		||||
# Arguments
 | 
			
		||||
#   subject: notification subject
 | 
			
		||||
#   pathname: pathname containing the notification message (OPTIONAL)
 | 
			
		||||
#
 | 
			
		||||
# Globals
 | 
			
		||||
#   ZED_NTFY_TOPIC
 | 
			
		||||
#   ZED_NTFY_ACCESS_TOKEN (OPTIONAL)
 | 
			
		||||
#   ZED_NTFY_URL
 | 
			
		||||
#
 | 
			
		||||
# Return
 | 
			
		||||
#   0: notification sent
 | 
			
		||||
#   1: notification failed
 | 
			
		||||
#   2: not configured
 | 
			
		||||
#
 | 
			
		||||
zed_notify_ntfy()
 | 
			
		||||
{
 | 
			
		||||
    local subject="$1"
 | 
			
		||||
    local pathname="${2:-"/dev/null"}"
 | 
			
		||||
    local msg_body
 | 
			
		||||
    local msg_out
 | 
			
		||||
    local msg_err
 | 
			
		||||
 | 
			
		||||
    [ -n "${ZED_NTFY_TOPIC}" ] || return 2
 | 
			
		||||
    local url="${ZED_NTFY_URL:-"https://ntfy.sh"}/${ZED_NTFY_TOPIC}"
 | 
			
		||||
 | 
			
		||||
    if [ ! -r "${pathname}" ]; then
 | 
			
		||||
        zed_log_err "ntfy 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_NTFY_ACCESS_TOKEN}" ]; then
 | 
			
		||||
        msg_out="$( \
 | 
			
		||||
        curl \
 | 
			
		||||
        -u ":${ZED_NTFY_ACCESS_TOKEN}" \
 | 
			
		||||
        -H "Title: ${subject}" \
 | 
			
		||||
        -d "${msg_body}" \
 | 
			
		||||
        -H "Priority: high" \
 | 
			
		||||
        "${url}" \
 | 
			
		||||
        2>/dev/null \
 | 
			
		||||
        )"; rv=$?
 | 
			
		||||
    else
 | 
			
		||||
        msg_out="$( \
 | 
			
		||||
        curl \
 | 
			
		||||
        -H "Title: ${subject}" \
 | 
			
		||||
        -d "${msg_body}" \
 | 
			
		||||
        -H "Priority: high" \
 | 
			
		||||
        "${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 "ntfy \"${msg_err}"\"
 | 
			
		||||
        return 1
 | 
			
		||||
    fi
 | 
			
		||||
    return 0
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
# zed_rate_limit (tag, [interval])
 | 
			
		||||
#
 | 
			
		||||
# Check whether an event of a given type [tag] has already occurred within the
 | 
			
		||||
 | 
			
		||||
@ -147,3 +147,25 @@ ZED_SYSLOG_SUBCLASS_EXCLUDE="history_event"
 | 
			
		||||
# help silence misbehaving drives.  This assumes your drive enclosure fully
 | 
			
		||||
# supports slot power control via sysfs.
 | 
			
		||||
#ZED_POWER_OFF_ENCLOUSRE_SLOT_ON_FAULT=1
 | 
			
		||||
 | 
			
		||||
##
 | 
			
		||||
# Ntfy topic
 | 
			
		||||
# This defines which topic will receive the ntfy notification.
 | 
			
		||||
#  <https://docs.ntfy.sh/publish/>
 | 
			
		||||
# Disabled by default; uncomment to enable.
 | 
			
		||||
#ZED_NTFY_TOPIC=""
 | 
			
		||||
 | 
			
		||||
##
 | 
			
		||||
# Ntfy access token (optional for public topics)
 | 
			
		||||
# This defines an access token which can be used
 | 
			
		||||
# to allow you to authenticate when sending to topics
 | 
			
		||||
# <https://docs.ntfy.sh/publish/#access-tokens>
 | 
			
		||||
# Disabled by default; uncomment to enable.
 | 
			
		||||
#ZED_NTFY_ACCESS_TOKEN=""
 | 
			
		||||
 | 
			
		||||
##
 | 
			
		||||
# Ntfy Service URL
 | 
			
		||||
# This defines which service the ntfy call will be directed toward
 | 
			
		||||
#  <https://docs.ntfy.sh/install/>
 | 
			
		||||
# https://ntfy.sh by default; uncomment to enable an alternative service url.
 | 
			
		||||
#ZED_NTFY_URL="https://ntfy.sh"
 | 
			
		||||
 | 
			
		||||
		Loading…
	
		Reference in New Issue
	
	Block a user