← back to Handbag Auth Nextjs

scripts/devops/validate-devops.sh

187 lines

#!/bin/bash
# DevOps Infrastructure Validation Script
# Tests all DevOps components to ensure proper functionality

set -euo pipefail

GREEN='\033[0;32m'
RED='\033[0;31m'
YELLOW='\033[1;33m'
NC='\033[0m'

PASSED=0
FAILED=0

log_success() {
    echo -e "${GREEN}✓${NC} $1"
    ((PASSED++))
}

log_failure() {
    echo -e "${RED}✗${NC} $1"
    ((FAILED++))
}

log_info() {
    echo -e "${YELLOW}ℹ${NC} $1"
}

echo "=========================================="
echo "LUXVAULT DevOps Validation"
echo "=========================================="
echo ""

# Test 1: Service Running
log_info "Test 1: Checking if service is running..."
if pm2 show auction-viewer | grep -q "online"; then
    log_success "Service is running"
else
    log_failure "Service is not running"
fi

# Test 2: Health Endpoint
log_info "Test 2: Testing health endpoint..."
HEALTH_RESPONSE=$(curl -s -o /dev/null -w "%{http_code}" http://45.61.58.125:7500/health)
if [ "$HEALTH_RESPONSE" == "200" ]; then
    log_success "Health endpoint responding (HTTP 200)"
else
    log_failure "Health endpoint failed (HTTP $HEALTH_RESPONSE)"
fi

# Test 3: Readiness Endpoint
log_info "Test 3: Testing readiness endpoint..."
READY_RESPONSE=$(curl -s -o /dev/null -w "%{http_code}" http://45.61.58.125:7500/ready)
if [ "$READY_RESPONSE" == "200" ]; then
    log_success "Readiness endpoint responding (HTTP 200)"
else
    log_failure "Readiness endpoint failed (HTTP $READY_RESPONSE)"
fi

# Test 4: Metrics Endpoint
log_info "Test 4: Testing metrics endpoint..."
METRICS_RESPONSE=$(curl -s http://45.61.58.125:7500/metrics)
if echo "$METRICS_RESPONSE" | grep -q "auction_viewer_requests_total"; then
    log_success "Metrics endpoint working"
else
    log_failure "Metrics endpoint not returning expected data"
fi

# Test 5: Database Connectivity
log_info "Test 5: Testing database connectivity..."
DB_PATH="/root/Projects/handbag-auth-nextjs/data/auction-history/auctions.db"
if [ -f "$DB_PATH" ]; then
    if sqlite3 "$DB_PATH" "SELECT COUNT(*) FROM auctions;" > /dev/null 2>&1; then
        log_success "Database accessible"
    else
        log_failure "Database query failed"
    fi
else
    log_failure "Database file not found"
fi

# Test 6: Backup Script Exists
log_info "Test 6: Checking backup script..."
BACKUP_SCRIPT="/root/Projects/handbag-auth-nextjs/scripts/devops/backup-database.sh"
if [ -x "$BACKUP_SCRIPT" ]; then
    log_success "Backup script exists and is executable"
else
    log_failure "Backup script missing or not executable"
fi

# Test 7: Health Check Script
log_info "Test 7: Checking health check script..."
HEALTH_SCRIPT="/root/Projects/handbag-auth-nextjs/scripts/devops/health-check.sh"
if [ -x "$HEALTH_SCRIPT" ]; then
    log_success "Health check script exists and is executable"
else
    log_failure "Health check script missing or not executable"
fi

# Test 8: Deployment Script
log_info "Test 8: Checking deployment script..."
DEPLOY_SCRIPT="/root/Projects/handbag-auth-nextjs/scripts/devops/deploy.sh"
if [ -x "$DEPLOY_SCRIPT" ]; then
    log_success "Deployment script exists and is executable"
else
    log_failure "Deployment script missing or not executable"
fi

# Test 9: Backup Directory
log_info "Test 9: Checking backup directory..."
BACKUP_DIR="/root/Projects/handbag-auth-nextjs/backups"
if [ -d "$BACKUP_DIR" ]; then
    BACKUP_COUNT=$(find "$BACKUP_DIR" -name "*.tar.gz" -type f | wc -l)
    log_success "Backup directory exists ($BACKUP_COUNT backups found)"
else
    log_failure "Backup directory not found"
fi

# Test 10: Cron Jobs
log_info "Test 10: Checking cron jobs..."
if crontab -l | grep -q "LUXVAULT Auction Viewer"; then
    log_success "DevOps cron jobs configured"
else
    log_failure "DevOps cron jobs not found in crontab"
fi

# Test 11: Log Directory
log_info "Test 11: Checking log directory..."
LOG_DIR="/root/Projects/handbag-auth-nextjs/logs"
if [ -d "$LOG_DIR" ]; then
    log_success "Log directory exists"
else
    log_failure "Log directory not found"
fi

# Test 12: PM2 Saved
log_info "Test 12: Checking PM2 configuration..."
if [ -f ~/.pm2/dump.pm2 ]; then
    log_success "PM2 configuration saved"
else
    log_failure "PM2 configuration not saved"
fi

# Test 13: API Endpoints
log_info "Test 13: Testing API endpoints..."
API_RESPONSE=$(curl -s -o /dev/null -w "%{http_code}" http://45.61.58.125:7500/api/stats)
if [ "$API_RESPONSE" == "200" ]; then
    log_success "API endpoints working"
else
    log_failure "API endpoints failed (HTTP $API_RESPONSE)"
fi

# Test 14: Documentation
log_info "Test 14: Checking documentation..."
if [ -f "/root/Projects/handbag-auth-nextjs/DEVOPS_RUNBOOK.md" ]; then
    log_success "DevOps runbook exists"
else
    log_failure "DevOps runbook not found"
fi

# Test 15: Monitoring Dashboard
log_info "Test 15: Checking monitoring dashboard..."
DASHBOARD="/root/Projects/handbag-auth-nextjs/scripts/devops/monitoring-dashboard.html"
if [ -f "$DASHBOARD" ]; then
    log_success "Monitoring dashboard exists"
else
    log_failure "Monitoring dashboard not found"
fi

echo ""
echo "=========================================="
echo "Validation Summary"
echo "=========================================="
echo -e "${GREEN}Passed:${NC} $PASSED"
echo -e "${RED}Failed:${NC} $FAILED"
echo "Total Tests: $((PASSED + FAILED))"

if [ $FAILED -eq 0 ]; then
    echo ""
    echo -e "${GREEN}✓ All tests passed! DevOps infrastructure is operational.${NC}"
    exit 0
else
    echo ""
    echo -e "${RED}✗ Some tests failed. Please review and fix issues.${NC}"
    exit 1
fi