big
This commit is contained in:
91
list-restorable.sh
Executable file
91
list-restorable.sh
Executable file
@@ -0,0 +1,91 @@
|
||||
#!/bin/bash
|
||||
# List which compose files can be restored from local backups
|
||||
# This script checks the compose_registry.json and verifies that all required
|
||||
# backup files exist in /backup/
|
||||
#
|
||||
# Usage:
|
||||
# ./list-restorable.sh # Show only compose files with all backups available
|
||||
# ./list-restorable.sh --all # Show all compose files, including those with missing backups
|
||||
# ./list-restorable.sh -a # Same as --all
|
||||
|
||||
dir="$(dirname "$0")"
|
||||
registry_file="${dir}/../compose_registry.json"
|
||||
backup_dir="/backup"
|
||||
|
||||
if [ ! -f "$registry_file" ]; then
|
||||
echo "Error: compose_registry.json not found at $registry_file"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
if [ ! -d "$backup_dir" ]; then
|
||||
echo "Error: /backup directory does not exist"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# Check if jq is available
|
||||
if ! command -v jq &> /dev/null; then
|
||||
echo "Error: jq is required but not installed"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# Count total entries
|
||||
total_entries=$(jq 'length' "$registry_file")
|
||||
echo "Checking $total_entries compose files for restorable backups..."
|
||||
echo ""
|
||||
|
||||
# Use temporary files to collect results (since variables in subshells don't persist)
|
||||
restorable_list=$(mktemp)
|
||||
missing_list=$(mktemp)
|
||||
trap "rm -f $restorable_list $missing_list" EXIT
|
||||
|
||||
# Process each entry in the registry
|
||||
# Use process substitution to avoid subshell issues
|
||||
while IFS= read -r entry; do
|
||||
compose_file=$(echo "$entry" | jq -r '.compose_file')
|
||||
volumes=$(echo "$entry" | jq -r '.volumes[]')
|
||||
|
||||
# Check if compose file exists
|
||||
compose_path="${dir}/${compose_file}.yml"
|
||||
if [ ! -f "$compose_path" ]; then
|
||||
continue
|
||||
fi
|
||||
|
||||
# Check each volume for backup file
|
||||
all_backups_exist=true
|
||||
missing_volumes=()
|
||||
|
||||
while IFS= read -r volume; do
|
||||
volume_name="rpc_${volume}"
|
||||
# Look for backup files matching pattern: rpc_${volume}-[0-9]*G.tar.zst
|
||||
backup_file=$(ls -1 "$backup_dir"/"${volume_name}"-[0-9]*G.tar.zst 2>/dev/null | sort | tail -n 1)
|
||||
|
||||
if [ -z "$backup_file" ]; then
|
||||
all_backups_exist=false
|
||||
missing_volumes+=("$volume_name")
|
||||
fi
|
||||
done <<< "$volumes"
|
||||
|
||||
if [ "$all_backups_exist" = true ]; then
|
||||
echo "✓ $compose_file"
|
||||
echo "$compose_file" >> "$restorable_list"
|
||||
else
|
||||
if [ "${1}" = "--all" ] || [ "${1}" = "-a" ]; then
|
||||
echo "✗ $compose_file (missing: ${missing_volumes[*]})"
|
||||
echo "$compose_file" >> "$missing_list"
|
||||
fi
|
||||
fi
|
||||
done < <(jq -c '.[]' "$registry_file")
|
||||
|
||||
# Count results
|
||||
restorable_count=$(wc -l < "$restorable_list" 2>/dev/null | tr -d ' ' || echo "0")
|
||||
missing_count=$(wc -l < "$missing_list" 2>/dev/null | tr -d ' ' || echo "0")
|
||||
|
||||
echo ""
|
||||
echo "Summary:"
|
||||
echo " Restorable: $restorable_count"
|
||||
if [ "${1}" = "--all" ] || [ "${1}" = "-a" ]; then
|
||||
echo " Missing backups: $missing_count"
|
||||
fi
|
||||
echo ""
|
||||
echo "Use --all or -a flag to show compose files with missing backups"
|
||||
|
||||
Reference in New Issue
Block a user