119 lines
4.6 KiB
Bash
119 lines
4.6 KiB
Bash
|
|
#!/bin/bash
|
|||
|
|
# Service Testing Script
|
|||
|
|
# Tests services running on VMs (requires SSH access)
|
|||
|
|
|
|||
|
|
set -euo pipefail
|
|||
|
|
|
|||
|
|
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
|||
|
|
PHASE1_DIR="$(cd "$SCRIPT_DIR/.." && pwd)"
|
|||
|
|
|
|||
|
|
# Colors
|
|||
|
|
GREEN='\033[0;32m'
|
|||
|
|
RED='\033[0;31m'
|
|||
|
|
YELLOW='\033[1;33m'
|
|||
|
|
BLUE='\033[0;34m'
|
|||
|
|
NC='\033[0m'
|
|||
|
|
|
|||
|
|
echo "=========================================="
|
|||
|
|
echo "Service Testing"
|
|||
|
|
echo "=========================================="
|
|||
|
|
echo ""
|
|||
|
|
|
|||
|
|
cd "$PHASE1_DIR"
|
|||
|
|
|
|||
|
|
# Get Nginx proxy IP
|
|||
|
|
NGINX_IP=$(terraform output -json 2>/dev/null | jq -r '.nginx_proxy.value.public_ip // empty' || echo "")
|
|||
|
|
|
|||
|
|
if [ -z "$NGINX_IP" ] || [ "$NGINX_IP" = "null" ]; then
|
|||
|
|
echo -e "${RED}✗${NC} Nginx proxy IP not found"
|
|||
|
|
exit 1
|
|||
|
|
fi
|
|||
|
|
|
|||
|
|
echo -e "${BLUE}Testing Nginx Proxy Services ($NGINX_IP)${NC}"
|
|||
|
|
echo ""
|
|||
|
|
|
|||
|
|
# Test SSH and services on Nginx proxy
|
|||
|
|
if ssh -o ConnectTimeout=5 -o StrictHostKeyChecking=no -o BatchMode=yes besuadmin@$NGINX_IP "echo 'Connected'" > /dev/null 2>&1; then
|
|||
|
|
echo -e "${GREEN}✓${NC} SSH connection successful"
|
|||
|
|
|
|||
|
|
# Test Docker
|
|||
|
|
DOCKER_VERSION=$(ssh -o ConnectTimeout=5 -o StrictHostKeyChecking=no -o BatchMode=yes besuadmin@$NGINX_IP "docker --version 2>/dev/null" || echo "")
|
|||
|
|
if [ -n "$DOCKER_VERSION" ]; then
|
|||
|
|
echo -e "${GREEN}✓${NC} Docker installed: $DOCKER_VERSION"
|
|||
|
|
else
|
|||
|
|
echo -e "${YELLOW}⊘${NC} Docker not installed or not accessible"
|
|||
|
|
fi
|
|||
|
|
|
|||
|
|
# Test Nginx
|
|||
|
|
NGINX_VERSION=$(ssh -o ConnectTimeout=5 -o StrictHostKeyChecking=no -o BatchMode=yes besuadmin@$NGINX_IP "nginx -v 2>&1" || echo "")
|
|||
|
|
if [ -n "$NGINX_VERSION" ]; then
|
|||
|
|
echo -e "${GREEN}✓${NC} Nginx installed: $NGINX_VERSION"
|
|||
|
|
|
|||
|
|
# Test Nginx status
|
|||
|
|
NGINX_STATUS=$(ssh -o ConnectTimeout=5 -o StrictHostKeyChecking=no -o BatchMode=yes besuadmin@$NGINX_IP "systemctl is-active nginx 2>/dev/null || echo 'inactive'" || echo "unknown")
|
|||
|
|
if [ "$NGINX_STATUS" = "active" ]; then
|
|||
|
|
echo -e "${GREEN}✓${NC} Nginx service is running"
|
|||
|
|
else
|
|||
|
|
echo -e "${YELLOW}⊘${NC} Nginx service is $NGINX_STATUS"
|
|||
|
|
fi
|
|||
|
|
else
|
|||
|
|
echo -e "${YELLOW}⊘${NC} Nginx not installed"
|
|||
|
|
fi
|
|||
|
|
|
|||
|
|
# Test Cloudflared
|
|||
|
|
CLOUDFLARED_VERSION=$(ssh -o ConnectTimeout=5 -o StrictHostKeyChecking=no -o BatchMode=yes besuadmin@$NGINX_IP "cloudflared --version 2>/dev/null | head -1" || echo "")
|
|||
|
|
if [ -n "$CLOUDFLARED_VERSION" ]; then
|
|||
|
|
echo -e "${GREEN}✓${NC} Cloudflared installed: $CLOUDFLARED_VERSION"
|
|||
|
|
|
|||
|
|
# Test Cloudflared service
|
|||
|
|
CLOUDFLARED_STATUS=$(ssh -o ConnectTimeout=5 -o StrictHostKeyChecking=no -o BatchMode=yes besuadmin@$NGINX_IP "systemctl is-active cloudflared 2>/dev/null || echo 'inactive'" || echo "unknown")
|
|||
|
|
if [ "$CLOUDFLARED_STATUS" = "active" ]; then
|
|||
|
|
echo -e "${GREEN}✓${NC} Cloudflared service is running"
|
|||
|
|
else
|
|||
|
|
echo -e "${YELLOW}⊘${NC} Cloudflared service is $CLOUDFLARED_STATUS (not configured yet)"
|
|||
|
|
fi
|
|||
|
|
else
|
|||
|
|
echo -e "${YELLOW}⊘${NC} Cloudflared not installed"
|
|||
|
|
fi
|
|||
|
|
|
|||
|
|
# Test system resources
|
|||
|
|
echo ""
|
|||
|
|
echo "System Resources:"
|
|||
|
|
UPTIME=$(ssh -o ConnectTimeout=5 -o StrictHostKeyChecking=no -o BatchMode=yes besuadmin@$NGINX_IP "uptime" || echo "")
|
|||
|
|
if [ -n "$UPTIME" ]; then
|
|||
|
|
echo -e " ${BLUE}ℹ${NC} $UPTIME"
|
|||
|
|
fi
|
|||
|
|
|
|||
|
|
MEMORY=$(ssh -o ConnectTimeout=5 -o StrictHostKeyChecking=no -o BatchMode=yes besuadmin@$NGINX_IP "free -h | grep Mem | awk '{print \$3\"/\"\$2}'" || echo "")
|
|||
|
|
if [ -n "$MEMORY" ]; then
|
|||
|
|
echo -e " ${BLUE}ℹ${NC} Memory: $MEMORY"
|
|||
|
|
fi
|
|||
|
|
|
|||
|
|
DISK=$(ssh -o ConnectTimeout=5 -o StrictHostKeyChecking=no -o BatchMode=yes besuadmin@$NGINX_IP "df -h / | tail -1 | awk '{print \$3\"/\"\$2\" (\"\$5\" used)\"}'" || echo "")
|
|||
|
|
if [ -n "$DISK" ]; then
|
|||
|
|
echo -e " ${BLUE}ℹ${NC} Disk: $DISK"
|
|||
|
|
fi
|
|||
|
|
else
|
|||
|
|
echo -e "${RED}✗${NC} SSH connection failed"
|
|||
|
|
echo -e "${YELLOW}⊘${NC} Cannot test services without SSH access"
|
|||
|
|
fi
|
|||
|
|
|
|||
|
|
# Test Backend VMs (if accessible via VPN/Bastion)
|
|||
|
|
echo ""
|
|||
|
|
echo "=========================================="
|
|||
|
|
echo "Backend VM Services"
|
|||
|
|
echo "=========================================="
|
|||
|
|
echo -e "${YELLOW}⊘${NC} Backend VMs use private IPs - testing requires VPN/Bastion access"
|
|||
|
|
echo ""
|
|||
|
|
echo "To test backend VMs, SSH via VPN/Bastion and run:"
|
|||
|
|
echo " - docker ps (check Besu containers)"
|
|||
|
|
echo " - systemctl status besu.service"
|
|||
|
|
echo " - curl http://localhost:8545 (test RPC)"
|
|||
|
|
echo " - curl http://localhost:9545/metrics (test metrics)"
|
|||
|
|
|
|||
|
|
echo ""
|
|||
|
|
echo "=========================================="
|
|||
|
|
echo "Service Test Complete"
|
|||
|
|
echo "=========================================="
|
|||
|
|
|