forked from openzfs/zfs
-
Notifications
You must be signed in to change notification settings - Fork 5
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
This patch stack begins with cleaning up the existing ZEDLETs, refactoring common code blocks into zed-functions.sh, adopting a more consistent coding style, updating exit codes, etc. All scripts now run cleanly through ShellCheck. The old "email" ZEDLETs are replaced with new "notify" ZEDLETs. A notification can now be sent via email and/or Pushbullet. Additional notification methods will likely be added in the future. Pushbullet notifications are enabled by setting the ZED_PUSHBULLET_ACCESS_TOKEN and (optionally) ZED_PUSHBULLET_CHANNEL_TAG in zed.rc. The Pushbullet implementation requires awk, curl, and sed executables to be installed in the standard PATH. Signed-off-by: Chris Dunlap <cdunlap@llnl.gov> Signed-off-by: Brian Behlendorf <behlendorf1@llnl.gov> Closes openzfs#3327
- Loading branch information
Showing
19 changed files
with
911 additions
and
441 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,30 @@ | ||
Shell scripts are the recommended choice for ZEDLETs that mostly call | ||
other utilities and do relatively little data manipulation. | ||
|
||
Shell scripts MUST work on both bash and dash. | ||
|
||
Shell scripts MUST run cleanly through ShellCheck: | ||
http://www.shellcheck.net/ | ||
|
||
General functions reside in "zed-functions.sh". Use them where applicable. | ||
|
||
Additional references that may be of use: | ||
|
||
Google Shell Style Guide | ||
https://google-styleguide.googlecode.com/svn/trunk/shell.xml | ||
|
||
Dash as /bin/sh | ||
https://wiki.ubuntu.com/DashAsBinSh | ||
|
||
Common shell script mistakes | ||
http://www.pixelbeat.org/programming/shell_script_mistakes.html | ||
|
||
Filenames and Pathnames in Shell: How to do it Correctly | ||
http://www.dwheeler.com/essays/filenames-in-shell.html | ||
|
||
Autoconf: Portable Shell Programming | ||
https://www.gnu.org/software/autoconf/manual/autoconf.html#Portable-Shell | ||
|
||
Please BE CONSISTENT with the existing style, check for errors, | ||
minimize dependencies where possible, try to be portable, | ||
and comment anything non-obvious. Festina lente. |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,11 +1,10 @@ | ||
#!/bin/sh | ||
# | ||
# Log the zevent via syslog. | ||
# | ||
test -f "${ZED_ZEDLET_DIR}/zed.rc" && . "${ZED_ZEDLET_DIR}/zed.rc" | ||
|
||
logger -t "${ZED_SYSLOG_TAG:=zed}" -p "${ZED_SYSLOG_PRIORITY:=daemon.notice}" \ | ||
eid="${ZEVENT_EID}" class="${ZEVENT_SUBCLASS}" \ | ||
"${ZEVENT_POOL:+pool=$ZEVENT_POOL}" | ||
[ -f "${ZED_ZEDLET_DIR}/zed.rc" ] && . "${ZED_ZEDLET_DIR}/zed.rc" | ||
. "${ZED_ZEDLET_DIR}/zed-functions.sh" | ||
|
||
zed_log_msg "eid=${ZEVENT_EID}" "class=${ZEVENT_SUBCLASS}" \ | ||
"${ZEVENT_POOL:+"pool=${ZEVENT_POOL}"}" | ||
exit 0 |
This file was deleted.
Oops, something went wrong.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1 @@ | ||
io-notify.sh |
This file was deleted.
Oops, something went wrong.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1 @@ | ||
io-notify.sh |
This file was deleted.
Oops, something went wrong.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,54 @@ | ||
#!/bin/sh | ||
# | ||
# Send notification in response to a given zevent. | ||
# | ||
# This is a generic script than can be symlinked to a file in the | ||
# enabled-zedlets directory to have a notification sent when a particular | ||
# class of zevents occurs. The symlink filename must begin with the zevent | ||
# (sub)class string (e.g., "probe_failure-notify.sh" for the "probe_failure" | ||
# subclass). Refer to the zed(8) manpage for details. | ||
# | ||
# Only one notification per ZED_NOTIFY_INTERVAL_SECS will be sent for a given | ||
# class/pool combination. This protects against spamming the recipient | ||
# should multiple events occur together in time for the same pool. | ||
# | ||
# Exit codes: | ||
# 0: notification sent | ||
# 1: notification failed | ||
# 2: notification not configured | ||
# 3: notification suppressed | ||
|
||
[ -f "${ZED_ZEDLET_DIR}/zed.rc" ] && . "${ZED_ZEDLET_DIR}/zed.rc" | ||
. "${ZED_ZEDLET_DIR}/zed-functions.sh" | ||
|
||
# Rate-limit the notification based in part on the filename. | ||
# | ||
rate_limit_tag="${ZEVENT_POOL};${ZEVENT_SUBCLASS};$(basename -- "$0")" | ||
rate_limit_interval="${ZED_NOTIFY_INTERVAL_SECS}" | ||
zed_rate_limit "${rate_limit_tag}" "${rate_limit_interval}" || exit 3 | ||
|
||
umask 077 | ||
pool_str="${ZEVENT_POOL:+" for ${ZEVENT_POOL}"}" | ||
host_str=" on $(hostname)" | ||
note_subject="ZFS ${ZEVENT_SUBCLASS} event${pool_str}${host_str}" | ||
note_pathname="${TMPDIR:="/tmp"}/$(basename -- "$0").${ZEVENT_EID}.$$" | ||
{ | ||
echo "ZFS has posted the following event:" | ||
echo | ||
echo " eid: ${ZEVENT_EID}" | ||
echo " class: ${ZEVENT_SUBCLASS}" | ||
echo " host: $(hostname)" | ||
echo " time: ${ZEVENT_TIME_STRING}" | ||
|
||
[ -n "${ZEVENT_VDEV_TYPE}" ] && echo " vtype: ${ZEVENT_VDEV_TYPE}" | ||
[ -n "${ZEVENT_VDEV_PATH}" ] && echo " vpath: ${ZEVENT_VDEV_PATH}" | ||
[ -n "${ZEVENT_VDEV_GUID}" ] && echo " vguid: ${ZEVENT_VDEV_GUID}" | ||
|
||
[ -n "${ZEVENT_POOL}" ] && [ -x "${ZPOOL}" ] \ | ||
&& "${ZPOOL}" status "${ZEVENT_POOL}" | ||
|
||
} > "${note_pathname}" | ||
|
||
zed_notify "${note_subject}" "${note_pathname}"; rv=$? | ||
rm -f "${note_pathname}" | ||
exit "${rv}" |
Oops, something went wrong.