diff --git a/assets.db.backup.20260526125207 b/assets.db.backup.20260526125207 deleted file mode 100644 index a0b0cd3..0000000 Binary files a/assets.db.backup.20260526125207 and /dev/null differ diff --git a/assets.db.backup.20260526_125213 b/assets.db.backup.20260526_125213 deleted file mode 100644 index 3861f34..0000000 Binary files a/assets.db.backup.20260526_125213 and /dev/null differ diff --git a/assets.db.booking_gps_bak b/assets.db.booking_gps_bak new file mode 100644 index 0000000..357ecd9 Binary files /dev/null and b/assets.db.booking_gps_bak differ diff --git a/scripts/rotate-backup.sh b/scripts/rotate-backup.sh new file mode 100644 index 0000000..8bb32f4 --- /dev/null +++ b/scripts/rotate-backup.sh @@ -0,0 +1,78 @@ +#!/usr/bin/env bash +# ๐Ÿ”„ Rotating Backup โ€” keep N copies, replace oldest +# +# Usage: +# ./rotate-backup.sh [--keep N] [--dir DIR] +# +# Examples: +# ./rotate-backup.sh /home/oplabs/projects/canteen-asset-tracker/assets.db +# ./rotate-backup.sh --keep 5 --dir /backups/dbs /var/lib/app/data.db +# +# Default: keep 3 backups in /home/oplabs/backups/canteen-db/ +set -euo pipefail + +KEEP=3 +BACKUP_DIR="/home/oplabs/backups/canteen-db" +PREFIX="assets.db" + +# โ”€โ”€ Parse args โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€ +while [[ $# -gt 0 ]]; do + case "$1" in + --keep) shift; KEEP="$1"; shift ;; + --dir) shift; BACKUP_DIR="$1"; shift ;; + --prefix) shift; PREFIX="$1"; shift ;; + -h|--help) + echo "Usage: $(basename "$0") [--keep N] [--dir DIR] [--prefix NAME] " + echo "" + echo "Backs up a SQLite database with rotation (keep N, remove oldest)." + echo "" + echo " --keep N Number of backups to retain (default: 3)" + echo " --dir DIR Target backup directory (default: /home/oplabs/backups/canteen-db)" + echo " --prefix NAME Backup file name prefix (default: assets.db)" + exit 0 + ;; + -*) + echo "Unknown option: $1" >&2 + exit 1 + ;; + *) + DB_PATH="$1" + shift + ;; + esac +done + +if [[ -z "${DB_PATH:-}" ]]; then + echo "โŒ Usage: $(basename "$0") [--keep N] " >&2 + exit 1 +fi + +if [[ ! -f "$DB_PATH" ]]; then + echo "โŒ Database not found: $DB_PATH" >&2 + exit 1 +fi + +# โ”€โ”€ Create backup โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€ +mkdir -p "$BACKUP_DIR" +TIMESTAMP=$(date +%Y%m%d-%H%M%S) +BACKUP_FILE="${BACKUP_DIR}/${PREFIX}-${TIMESTAMP}" + +# Use sqlite3 .backup for safe online backup (consistent snapshot even if app is running) +if command -v sqlite3 &>/dev/null; then + sqlite3 "$DB_PATH" ".backup '$BACKUP_FILE'" + echo "โœ… $(basename "$DB_PATH") โ†’ $BACKUP_FILE (sqlite3 snapshot)" +else + cp "$DB_PATH" "$BACKUP_FILE" + echo "โœ… $(basename "$DB_PATH") โ†’ $BACKUP_FILE (file copy)" +fi + +# โ”€โ”€ Rotate: keep only N most recent โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€ +KEEP=$((KEEP + 0)) # ensure numeric +REMOVE_COUNT=$((KEEP)) +REMOVE_FROM=$((REMOVE_COUNT + 1)) + +OLD_COUNT=$(ls -t "${BACKUP_DIR}/${PREFIX}-"* 2>/dev/null | wc -l) +ls -t "${BACKUP_DIR}/${PREFIX}-"* 2>/dev/null | tail -n +${REMOVE_FROM} | xargs rm -f 2>/dev/null || true +REMOVED=$((OLD_COUNT > KEEP ? OLD_COUNT - KEEP : 0)) + +echo " ๐Ÿ“ฆ ${KEEP} kept ยท ${REMOVED} removed ยท ${BACKUP_DIR}" diff --git a/start.sh b/start.sh index a402a59..ad3e429 100755 --- a/start.sh +++ b/start.sh @@ -42,8 +42,8 @@ if [ -f "$DB_PATH" ]; then mkdir -p "$BACKUP_DIR" TIMESTAMP=$(date +%Y%m%d-%H%M%S) cp "$DB_PATH" "${BACKUP_DIR}/assets.db-${TIMESTAMP}" - # Keep last 30 backups - ls -t "${BACKUP_DIR}/assets.db-"* 2>/dev/null | tail -n +31 | xargs rm -f 2>/dev/null || true + # Keep last 3 backups (rotate: oldest gets replaced) + ls -t "${BACKUP_DIR}/assets.db-"* 2>/dev/null | tail -n +4 | xargs rm -f 2>/dev/null || true echo " Backup: ${BACKUP_DIR}/assets.db-${TIMESTAMP}" fi diff --git a/static/index.html b/static/index.html index 882f96c..073da70 100644 --- a/static/index.html +++ b/static/index.html @@ -1061,7 +1061,7 @@