From 90a81ea960aaaed4d38c15a085996a1a91ea8d5e Mon Sep 17 00:00:00 2001 From: Daniele Fucini Date: Sat, 31 Oct 2026 19:00:06 +0100 Subject: [PATCH] Add a weekly dump of the Weather database weather-dump.timer runs weather-dump weekly, keeping the two newest ISO weeks in ~/.local/share/ens-forecast/dumps, which simple_backup then copies; the login comes from ~/.config/ens-forecast/dump.cnf (not tracked). --- .config/systemd/user/weather-dump.service | 11 +++++++++++ .config/systemd/user/weather-dump.timer | 9 +++++++++ .github/README.md | 2 +- .local/bin/weather-dump | 24 +++++++++++++++++++++++ 4 files changed, 45 insertions(+), 1 deletion(-) create mode 100644 .config/systemd/user/weather-dump.service create mode 100644 .config/systemd/user/weather-dump.timer create mode 100755 .local/bin/weather-dump diff --git a/.config/systemd/user/weather-dump.service b/.config/systemd/user/weather-dump.service new file mode 100644 index 0000000..2793953 --- /dev/null +++ b/.config/systemd/user/weather-dump.service @@ -0,0 +1,11 @@ +[Unit] +Description=Dump the Weather database to ~/.local/share/ens-forecast/dumps +StartLimitIntervalSec=2h +StartLimitBurst=4 + +[Service] +Type=oneshot +ExecStart=%h/.local/bin/weather-dump +# MariaDB not up yet (e.g. caught up right after boot)? retry a few times +Restart=on-failure +RestartSec=5min diff --git a/.config/systemd/user/weather-dump.timer b/.config/systemd/user/weather-dump.timer new file mode 100644 index 0000000..ce90f55 --- /dev/null +++ b/.config/systemd/user/weather-dump.timer @@ -0,0 +1,9 @@ +[Unit] +Description=Dump the Weather database weekly + +[Timer] +OnCalendar=weekly +Persistent=true + +[Install] +WantedBy=timers.target diff --git a/.github/README.md b/.github/README.md index fc46a7a..01dade3 100644 --- a/.github/README.md +++ b/.github/README.md @@ -17,7 +17,7 @@ install script. This README lives in `.github/` to keep it out of the home direc | Audio / media | mpd, ncmpcpp, mpDris2, mpv, beets, pipewire | | Packaging | `.config/aurutils-makepkg.conf`, `.config/aurb/`, `.local/bin/aurb` / `aurs` (aurutils wrappers) | | Services | `.config/systemd/user/` (timers and overrides) | -| Scripts | `.local/bin/` (screen layout, phone mount, video helpers, Library and Garmin database dumps) | +| Scripts | `.local/bin/` (screen layout, phone mount, video helpers, Library, Garmin and Weather database dumps) | Note: `config.fish` sources `~/.bash_aliases`, so the aliases apply in both shells. diff --git a/.local/bin/weather-dump b/.local/bin/weather-dump new file mode 100755 index 0000000..9e092de --- /dev/null +++ b/.local/bin/weather-dump @@ -0,0 +1,24 @@ +#!/bin/bash +# Dump the Weather database (ens-forecast) to a per-ISO-week file, keeping the two newest weeks. +set -euo pipefail + +cnf=${XDG_CONFIG_HOME:-$HOME/.config}/ens-forecast/dump.cnf +dir=${XDG_DATA_HOME:-$HOME/.local/share}/ens-forecast/dumps +out=$dir/Weather-$(date +%G-W%V).sql.gz +keep=2 + +umask 077 +mkdir -p "$dir" + +# Write to a temporary file so a failed dump never replaces a good one +tmp=$(mktemp "$dir/.dump.XXXXXX") +trap 'rm -f "$tmp"' EXIT + +mariadb-dump --defaults-extra-file="$cnf" --single-transaction --databases Weather | gzip > "$tmp" +mv "$tmp" "$out" + +# Names sort by week, so all but the last $keep are the old ones +dumps=("$dir"/Weather-*.sql.gz) +if (( ${#dumps[@]} > keep )); then + rm -f -- "${dumps[@]:0:${#dumps[@]}-keep}" +fi