Initial commit

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
Todd
2026-03-29 22:42:55 -04:00
commit 0d7b2b1aab
389 changed files with 280296 additions and 0 deletions

93
scripts/db-cleanup.sh Executable file
View File

@@ -0,0 +1,93 @@
#!/bin/bash
# Database Cleanup Script
# Scans database for missing files and removes their references
# Runs via systemd timer nightly at 3:00 AM
set -e
# Configuration
API_URL="http://localhost:8000/api/maintenance/cleanup/missing-files"
STATUS_URL="http://localhost:8000/api/maintenance/cleanup/status"
LOG_FILE="/opt/media-downloader/logs/db-cleanup.log"
TOKEN_SCRIPT="/opt/media-downloader/scripts/get-api-token.sh"
# Logging function
log() {
echo "[$(date '+%Y-%m-%d %H:%M:%S')] $1" | tee -a "$LOG_FILE"
}
# Get API token
if [ ! -f "$TOKEN_SCRIPT" ]; then
log "ERROR: API token script not found at $TOKEN_SCRIPT"
exit 1
fi
$TOKEN_SCRIPT > /dev/null 2>&1
TOKEN=$(cat /tmp/api_token.txt 2>/dev/null)
if [ -z "$TOKEN" ]; then
log "ERROR: Failed to get API token"
exit 1
fi
log "Starting database cleanup (dry_run=false)"
# Start cleanup
RESPONSE=$(curl -s -X POST "$API_URL" \
-H "Content-Type: application/json" \
-H "Authorization: Bearer $TOKEN" \
-d '{"dry_run": false}')
if [ $? -ne 0 ]; then
log "ERROR: Failed to start cleanup"
exit 1
fi
log "Cleanup started, waiting for completion..."
# Poll for status
MAX_WAIT=300 # 5 minutes max
WAITED=0
INTERVAL=5
while [ $WAITED -lt $MAX_WAIT ]; do
sleep $INTERVAL
WAITED=$((WAITED + INTERVAL))
STATUS=$(curl -s "$STATUS_URL" -H "Authorization: Bearer $TOKEN")
STATUS_CODE=$(echo "$STATUS" | grep -o '"status":"[^"]*"' | cut -d'"' -f4)
case "$STATUS_CODE" in
"completed")
TOTAL_CHECKED=$(echo "$STATUS" | grep -o '"total_checked":[0-9]*' | cut -d':' -f2)
TOTAL_MISSING=$(echo "$STATUS" | grep -o '"total_missing":[0-9]*' | cut -d':' -f2)
TOTAL_REMOVED=$(echo "$STATUS" | grep -o '"total_removed":[0-9]*' | cut -d':' -f2)
DURATION=$(echo "$STATUS" | grep -o '"duration_seconds":[0-9.]*' | cut -d':' -f2)
log "SUCCESS: Cleanup completed"
log " Checked: $TOTAL_CHECKED files"
log " Missing: $TOTAL_MISSING files"
log " Removed: $TOTAL_REMOVED references"
log " Duration: ${DURATION}s"
exit 0
;;
"failed")
ERROR=$(echo "$STATUS" | grep -o '"error":"[^"]*"' | cut -d'"' -f4)
log "ERROR: Cleanup failed - $ERROR"
exit 1
;;
"running")
log "Still running... (${WAITED}s elapsed)"
;;
"no_scan")
log "ERROR: Cleanup job not found"
exit 1
;;
*)
log "WARNING: Unknown status - $STATUS_CODE"
;;
esac
done
log "ERROR: Cleanup timed out after ${MAX_WAIT}s"
exit 1