summaryrefslogtreecommitdiff
path: root/config/borg-backup.nix
diff options
context:
space:
mode:
Diffstat (limited to 'config/borg-backup.nix')
-rw-r--r--config/borg-backup.nix24
1 files changed, 21 insertions, 3 deletions
diff --git a/config/borg-backup.nix b/config/borg-backup.nix
index 0c8ebb4..5b45358 100644
--- a/config/borg-backup.nix
+++ b/config/borg-backup.nix
@@ -4,9 +4,10 @@
{ config, lib, pkgs, ... }:
let
repo = "/staging/backup";
- probe = {
+ probe = rec {
path = "/storage/archive/backup-probe.txt";
repo = "storage";
+ repo_path = lib.removePrefix "/" path;
};
in
{
@@ -27,8 +28,8 @@ in
rsync -Hax orbekk@raigh.orbekk.com:linoquotes-backup.sqlite /storage/archive/linoquotes/
echo "Writing probe file at ${probe.path}"
- date +%s > "${probe.path}.tmp"
- mv "${probe.path}.tmp" "${probe.path}"
+ # No need for atomic move, because the script terminates if this fails.
+ date +%s > "${probe.path}"
echo "Creating backup"
borg create -v --stats \
@@ -52,4 +53,21 @@ in
echo "Success."
'';
};
+
+ systemd.services.backup-prober = {
+ description = "Find latest backup probe timestamp.";
+ path = with pkgs; [ borgbackup rsync openssh moreutils ];
+ startAt = "06:30";
+ environment = {
+ BORG_KEYS_DIR = "/opt/secret/borg-backup-keys/";
+ REPOSITORY = repo;
+ };
+ script = ''
+ last_repo="$(borg list $REPOSITORY -P ${probe.repo} --last 1 --short)"
+ target="${config.orbekk.monitoring-server.textFileDir}/backup_probe.prom"
+ timestamp=$(borg extract --stdout $REPOSITORY::"$last_repo" "${probe.repo_path}")
+ echo "backup_probe_timestamp_seconds $timestamp" > "$target.next"
+ mv "$target.next" "$target"
+ '';
+ };
}