#!/usr/bin/env bash
# Nightly production dump on the live host, and a pull of those dumps to the dev server.
# Stream E, task E5. Run once from the dev server; idempotent (replaces its own lines).
#
#   deploy/install-backup-cron.sh
#
# On bwlive (deploy user's crontab, 03:15 UTC): pg_dump the production database into
# backups/dfp-nightly-<date>.dump, keep 14 days, log failures. Exits quietly while the
# production container does not exist yet. On this server (04:15 local): rsync the
# droplet's backups/ into backups/production/ over Tailscale, so a lost droplet still
# leaves yesterday's data here. The same shape as the dev server's own nightly dump.
set -euo pipefail
HOST="${DFP_PROD_HOST:-deploy@bwlive}"
REMOTE_DIR=/srv/apps/dutyfreeprofessor
LOCAL_DIR=/srv/apps/dutyfreeprofessor

ssh -o BatchMode=yes "$HOST" "mkdir -p $REMOTE_DIR/backups $REMOTE_DIR/.logs/runs; ( crontab -l 2>/dev/null | grep -v '# dfp-nightly' ; echo '15 3 * * * docker ps --format {{.Names}} | grep -qx dutyfreeprofessor-db && docker exec dutyfreeprofessor-db pg_dump -U dfp -Fc dfp > $REMOTE_DIR/backups/dfp-nightly-\$(date +\\%Y-\\%m-\\%d).dump 2>>$REMOTE_DIR/.logs/runs/backup.log && find $REMOTE_DIR/backups -name \"dfp-nightly-*.dump\" -mtime +14 -delete # dfp-nightly' ) | crontab -; crontab -l | grep -c dfp-nightly"
mkdir -p "$LOCAL_DIR/backups/production"
( crontab -l 2>/dev/null | grep -v '# dfp-production-pull' ; echo "15 4 * * * rsync -az --timeout=120 $HOST:$REMOTE_DIR/backups/ $LOCAL_DIR/backups/production/ 2>>$LOCAL_DIR/.logs/runs/backup.log && find $LOCAL_DIR/backups/production -name 'dfp-nightly-*.dump' -mtime +14 -delete # dfp-production-pull" ) | crontab -
crontab -l | grep -c dfp-production-pull
