upskill-event-manager/wordpress-dev/bin/verify-dev.sh

228 lines
No EOL
6.6 KiB
Bash
Executable file

#!/bin/bash
# Load environment variables
if [ ! -f ../.env ]; then
echo "Error: .env file not found!"
exit 1
fi
source ../.env
# Colors for output
GREEN='\033[0;32m'
RED='\033[0;31m'
YELLOW='\033[1;33m'
BLUE='\033[0;34m'
NC='\033[0m'
# Function to check if a command was successful
check_status() {
if [ $? -eq 0 ]; then
echo -e "${GREEN}$1${NC}"
return 0
else
echo -e "${RED}$1${NC}"
return 1
fi
}
# Function to monitor container logs
monitor_container_logs() {
local container=$1
local lines=${2:-50}
local error_patterns=("error" "fatal" "exception" "failed" "warning")
local log_output
echo -e "\n${BLUE}Analyzing logs for $container container...${NC}"
# Get recent logs
log_output=$(docker-compose logs --tail="$lines" "$container")
# Check for errors and warnings
local error_count=0
local warning_count=0
for pattern in "${error_patterns[@]}"; do
local count
count=$(echo "$log_output" | grep -i "$pattern" | wc -l)
if [ "$pattern" = "warning" ]; then
warning_count=$((warning_count + count))
else
error_count=$((error_count + count))
fi
done
# Display log summary
echo "Log Summary:"
echo "- Last $lines lines analyzed"
echo "- Found $error_count errors"
echo "- Found $warning_count warnings"
# Display recent errors if any
if [ $error_count -gt 0 ]; then
echo -e "\n${RED}Recent Errors:${NC}"
echo "$log_output" | grep -i -E "error|fatal|exception|failed" | tail -n 5
fi
# Display recent warnings if any
if [ $warning_count -gt 0 ]; then
echo -e "\n${YELLOW}Recent Warnings:${NC}"
echo "$log_output" | grep -i "warning" | tail -n 5
fi
# Check log disk usage
local log_size
log_size=$(docker-compose exec "$container" du -sh /var/log 2>/dev/null | cut -f1)
echo -e "\nLog directory size: $log_size"
# Return status based on error count
if [ $error_count -gt 0 ]; then
return 1
fi
return 0
}
echo -e "${YELLOW}Starting development environment verification...${NC}"
# Check if containers are running
echo "Checking Docker containers..."
if ! docker-compose ps | grep -q "wordpress.*Up"; then
echo -e "${RED}WordPress container is not running${NC}"
exit 1
fi
if ! docker-compose ps | grep -q "db.*Up"; then
echo -e "${RED}Database container is not running${NC}"
exit 1
fi
check_status "Container status check"
# Monitor container logs
echo -e "\n${BLUE}Monitoring container logs...${NC}"
monitor_container_logs wordpress
check_status "WordPress container logs"
monitor_container_logs db
check_status "Database container logs"
# Check log rotation configuration
echo -e "\nChecking log rotation configuration..."
if docker-compose exec wordpress test -f /etc/logrotate.d/wordpress; then
echo -e "${GREEN}✓ WordPress log rotation configured${NC}"
else
echo -e "${YELLOW}⚠ WordPress log rotation not configured${NC}"
fi
if docker-compose exec db test -f /etc/logrotate.d/mysql; then
echo -e "${GREEN}✓ MySQL log rotation configured${NC}"
else
echo -e "${YELLOW}⚠ MySQL log rotation not configured${NC}"
fi
# Check database connection
echo "Verifying database connection..."
if ! docker-compose exec db mysql -u"$DEV_DB_USER" -p"$DEV_DB_PASSWORD" -e "SELECT 1;" > /dev/null 2>&1; then
echo -e "${RED}Database connection failed${NC}"
exit 1
fi
check_status "Database connection"
# Add logrotate configuration for WordPress
echo "Configuring log rotation..."
docker-compose exec wordpress /bin/bash -c 'cat > /etc/logrotate.d/wordpress << EOF
/var/www/html/wp-content/debug.log {
daily
missingok
rotate 7
compress
delaycompress
notifempty
create 0640 www-data www-data
}
EOF'
check_status "WordPress log rotation configuration"
# Add logrotate configuration for MySQL
docker-compose exec db /bin/bash -c 'cat > /etc/logrotate.d/mysql << EOF
/var/log/mysql/*.log {
daily
rotate 7
missingok
create 0640 mysql mysql
compress
delaycompress
postrotate
/usr/bin/mysqladmin --defaults-file=/etc/mysql/debian.cnf flush-logs
endscript
}
EOF'
check_status "MySQL log rotation configuration"
# Verify WordPress installation
echo "Verifying WordPress installation..."
if ! docker-compose exec wordpress wp core is-installed --allow-root; then
echo -e "${RED}WordPress is not properly installed${NC}"
exit 1
fi
check_status "WordPress installation"
# Check WordPress version
echo "Checking WordPress version..."
WP_VERSION=$(docker-compose exec -T wordpress wp core version --allow-root)
echo -e "${GREEN}WordPress version: $WP_VERSION${NC}"
# Verify required plugins
echo "Checking required plugins..."
REQUIRED_PLUGINS=(
"the-events-calendar"
"events-calendar-pro"
"event-tickets"
"event-tickets-plus"
"tribe-community-events"
)
for plugin in "${REQUIRED_PLUGINS[@]}"; do
if ! docker-compose exec wordpress wp plugin is-active "$plugin" --allow-root > /dev/null 2>&1; then
echo -e "${RED}Required plugin not active: $plugin${NC}"
exit 1
fi
echo -e "${GREEN}✓ Plugin active: $plugin${NC}"
done
# Check site URL configuration
echo "Verifying site URLs..."
SITE_URL=$(docker-compose exec -T wordpress wp option get siteurl --allow-root)
HOME_URL=$(docker-compose exec -T wordpress wp option get home --allow-root)
if [ "$SITE_URL" != "http://localhost:8080" ] || [ "$HOME_URL" != "http://localhost:8080" ]; then
echo -e "${RED}Site URLs are not correctly set${NC}"
echo "Current site URL: $SITE_URL"
echo "Current home URL: $HOME_URL"
exit 1
fi
check_status "URL configuration"
# Check file permissions
echo "Checking file permissions..."
docker-compose exec wordpress stat -c "%U:%G" /var/www/html | grep -q "www-data:www-data"
check_status "File permissions"
# Test homepage accessibility
echo "Testing homepage accessibility..."
if ! curl -s -I "http://localhost:8080" | grep -q "200 OK"; then
echo -e "${RED}Homepage is not accessible${NC}"
exit 1
fi
check_status "Homepage accessibility"
# Check debug settings
echo "Verifying debug settings..."
docker-compose exec wordpress wp config get WP_DEBUG --type=constant | grep -q "true"
check_status "WP_DEBUG setting"
echo -e "${GREEN}Development environment verification completed successfully!${NC}"
echo -e "${YELLOW}Note: Some functionality may require manual testing:${NC}"
echo "1. Log in to WordPress admin (http://localhost:8080/wp-admin)"
echo "2. Create a test event"
echo "3. Test event registration"
echo "4. Verify email functionality"