mirror of
https://github.com/uprightbass360/AzerothCore-RealmMaster.git
synced 2026-01-13 17:09:09 +00:00
225 lines
7.7 KiB
Bash
Executable File
225 lines
7.7 KiB
Bash
Executable File
#!/bin/bash
|
||
|
||
# ==============================================
|
||
# TEST LOCAL WORLDSERVER DEPLOYMENT SCRIPT
|
||
# ==============================================
|
||
# This script tests worldserver performance with local game files
|
||
# vs. external volume mount
|
||
|
||
set -e # Exit on any error
|
||
|
||
# Colors for output
|
||
RED='\033[0;31m'
|
||
GREEN='\033[0;32m'
|
||
YELLOW='\033[1;33m'
|
||
BLUE='\033[0;34m'
|
||
MAGENTA='\033[0;35m'
|
||
NC='\033[0m' # No Color
|
||
|
||
# Function to print colored output
|
||
print_status() {
|
||
local status=$1
|
||
local message=$2
|
||
case $status in
|
||
"INFO")
|
||
echo -e "${BLUE}ℹ️ ${message}${NC}"
|
||
;;
|
||
"SUCCESS")
|
||
echo -e "${GREEN}✅ ${message}${NC}"
|
||
;;
|
||
"WARNING")
|
||
echo -e "${YELLOW}⚠️ ${message}${NC}"
|
||
;;
|
||
"ERROR")
|
||
echo -e "${RED}❌ ${message}${NC}"
|
||
;;
|
||
"HEADER")
|
||
echo -e "\n${MAGENTA}=== ${message} ===${NC}"
|
||
;;
|
||
"TEST")
|
||
echo -e "${YELLOW}🧪 ${message}${NC}"
|
||
;;
|
||
esac
|
||
}
|
||
|
||
# Parse command line arguments
|
||
CLEANUP=false
|
||
LOGS=false
|
||
|
||
while [[ $# -gt 0 ]]; do
|
||
case $1 in
|
||
--cleanup)
|
||
CLEANUP=true
|
||
shift
|
||
;;
|
||
--logs)
|
||
LOGS=true
|
||
shift
|
||
;;
|
||
-h|--help)
|
||
echo "Test Local Worldserver Deployment Script"
|
||
echo ""
|
||
echo "Usage: $0 [OPTIONS]"
|
||
echo ""
|
||
echo "OPTIONS:"
|
||
echo " --cleanup Stop and remove test worldserver"
|
||
echo " --logs Follow test worldserver logs"
|
||
echo " --help Show this help message"
|
||
echo ""
|
||
echo "EXAMPLES:"
|
||
echo " $0 # Deploy test worldserver"
|
||
echo " $0 --logs # Follow logs of running test"
|
||
echo " $0 --cleanup # Clean up test deployment"
|
||
exit 0
|
||
;;
|
||
*)
|
||
echo "Unknown option $1"
|
||
echo "Use --help for usage information"
|
||
exit 1
|
||
;;
|
||
esac
|
||
done
|
||
|
||
# Change to parent directory for compose commands
|
||
cd "$(dirname "$0")/.."
|
||
|
||
if [ "$CLEANUP" = true ]; then
|
||
print_status "HEADER" "CLEANING UP TEST WORLDSERVER"
|
||
|
||
print_status "INFO" "Stopping test worldserver..."
|
||
docker-compose --env-file docker-compose-test-worldserver.env -f docker-compose-test-worldserver.yml down
|
||
|
||
print_status "INFO" "Removing test container if exists..."
|
||
docker rm -f ac-worldserver-test 2>/dev/null || true
|
||
|
||
print_status "SUCCESS" "Test cleanup completed"
|
||
exit 0
|
||
fi
|
||
|
||
if [ "$LOGS" = true ]; then
|
||
print_status "HEADER" "FOLLOWING TEST WORLDSERVER LOGS"
|
||
docker logs ac-worldserver-test -f
|
||
exit 0
|
||
fi
|
||
|
||
# Main deployment
|
||
print_status "HEADER" "DEPLOYING TEST WORLDSERVER WITH LOCAL GAME FILES"
|
||
|
||
# Check if docker is available
|
||
if ! command -v docker &> /dev/null; then
|
||
print_status "ERROR" "Docker is not installed or not in PATH"
|
||
exit 1
|
||
fi
|
||
|
||
# Check if main database is running
|
||
if ! docker ps | grep ac-mysql > /dev/null; then
|
||
print_status "ERROR" "Main database (ac-mysql) is not running"
|
||
print_status "INFO" "Please start the database layer first:"
|
||
print_status "INFO" " docker-compose --env-file docker-compose-azerothcore-database.env -f docker-compose-azerothcore-database.yml up -d"
|
||
exit 1
|
||
fi
|
||
|
||
# Check if authserver is running
|
||
if ! docker ps | grep ac-authserver > /dev/null; then
|
||
print_status "ERROR" "Auth server (ac-authserver) is not running"
|
||
print_status "INFO" "Please start the services layer first (or at least authserver):"
|
||
print_status "INFO" " docker-compose --env-file docker-compose-azerothcore-services.env -f docker-compose-azerothcore-services.yml up -d ac-authserver"
|
||
exit 1
|
||
fi
|
||
|
||
# Check if regular worldserver is running (warn about port conflicts)
|
||
if docker ps | grep ac-worldserver | grep -v test > /dev/null; then
|
||
print_status "WARNING" "Regular worldserver is running - test uses different ports"
|
||
print_status "INFO" "Test worldserver ports: 8216 (world), 7779 (SOAP)"
|
||
print_status "INFO" "Regular worldserver ports: 8215 (world), 7778 (SOAP)"
|
||
fi
|
||
|
||
print_status "INFO" "Prerequisites check passed"
|
||
|
||
# Check for cached files
|
||
if [ -f "storage/azerothcore/cache-test/client-data-version.txt" ]; then
|
||
CACHED_VERSION=$(cat storage/azerothcore/cache-test/client-data-version.txt 2>/dev/null)
|
||
print_status "INFO" "Found cached game files (version: $CACHED_VERSION)"
|
||
print_status "SUCCESS" "No internet download needed - using cached files!"
|
||
print_status "INFO" "Expected startup time: 5-10 minutes (extraction only)"
|
||
else
|
||
print_status "WARNING" "No cached files found - will download ~15GB from internet"
|
||
print_status "INFO" "Expected startup time: 20-30 minutes (download + extraction)"
|
||
fi
|
||
|
||
# Start test worldserver
|
||
print_status "TEST" "Starting test worldserver with cached local game files..."
|
||
print_status "INFO" "Cache location: storage/azerothcore/cache-test/"
|
||
print_status "INFO" "Game files will be copied to local container storage for performance testing"
|
||
print_status "INFO" "Test worldserver will be available on port 8216"
|
||
|
||
# Record start time
|
||
START_TIME=$(date +%s)
|
||
print_status "INFO" "Deployment started at: $(date)"
|
||
|
||
# Start the test container
|
||
docker-compose --env-file docker-compose-test-worldserver.env -f docker-compose-test-worldserver.yml up -d
|
||
|
||
print_status "SUCCESS" "Test worldserver container started"
|
||
print_status "INFO" "Container name: ac-worldserver-test"
|
||
|
||
print_status "HEADER" "MONITORING TEST DEPLOYMENT"
|
||
|
||
print_status "INFO" "Following logs for the first few minutes..."
|
||
print_status "INFO" "Press Ctrl+C to stop following logs (container will continue running)"
|
||
print_status "INFO" ""
|
||
print_status "TEST" "=== LIVE LOG OUTPUT ==="
|
||
|
||
# Follow logs for a bit
|
||
timeout 300 docker logs ac-worldserver-test -f 2>/dev/null || true
|
||
|
||
print_status "INFO" ""
|
||
print_status "HEADER" "TEST DEPLOYMENT STATUS"
|
||
|
||
# Check if container is still running
|
||
if docker ps | grep ac-worldserver-test > /dev/null; then
|
||
print_status "SUCCESS" "Test container is running"
|
||
|
||
# Calculate elapsed time
|
||
CURRENT_TIME=$(date +%s)
|
||
ELAPSED=$((CURRENT_TIME - START_TIME))
|
||
ELAPSED_MIN=$((ELAPSED / 60))
|
||
|
||
print_status "INFO" "Elapsed time: ${ELAPSED_MIN} minutes"
|
||
print_status "INFO" "Container status: $(docker ps --format '{{.Status}}' --filter name=ac-worldserver-test)"
|
||
|
||
print_status "HEADER" "USEFUL COMMANDS"
|
||
echo -e "${BLUE}Monitor logs:${NC}"
|
||
echo " $0 --logs"
|
||
echo " docker logs ac-worldserver-test -f"
|
||
echo ""
|
||
echo -e "${BLUE}Check container status:${NC}"
|
||
echo " docker ps | grep test"
|
||
echo " docker exec ac-worldserver-test ps aux | grep worldserver"
|
||
echo ""
|
||
echo -e "${BLUE}Check game data (local in container):${NC}"
|
||
echo " docker exec ac-worldserver-test ls -la /azerothcore/data/"
|
||
echo " docker exec ac-worldserver-test du -sh /azerothcore/data/*"
|
||
echo ""
|
||
echo -e "${BLUE}Check cached files (persistent):${NC}"
|
||
echo " ls -la storage/azerothcore/cache-test/"
|
||
echo " du -sh storage/azerothcore/cache-test/*"
|
||
echo " cat storage/azerothcore/cache-test/client-data-version.txt"
|
||
echo ""
|
||
echo -e "${BLUE}Connect to test server:${NC}"
|
||
echo " Game Port: localhost:8216"
|
||
echo " SOAP Port: localhost:7779"
|
||
echo ""
|
||
echo -e "${BLUE}Performance comparison:${NC}"
|
||
echo " docker stats ac-worldserver ac-worldserver-test --no-stream"
|
||
echo ""
|
||
echo -e "${BLUE}Cleanup test:${NC}"
|
||
echo " $0 --cleanup"
|
||
echo " rm -rf storage/azerothcore/cache-test/ # Remove cache"
|
||
|
||
else
|
||
print_status "ERROR" "Test container has stopped or failed"
|
||
print_status "INFO" "Check logs for details:"
|
||
print_status "INFO" " docker logs ac-worldserver-test"
|
||
exit 1
|
||
fi |