128 lines
2.9 KiB
Nix
128 lines
2.9 KiB
Nix
{
|
|
pkgs,
|
|
lib,
|
|
config,
|
|
...
|
|
}:
|
|
with lib;
|
|
let
|
|
cfg = config.global.fs.zfs.alert;
|
|
|
|
backend = {
|
|
text = pkgs.writeShellScript "telegram-text" ''
|
|
set -e
|
|
source ${cfg.secret}
|
|
|
|
${pkgs.curl}/bin/curl -sG \
|
|
--data-urlencode "chat_id=$CHATID" \
|
|
--data-urlencode "text=$ALERT" \
|
|
$CURL_EXTRA_ARGS \
|
|
"https://api.telegram.org/bot$APIKEY/sendMessage"
|
|
'';
|
|
image = pkgs.writeShellScript "telegram-image" ''
|
|
set -e
|
|
source ${cfg.secret}
|
|
|
|
${pkgs.curl}/bin/curl -sG \
|
|
-F "chat_id=$CHATID" \
|
|
-F "caption=$ALERT" \
|
|
-F "photo=@-" \
|
|
$CURL_EXTRA_ARGS \
|
|
"https://api.telegram.org/bot$APIKEY/sendPhoto"
|
|
'';
|
|
};
|
|
|
|
zedAlert = pkgs.writeShellScript "zed-alert" ''
|
|
set -e
|
|
export BODY="$(cat)"
|
|
|
|
# add tag
|
|
ALERT="$1 #zfs"
|
|
|
|
export ALERT
|
|
echo -e "$BODY" | \
|
|
${pkgs.imagemagick}/bin/convert \
|
|
-size 1500x2000 xc:black \
|
|
-font "${pkgs.freefont_ttf}/share/fonts/truetype/FreeMono.ttf" \
|
|
-pointsize 16 \
|
|
-fill white -annotate +15+80 "@-" \
|
|
-trim -bordercolor "#000" \
|
|
-border 32 +repage \
|
|
png:- | \
|
|
${backend.image}
|
|
'';
|
|
|
|
mdadmAlert = pkgs.writeShellScript "mdadm-alert" ''
|
|
set -e
|
|
|
|
EVENT="$1"
|
|
ARRAY="$2"
|
|
DEVICE="$3"
|
|
|
|
# fallback alert
|
|
ALERT="$EVENT | $ARRAY | $DEVICE"
|
|
|
|
case $EVENT in
|
|
DegradedArray)
|
|
ALERT="Array $ARRAY is in a degraded state"
|
|
;;
|
|
DeviceDisappeared)
|
|
ALERT="Array $ARRAY disappeared"
|
|
;;
|
|
Fail)
|
|
ALERT="Array $ARRAY encountered failure of component $DEVICE"
|
|
;;
|
|
FailSpare)
|
|
ALERT="Array $ARRAY encountered failure of spare component $DEVICE during rebuild"
|
|
;;
|
|
MoveSpare)
|
|
ALERT="Spare $DEVICE moved to array $ARRAY"
|
|
;;
|
|
NewArray)
|
|
ALERT="Array $ARRAY appeared"
|
|
;;
|
|
Rebuild??)
|
|
ALERT="Array $ARRAY rebuild is now $(echo $EVENT | ${pkgs.sedutil}/bin/sed 's/Rebuild//')% complete"
|
|
;;
|
|
RebuildFinished)
|
|
ALERT="Rebuild of array $ARRAY has concluded"
|
|
;;
|
|
RebuildStarted)
|
|
ALERT="Rebuild of array $ARRAY has started"
|
|
;;
|
|
SpareActive)
|
|
ALERT="Spare $DEVICE activated in array $ARRAY"
|
|
;;
|
|
SparesMissing)
|
|
ALERT="Array $ARRAY missing one or more spares"
|
|
;;
|
|
TestMessage)
|
|
ALERT="Test message generated for array $ARRAY"
|
|
;;
|
|
esac
|
|
|
|
# add tag
|
|
ALERT="$ALERT #swraid"
|
|
|
|
export ALERT
|
|
exec ${backend.text}
|
|
'';
|
|
in
|
|
mkIf (cfg.secret != null) {
|
|
services.zfs.zed = mkIf cfg.zed {
|
|
settings = {
|
|
ZED_EMAIL_ADDR = [ "root" ];
|
|
ZED_EMAIL_PROG = toString zedAlert;
|
|
ZED_EMAIL_OPTS = "'@SUBJECT@'";
|
|
|
|
ZED_NOTIFY_INTERVAL_SECS = 3600;
|
|
ZED_NOTIFY_VERBOSE = false;
|
|
|
|
ZED_USE_ENCLOSURE_LEDS = true;
|
|
ZED_SCRUB_AFTER_RESILVER = false;
|
|
};
|
|
};
|
|
|
|
global.fs.zfs.split.mdProg = mkIf cfg.swraid (toString mdadmAlert);
|
|
}
|