diff options
Diffstat (limited to 'modules/nixos/personal/monitoring.nix')
| -rw-r--r-- | modules/nixos/personal/monitoring.nix | 55 |
1 files changed, 55 insertions, 0 deletions
diff --git a/modules/nixos/personal/monitoring.nix b/modules/nixos/personal/monitoring.nix new file mode 100644 index 0000000..876b5e9 --- /dev/null +++ b/modules/nixos/personal/monitoring.nix @@ -0,0 +1,55 @@ +{ config, lib, pkgs, ... }: + +let cfg = config.personal.monitoring; +in { + options.personal.monitoring = { + enable = lib.mkEnableOption "e-mail monitoring"; + services = lib.mkOption { + type = with lib.types; listOf str; + default = [ ]; + description = "The list of services whose failure should be notified."; + }; + }; + + config = { + programs.msmtp = { + enable = cfg.enable; + accounts.default = { + auth = true; + tls = true; + tls_starttls = false; + host = "ssl0.ovh.net"; + port = 465; + from = "quentin@aristote.fr"; + user = "quentin@aristote.fr"; + passwordeval = "cat /etc/msmtp/secrets"; + }; + }; + + systemd.services = lib.mkIf cfg.enable (lib.mkMerge ([{ + "notify@" = { + enable = true; + description = "Send the status of the %i service as an e-mail."; + serviceConfig = { + Type = "oneshot"; + ExecStart = let + netCfg = config.networking; + me = "${netCfg.hostName}.${netCfg.domain}"; + script = pkgs.writeScript "notify" '' + #!${pkgs.runtimeShell} + service="$1" + echo \ + "Subject: ${me}: service $service failed + Service $service failed on ${me}, with the following status: + + $(systemctl status $service) + " | ${pkgs.msmtp}/bin/msmtp quentin@aristote.fr + ''; + in "${script} %i"; + }; + }; + }] ++ builtins.map + (service: { "${service}".onFailure = [ "notify@%i.service" ]; }) + cfg.services)); + }; +} |
