aboutsummaryrefslogtreecommitdiffstats
path: root/cmd/zed/zed.d/scrub.finish-email.sh
blob: b5ce3f74d732a24deed4bf2a59ace54434c9f2b6 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
#!/bin/sh
#
# Send email to ZED_EMAIL in response to a RESILVER.FINISH or SCRUB.FINISH.
# By default, "zpool status" output will only be included in the email for
#   a scrub.finish zevent if the pool is not healthy; to always include its
#   output, set ZED_EMAIL_VERBOSE=1.
# Exit codes:
#   0: email sent
#   1: email failed
#   2: email suppressed
#   3: missing executable
#   4: unsupported event class
#   5: internal error
#
test -f "${ZED_SCRIPT_DIR}/zed.rc" && . "${ZED_SCRIPT_DIR}/zed.rc"

test -n "${ZEVENT_POOL}" || exit 5
test -n "${ZEVENT_SUBCLASS}" || exit 5

if   test "${ZEVENT_SUBCLASS}" = "resilver.finish"; then
  ACTION="resilvering"
elif test "${ZEVENT_SUBCLASS}" = "scrub.finish"; then
  ACTION="scrubbing"
else
  logger -t "${ZED_SYSLOG_TAG:=zed}" \
    -p "${ZED_SYSLOG_PRIORITY:=daemon.warning}" \
    `basename "$0"`: unsupported event class \"${ZEVENT_SUBCLASS}\"
  exit 4
fi

# Only send email if ZED_EMAIL has been configured.
test -n "${ZED_EMAIL}" || exit 2

# Ensure requisite executables are installed.
if ! command -v "${MAIL:=mail}" >/dev/null 2>&1; then
  logger -t "${ZED_SYSLOG_TAG:=zed}" \
    -p "${ZED_SYSLOG_PRIORITY:=daemon.warning}" \
    `basename "$0"`: "${MAIL}" not installed
  exit 3
fi
if ! test -x "${ZPOOL}"; then
  logger -t "${ZED_SYSLOG_TAG:=zed}" \
    -p "${ZED_SYSLOG_PRIORITY:=daemon.warning}" \
    `basename "$0"`: "${ZPOOL}" not installed
  exit 3
fi

# For scrub, suppress email if pool is healthy and verbosity is not enabled.
if test "${ZEVENT_SUBCLASS}" = "scrub.finish"; then
  HEALTHY=`"${ZPOOL}" status -x "${ZEVENT_POOL}" | \
    grep "'${ZEVENT_POOL}' is healthy"`
  test -n "${HEALTHY}" -a "${ZED_EMAIL_VERBOSE:=0}" = 0 && exit 2
fi

"${MAIL}" -s "ZFS ${ZEVENT_SUBCLASS} event for ${ZEVENT_POOL} on `hostname`" \
  "${ZED_EMAIL}" <<EOF
A ZFS pool has finished ${ACTION}:

   eid: ${ZEVENT_EID}
  host: `hostname`
  time: ${ZEVENT_TIME_STRING}
`"${ZPOOL}" status "${ZEVENT_POOL}"`
EOF
MAIL_STATUS=$?

if test "${MAIL_STATUS}" -ne 0; then
  logger -t "${ZED_SYSLOG_TAG:=zed}" \
    -p "${ZED_SYSLOG_PRIORITY:=daemon.warning}" \
    `basename "$0"`: "${MAIL}" exit="${MAIL_STATUS}"
  exit 1
fi

exit 0