Mon Jun 10 04:31:23 PM CEST 2024

This commit is contained in:
Thomas Avé 2024-06-10 16:31:23 +02:00
parent 2a90b44b84
commit 7af0a4e7fd
3 changed files with 25 additions and 74 deletions

View File

@ -1,23 +1,7 @@
{ inputs, config, pkgs, ... }: { inputs, config, pkgs, ... }:
let let
scripts = { scripts = {
disk_check = { disk_check = import ./utils/disk_check.nix {inherit pkgs;};
when = "*-*-* *:00:00";
script = toString (pkgs.writeShellScript "script" ''
REPORT_EMAIL=email@thomasave.be
ZPOOL_STATUS=$(zpool status -x)
if [ "$ZPOOL_STATUS" = "all pools are healthy" ] || [ "$ZPOOL_STATUS" = "no pools available" ]
then
printf 0 > /var/db/zpool.status
else
if [ "$(cat /var/db/zpool.status)" -eq 0 ]
then
zpool status | mail -s "ZPOOL NOT HEALTHY" $REPORT_EMAIL
printf 1 > /var/db/zpool.status
fi
fi
'');
};
vdirsyncer = { vdirsyncer = {
when = "*:0/15"; when = "*:0/15";
script = toString (pkgs.writeShellScript "script" '' script = toString (pkgs.writeShellScript "script" ''

View File

@ -1,51 +1,5 @@
{ inputs, config, pkgs, ... }: { inputs, config, pkgs, ... }:
let let
notify_script = (pkgs.writers.writePython3Bin "telegram-notify.py" {
libraries = [ pkgs.python3Packages.python-telegram-bot ];
} ''
import telegram
import asyncio
import sys
import subprocess
async def run():
text = subprocess.check_output(
["journalctl", "--user", "-u", sys.argv[1], "-b"]
).decode("utf-8")
with open("/home/server/mail.log", "a") as f:
f.write("===========================================")
f.write(text)
bot = telegram.Bot(token="381718873:AAElFmI2BDjumCehhWicuksE0vutrPSkoGA")
chat_id = 125754925
await bot.send_message(
chat_id, "Vault encountered an error in the service: " + sys.argv[1]
)
await bot.send_message(chat_id, text)
if __name__ == "__main__":
loop = asyncio.get_event_loop()
loop.run_until_complete(asyncio.wait([loop.create_task(run())]))
loop.close()
'');
mkTimer = name: cfg: {
Install.WantedBy = [ "timers.target" ];
Timer = {
Persistent = true;
OnCalendar = cfg.when;
Unit = "${name}.service";
};
};
mkService = name: cfg: {
Unit.Description = name;
Unit.OnFailure = "status_notify@%n.service";
Install = { WantedBy = [ "default.target" ]; };
Service = { ExecStart = cfg.script; };
};
scripts = { scripts = {
disk_check = { disk_check = {
when = "*-*-* *:00:00"; when = "*-*-* *:00:00";
@ -102,7 +56,12 @@ in {
}; };
xdg.enable = true; xdg.enable = true;
imports = [ (import ./common.nix { inherit inputs config pkgs; }) ./ssh ]; imports = [
(import ./common.nix { inherit inputs config pkgs; })
(import ./utils/services.nix { inherit pkgs; scripts=scripts; })
./ssh
];
programs.ssh.matchBlocks."*".identityFile = "/home/server/.secrets/SSH/Vault/id_ed25519"; programs.ssh.matchBlocks."*".identityFile = "/home/server/.secrets/SSH/Vault/id_ed25519";
home.sessionVariables = { home.sessionVariables = {
@ -111,14 +70,4 @@ in {
XDG_RUNTIME_DIR = "/run/user/$(id -u)"; XDG_RUNTIME_DIR = "/run/user/$(id -u)";
}; };
systemd.user.services = pkgs.lib.mapAttrs mkService scripts
// (pkgs.lib.mapAttrs mkService {
"status_notify@" = {
script = "${notify_script}/bin/telegram-notify.py %i";
};
});
systemd.user.timers = pkgs.lib.mapAttrs mkTimer scripts;
# Don't forget to enable these timers! Or reboot, after which it should also be activated automatically
# systemctl --user enable --now disk_check.timer
} }

18
home/utils/disk_check.nix Normal file
View File

@ -0,0 +1,18 @@
{pkgs}:
{
when = "*-*-* *:00:00";
script = toString (pkgs.writeShellScript "script" ''
REPORT_EMAIL=email@thomasave.be
ZPOOL_STATUS=$(zpool status -x)
if [ "$ZPOOL_STATUS" = "all pools are healthy" ] || [ "$ZPOOL_STATUS" = "no pools available" ]
then
printf 0 > /var/db/zpool.status
else
if [ "$(cat /var/db/zpool.status)" -eq 0 ]
then
zpool status | mail -s "ZPOOL NOT HEALTHY" $REPORT_EMAIL
printf 1 > /var/db/zpool.status
fi
fi
'');
}