{ inputs, lib, pkgs, ... }: { services.telegraf.extraConfig.inputs.file = let inputsWithDate = lib.filterAttrs (_: input: input ? lastModified) inputs; flakeAttrs = input: (lib.mapAttrsToList (n: v: ''${n}="${v}"'') (lib.filterAttrs (_: v: (builtins.typeOf v) == "string") input)); lastModified = name: input: '' flake_input_last_modified{input="${name}",${lib.concatStringsSep "," (flakeAttrs input)}} ${toString input.lastModified}''; # avoid adding store path references on flakes which me not need at runtime. promText = builtins.unsafeDiscardStringContext '' # HELP flake_registry_last_modified Last modification date of flake input in unixtime # TYPE flake_input_last_modified gauge ${lib.concatStringsSep "\n" (lib.mapAttrsToList lastModified inputsWithDate)} ''; in [ { data_format = "prometheus"; files = [ (pkgs.writeText "flake-inputs.prom" promText) ]; } ]; }