diff --git a/lib/default.nix b/lib/default.nix index dd7f914..8eca1e3 100644 --- a/lib/default.nix +++ b/lib/default.nix @@ -5,6 +5,20 @@ envErrorMessage = varName: "Error: The ${varName} environment variable is not set."; + AllSystems = [ + "aarch64-darwin" + "aarch64-linux" + "armv5tel-linux" + "armv6l-linux" + "armv7l-linux" + "i686-linux" + "mipsel-linux" + "powerpc64le-linux" + "riscv64-linux" + "x86_64-darwin" + "x86_64-linux" + ]; + commonSystems = [ "x86_64-linux" "aarch64-linux" @@ -28,7 +42,7 @@ ) {} supportedSystems; - forAllSystemsWithPkgs = pkgOverlays: f: forSystemsWithPkgs commonSystems pkgOverlays f; + forAllSystemsWithPkgs = pkgOverlays: f: forSystemsWithPkgs AllSystems pkgOverlays f; parseEnv = import ./parse-env.nix; @@ -44,10 +58,10 @@ else {}; in { # -- For all systems -- - inherit dotEnv minorEnvironment parseEnv forAllSystemsWithPkgs forSystemsWithPkgs commonSystems; + inherit dotEnv minorEnvironment parseEnv forAllSystemsWithPkgs forSystemsWithPkgs commonSystems AllSystems; forSystems = systems: nixpkgs.lib.genAttrs systems; - forAllSystems = nixpkgs.lib.genAttrs commonSystems; + forAllSystems = nixpkgs.lib.genAttrs AllSystems; shellModules = { logs = builtins.readFile ./shell/logs.sh; diff --git a/nixos/module/hectic/service/sentinèlla.nix b/nixos/module/hectic/service/sentinèlla.nix index 14b15da..f4724b6 100644 --- a/nixos/module/hectic/service/sentinèlla.nix +++ b/nixos/module/hectic/service/sentinèlla.nix @@ -68,6 +68,15 @@ in { }; sentinel = { enable = lib.mkEnableOption "enable sentinèlla sentinel services, that reported servers statuses based on probe polls"; + respondents = lib.mkOption { + type = lib.types.listOf lib.types.attrsOf ( + lib.types.submodule { + options = { + + }; + } + ); + }; environmentPath = lib.mkOption { type = lib.types.path; example = '' @@ -115,7 +124,32 @@ in { }; }) (lib.mkIf cfg.sentinel.enable { - + systemd.services."sentinella-sentinel" = { + description = "Hectic server health check"; + after = [ "network.target" ]; + wantedBy = [ "multi-user.target" ]; + serviceConfig = { + Type = "simple"; + ExecStart = "${self.packages.${system}."sentinèlla"}/bin/probe"; + Environment = [ + "URLS=${lib.concatStringsSep "," cfg.probe.urls}" + "VOLUMES=${lib.concatStringsSep "," cfg.probe.volumes}" + "PORT=${builtins.toString cfg.probe.port}" + ]; + Restart = "always"; + RestartSec = "5s"; + + # Shutdown configuration + TimeoutStopSec = "30s"; + KillSignal = "SIGTERM"; + KillMode = "mixed"; + + # Security and process management + RemainAfterExit = false; + StandardOutput = "journal"; + StandardError = "journal"; + }; + }; }) ]; } diff --git a/package/sentinèlla/sentinel.sh b/package/sentinèlla/sentinel.sh index 56f5d78..726b149 100644 --- a/package/sentinèlla/sentinel.sh +++ b/package/sentinèlla/sentinel.sh @@ -13,7 +13,7 @@ set -eu TIMEOUT=${TIMEOUT:-5} POLLING_INTERVAL_SEC=${POLLING_INTERVAL_SEC:-3} -STATE_DIR=${STATE_DIR:-/tmp/sentinel} +STATE_DIR=${STATE_DIR:-$(mktemp -d)} SERVERS=${SERVERS:-} TOKENS=${TOKENS:-} TOKEN=${TOKEN:-}