Files
AzerothCore-RealmMaster/portainer-verify.sh

135 lines
4.8 KiB
Bash
Executable File

#!/bin/bash
# Real-time monitoring script for Portainer deployment
# Run this DURING deployment to monitor progress and catch issues
echo "==============================================="
echo "AzerothCore Portainer Deployment Monitor"
echo "==============================================="
# Function to monitor container logs
monitor_container() {
local container_name=$1
local max_wait=${2:-300} # Default 5 minutes
local start_time=$(date +%s)
echo "🔍 Monitoring $container_name (max wait: ${max_wait}s)"
while [ $(($(date +%s) - start_time)) -lt $max_wait ]; do
if podman ps --filter "name=$container_name" --format "table {{.Names}}\t{{.Status}}" | grep -q "$container_name"; then
local status=$(podman ps --filter "name=$container_name" --format "{{.Status}}")
echo "[$container_name] Status: $status"
# Show last few log lines
echo "[$container_name] Recent logs:"
podman logs --tail 5 "$container_name" 2>&1 | sed 's/^/ /'
echo ""
# Check if container exited
if echo "$status" | grep -q "Exited"; then
local exit_code=$(podman ps -a --filter "name=$container_name" --format "{{.Status}}" | grep -o "Exited ([0-9]*)" | grep -o "[0-9]*")
if [ "$exit_code" = "0" ]; then
echo "$container_name completed successfully"
return 0
else
echo "$container_name failed (exit code: $exit_code)"
echo "Full error logs:"
podman logs "$container_name" 2>&1 | tail -20 | sed 's/^/ /'
return 1
fi
fi
else
echo "⏳ Waiting for $container_name to start..."
fi
sleep 10
done
echo "⏰ Timeout waiting for $container_name"
return 1
}
# Function to monitor network download progress
monitor_download() {
local container_name="ac-client-data"
echo "📥 Monitoring client data download progress..."
while podman ps --filter "name=$container_name" --format "{{.Names}}" | grep -q "$container_name"; do
# Look for download progress in logs
podman logs "$container_name" 2>&1 | tail -10 | grep -E "(downloading|download|MB|GB|%)" | tail -3 | sed 's/^/ /'
# Check disk usage in data directory
if podman exec "$container_name" ls -la /azerothcore/data/ 2>/dev/null; then
echo " 📁 Current data directory contents:"
podman exec "$container_name" du -sh /azerothcore/data/* 2>/dev/null | sed 's/^/ /' || echo " (empty or not accessible)"
fi
echo "---"
sleep 30
done
}
# Function to check database import progress
monitor_db_import() {
local container_name="ac-db-import"
echo "🗄️ Monitoring database import progress..."
while podman ps --filter "name=$container_name" --format "{{.Names}}" | grep -q "$container_name"; do
echo "[$container_name] Recent activity:"
podman logs "$container_name" 2>&1 | tail -5 | sed 's/^/ /'
# Check database size growth
echo " 📊 Database status:"
podman exec ac-mysql mysql -uroot -p${DOCKER_DB_ROOT_PASSWORD:-password} -e "
SELECT
table_schema as 'Database',
ROUND(SUM(data_length + index_length) / 1024 / 1024, 2) as 'Size (MB)'
FROM information_schema.tables
WHERE table_schema IN ('acore_auth', 'acore_world', 'acore_characters')
GROUP BY table_schema;
" 2>/dev/null | sed 's/^/ /' || echo " Database not accessible yet"
echo "---"
sleep 20
done
}
# Main monitoring loop
echo "🚀 Starting deployment monitoring..."
echo "Press Ctrl+C to stop monitoring"
echo ""
# Load environment variables if .env exists
if [ -f ".env" ]; then
export $(grep -v '^#' .env | xargs)
fi
# Monitor the deployment phases
echo "Phase 1: MySQL startup"
monitor_container "ac-mysql" 120
echo "Phase 2: Database initialization"
monitor_container "ac-db-init" 60
echo "Phase 3: Client data download (this will take longest)"
monitor_download &
DOWNLOAD_PID=$!
monitor_container "ac-client-data" 2400 # 40 minutes max
kill $DOWNLOAD_PID 2>/dev/null
echo "Phase 4: Database import"
monitor_db_import &
IMPORT_PID=$!
monitor_container "ac-db-import" 1800 # 30 minutes max
kill $IMPORT_PID 2>/dev/null
echo "Phase 5: Application servers"
monitor_container "ac-authserver" 120
monitor_container "ac-worldserver" 180
echo ""
echo "🏁 Monitoring complete!"
echo ""
echo "💡 If you see timeouts or failures:"
echo "1. Check 'podman-compose logs [service-name]' for detailed errors"
echo "2. Restart individual failed services with 'podman-compose up [service-name]'"
echo "3. Consider running services one at a time instead of all at once"