ops/nixos: add nixos-size to measure total closure pinned by booted-system/current-system mismatch

This commit is contained in:
Luke Granger-Brown 2022-04-07 03:42:17 +00:00
parent bd4e52105d
commit 55b6bd2a19
5 changed files with 50 additions and 8 deletions

View file

@ -69,4 +69,5 @@
extraPkgs = pkgs: with pkgs; [ openssl gnome.zenity ]; extraPkgs = pkgs: with pkgs; [ openssl gnome.zenity ];
}; };
vault-acme = pkgs.callPackage ./vault-acme { }; vault-acme = pkgs.callPackage ./vault-acme { };
nixos-size = pkgs.callPackage ./nixos-size { };
} // (import ./heptapod-runner args) } // (import ./heptapod-runner args)

View file

@ -0,0 +1,3 @@
#!/bin/sh
echo -ne "$sp1\n$sp2\n" > $out

View file

@ -0,0 +1,13 @@
{ builder ? ./combined-builder.sh }:
derivation {
system = builtins.currentSystem;
name = "nixos-size-combined";
inherit builder;
sp1 = builtins.storePath /run/current-system;
sp2 = builtins.storePath /run/booted-system;
preferLocalBuild = true;
allowSubstitutes = false;
}

View file

@ -0,0 +1,15 @@
{ writeShellApplication, nix_2_3, gawk }:
writeShellApplication {
name = "nixos-size";
runtimeInputs = [ nix_2_3 gawk ];
text = ''
test -e /run/booted-system || exit 0
combined_path="$(nix-build ${./combined.nix} --no-out-link --arg builder ${./combined-builder.sh})"
echo "nixos_closure_size{type=\"booted-system\"} $(nix path-info -S /run/booted-system | awk '{ print $2 }')"
echo "nixos_closure_size{type=\"current-system\"} $(nix path-info -S /run/current-system | awk '{ print $2 }')"
echo "nixos_closure_size{type=\"combined\"} $(nix path-info -S "$combined_path" | awk '{ print $2 }')"
'';
}

View file

@ -243,23 +243,33 @@ in
system.activationScripts.node-exporter = { system.activationScripts.node-exporter = {
text = '' text = ''
test -d /run/prometheus-textfile-exports || mkdir /run/prometheus-textfile-exports test -d /run/prometheus-textfile-exports || mkdir /run/prometheus-textfile-exports
my_version_string="$(cat "$systemConfig/nixos-version")" my_version_string="$(cat "$systemConfig/nixos-version")"
my_hash_string="$(readlink -f "$systemConfig" | ${pkgs.gnugrep}/bin/grep -Eo '\b[0-9a-df-np-sv-z]{32}\b')" my_hash_string="$(readlink -f "$systemConfig" | ${pkgs.gnugrep}/bin/grep -Eo '\b[0-9a-df-np-sv-z]{32}\b')"
my_specialisation="$(cat "$systemConfig/specialisation-name" 2>/dev/null || true)" my_specialisation="$(cat "$systemConfig/specialisation-name" 2>/dev/null || true)"
echo "nixos_running_system{version=\"$my_version_string\", hash=\"$my_hash_string\", specialisation=\"$my_specialisation\"} 1" > /run/prometheus-textfile-exports/running_system.prom echo "nixos_running_system{version=\"$my_version_string\", hash=\"$my_hash_string\", specialisation=\"$my_specialisation\"} 1" > /run/prometheus-textfile-exports/running_system.prom
my_version_string="$(cat "/run/booted-system/nixos-version")" if test -e /run/booted-system; then
my_hash_string="$(readlink -f "/run/booted-system" | ${pkgs.gnugrep}/bin/grep -Eo '\b[0-9a-df-np-sv-z]{32}\b')" my_version_string="$(cat "/run/booted-system/nixos-version")"
my_specialisation="$(cat "/run/booted-system/specialisation-name" 2>/dev/null || true)" my_hash_string="$(readlink -f "/run/booted-system" | ${pkgs.gnugrep}/bin/grep -Eo '\b[0-9a-df-np-sv-z]{32}\b')"
echo "nixos_booted_system{version=\"$my_version_string\", hash=\"$my_hash_string\", specialisation=\"$my_specialisation\"} 1" > /run/prometheus-textfile-exports/booted_system.prom my_specialisation="$(cat "/run/booted-system/specialisation-name" 2>/dev/null || true)"
echo "nixos_booted_system{version=\"$my_version_string\", hash=\"$my_hash_string\", specialisation=\"$my_specialisation\"} 1" > /run/prometheus-textfile-exports/booted_system.prom
fi
${depot.nix.pkgs.nixos-size}/bin/nixos-size > /run/prometheus-textfile-exports/nixos_size.prom
''; '';
}; };
boot.postBootCommands = lib.mkAfter '' boot.postBootCommands = lib.mkAfter ''
test -d /run/prometheus-textfile-exports || mkdir /run/prometheus-textfile-exports test -d /run/prometheus-textfile-exports || mkdir /run/prometheus-textfile-exports
my_version_string="$(cat "/run/booted-system/nixos-version")"
my_hash_string="$(readlink -f "/run/booted-system" | ${pkgs.gnugrep}/bin/grep -Eo '\b[0-9a-df-np-sv-z]{32}\b')" if test -e /run/booted-system; then
my_specialisation="$(cat "/run/booted-system/specialisation-name" 2>/dev/null || true)" my_version_string="$(cat "/run/booted-system/nixos-version")"
echo "nixos_booted_system{version=\"$my_version_string\", hash=\"$my_hash_string\", specialisation=\"$my_specialisation\"} 1" > /run/prometheus-textfile-exports/booted_system.prom my_hash_string="$(readlink -f "/run/booted-system" | ${pkgs.gnugrep}/bin/grep -Eo '\b[0-9a-df-np-sv-z]{32}\b')"
my_specialisation="$(cat "/run/booted-system/specialisation-name" 2>/dev/null || true)"
echo "nixos_booted_system{version=\"$my_version_string\", hash=\"$my_hash_string\", specialisation=\"$my_specialisation\"} 1" > /run/prometheus-textfile-exports/booted_system.prom
fi
${depot.nix.pkgs.nixos-size}/bin/nixos-size > /run/prometheus-textfile-exports/nixos_size.prom
''; '';
system.extraSystemBuilderCmds = lib.mkAfter '' system.extraSystemBuilderCmds = lib.mkAfter ''
echo "${if config.my.specialisationName == null then "" else config.my.specialisationName}" > $out/specialisation-name echo "${if config.my.specialisationName == null then "" else config.my.specialisationName}" > $out/specialisation-name