liminix

Unnamed repository; edit this file 'description' to name the repository.
Log | Files | Refs | README | LICENSE

commit 8106389b74c3d6971f58eeb4187e82d890cb29f8
parent 0f90f3f46d613e75e26c1506c5906c976e7c05e5
Author: Daniel Barlow <dan@telent.net>
Date:   Mon, 27 Oct 2025 21:19:43 +0000

add log backfill services

Diffstat:
Mmodules/s6/default.nix | 36+++++++++++++++++++++++++++++++-----
1 file changed, 31 insertions(+), 5 deletions(-)

diff --git a/modules/s6/default.nix b/modules/s6/default.nix @@ -28,6 +28,7 @@ let # don't put this in /run/log because logtap tries to create it # before s6-log makes the directory fifo = "/run/.log-fifo"; + fifoBackfill = "/run/.log-fifo-backfill"; logger = let @@ -269,13 +270,38 @@ in }; config = { + programs.busybox.applets = mkIf config.logging.shipping.enable [ "mkfifo" ]; services.log-shipper = - let cfg = config.logging.shipping; in - mkIf config.logging.shipping.enable ( - longrun { + let + cfg = config.logging.shipping; + dependencies = config.logging.shipping.dependencies; + in mkIf cfg.enable ( + let + live = longrun { + name = "log-shipper-live"; + run = "${cfg.command} ${fifo}"; + inherit dependencies; + }; + source = longrun { + name = "log-shipper-backfill-source"; + # if backfill dies we want the service manager to retry + # it (assuming that its dependencies are still healthy). + # But if it reaches the end of logs to backfill, we want + # it to rest quietly not to exit + run = '' + test -p ${fifoBackfill} || mkfifo ${fifoBackfill} + (cat ${config.logging.directory}/*; sleep 86400) | ${pkgs.logtap}/bin/backfill ${fifoBackfill} ${fifoBackfill}.ts + ''; + dependencies = dependencies ++ [live]; + }; + sink = longrun { + name = "log-shipper-backfill-sink"; + run = "${cfg.command} ${fifoBackfill}"; + dependencies = dependencies ++ [ source ]; + }; + in bundle { name = "log-shipper"; - run = "${cfg.command} ${fifo}"; - inherit (config.logging.shipping) dependencies; + contents = [live source sink]; } );