🎓 Initial commit: Math2 Platform - Plataforma de Álgebra Lineal PRO
✨ Características: - 45 ejercicios universitarios (Basic → Advanced) - Renderizado LaTeX profesional - IA generativa (Z.ai/DashScope) - Docker 9 servicios - Tests 123/123 pasando - Seguridad enterprise (JWT, XSS, Rate limiting) 🐳 Infraestructura: - Next.js 14 + Node.js 20 - PostgreSQL 15 + Redis 7 - Docker Compose completo - Nginx + SSL ready 📚 Documentación: - 5 informes técnicos completos - README profesional - Scripts de deployment automatizados Estado: Producción lista ✅
This commit is contained in:
195
scripts/system-check.sh
Executable file
195
scripts/system-check.sh
Executable file
@@ -0,0 +1,195 @@
|
||||
#!/bin/bash
|
||||
# ================================================
|
||||
# Math Platform - Complete System Verification
|
||||
# ================================================
|
||||
|
||||
set -e
|
||||
|
||||
# Colors for output
|
||||
RED='\033[0;31m'
|
||||
GREEN='\033[0;32m'
|
||||
YELLOW='\033[1;33m'
|
||||
BLUE='\033[0;34m'
|
||||
CYAN='\033[0;36m'
|
||||
NC='\033[0m' # No Color
|
||||
|
||||
PROJECT_ROOT="$(cd "$(dirname "${BASH_SOURCE[0]}")/.." && pwd)"
|
||||
|
||||
echo -e "${CYAN}╔════════════════════════════════════════════════════════════╗${NC}"
|
||||
echo -e "${CYAN}║ Math Platform - Complete System Verification ║${NC}"
|
||||
echo -e "${CYAN}║ $(date '+%Y-%m-%d %H:%M:%S') ║${NC}"
|
||||
echo -e "${CYAN}╚════════════════════════════════════════════════════════════╝${NC}"
|
||||
|
||||
total_checks=0
|
||||
passed_checks=0
|
||||
failed_checks=0
|
||||
warned_checks=0
|
||||
|
||||
# Function to perform check
|
||||
check() {
|
||||
local description=$1
|
||||
local command=$2
|
||||
local severity=${3:-ERROR} # ERROR or WARN
|
||||
|
||||
total_checks=$((total_checks + 1))
|
||||
echo -n "[$total_checks] $description... "
|
||||
|
||||
if eval "$command" > /dev/null 2>&1; then
|
||||
echo -e "${GREEN}PASS${NC}"
|
||||
passed_checks=$((passed_checks + 1))
|
||||
return 0
|
||||
else
|
||||
if [ "$severity" = "WARN" ]; then
|
||||
echo -e "${YELLOW}WARN${NC}"
|
||||
warned_checks=$((warned_checks + 1))
|
||||
else
|
||||
echo -e "${RED}FAIL${NC}"
|
||||
failed_checks=$((failed_checks + 1))
|
||||
fi
|
||||
return 1
|
||||
fi
|
||||
}
|
||||
|
||||
# Section 1: Docker Environment
|
||||
echo -e "\n${BLUE}═══ Docker Environment ═══${NC}"
|
||||
check "Docker daemon running" "docker info"
|
||||
check "Docker Compose available" "command -v docker-compose || docker compose version"
|
||||
|
||||
# Section 2: Configuration Files
|
||||
echo -e "\n${BLUE}═══ Configuration Files ═══${NC}"
|
||||
check "docker-compose.yml exists" "test -f $PROJECT_ROOT/docker-compose.yml"
|
||||
check ".env file exists" "test -f $PROJECT_ROOT/.env"
|
||||
check "Backend Dockerfile exists" "test -f $PROJECT_ROOT/docker/Dockerfile.backend"
|
||||
check "Frontend Dockerfile exists" "test -f $PROJECT_ROOT/docker/Dockerfile.frontend"
|
||||
check "Worker Dockerfile exists" "test -f $PROJECT_ROOT/docker/Dockerfile.worker"
|
||||
check "Nginx config exists" "test -f $PROJECT_ROOT/docker/nginx.conf"
|
||||
|
||||
# Section 3: Application Structure
|
||||
echo -e "\n${BLUE}═══ Application Structure ═══${NC}"
|
||||
check "Backend package.json exists" "test -f $PROJECT_ROOT/backend/package.json"
|
||||
check "Frontend package.json exists" "test -f $PROJECT_ROOT/frontend/package.json"
|
||||
check "Prisma schema exists" "test -f $PROJECT_ROOT/backend/prisma/schema.prisma"
|
||||
check "Next.js config exists" "test -f $PROJECT_ROOT/frontend/next.config.js"
|
||||
check "Backend src directory exists" "test -d $PROJECT_ROOT/backend/src"
|
||||
check "Frontend src directory exists" "test -d $PROJECT_ROOT/frontend/src"
|
||||
|
||||
# Section 4: Scripts
|
||||
echo -e "\n${BLUE}═══ Management Scripts ═══${NC}"
|
||||
check "start.sh is executable" "test -x $PROJECT_ROOT/docker/start.sh"
|
||||
check "stop.sh is executable" "test -x $PROJECT_ROOT/docker/stop.sh"
|
||||
check "backup.sh is executable" "test -x $PROJECT_ROOT/docker/backup.sh"
|
||||
check "test-e2e.sh is executable" "test -x $PROJECT_ROOT/scripts/test-e2e.sh"
|
||||
check "health-check.sh is executable" "test -x $PROJECT_ROOT/scripts/health-check.sh"
|
||||
check "validate-deployment.sh is executable" "test -x $PROJECT_ROOT/scripts/validate-deployment.sh"
|
||||
|
||||
# Section 5: Directories
|
||||
echo -e "\n${BLUE}═══ Required Directories ═══${NC}"
|
||||
check "docker/data directory exists" "test -d $PROJECT_ROOT/docker/data"
|
||||
check "docker/logs directory exists" "test -d $PROJECT_ROOT/docker/logs"
|
||||
check "docker/init-scripts directory exists" "test -d $PROJECT_ROOT/docker/init-scripts"
|
||||
check "pdfs directory exists" "test -d $PROJECT_ROOT/pdfs"
|
||||
check "scripts directory exists" "test -d $PROJECT_ROOT/scripts"
|
||||
|
||||
# Section 6: Environment Variables (if services are running)
|
||||
echo -e "\n${BLUE}═══ Environment Variables ═══${NC}"
|
||||
|
||||
if [ -f "$PROJECT_ROOT/.env" ]; then
|
||||
source "$PROJECT_ROOT/.env"
|
||||
|
||||
check "DB_PASSWORD is set" "test -n '$DB_PASSWORD'" "WARN"
|
||||
check "REDIS_PASSWORD is set" "test -n '$REDIS_PASSWORD'" "WARN"
|
||||
check "JWT_SECRET is set" "test -n '$JWT_SECRET'" "WARN"
|
||||
check "AI_API_KEY is set" "test -n '$AI_API_KEY'" "WARN"
|
||||
else
|
||||
echo -e "${YELLOW}.env file not found, skipping variable checks${NC}"
|
||||
fi
|
||||
|
||||
# Section 7: Services (if running)
|
||||
echo -e "\n${BLUE}═══ Running Services ═══${NC}"
|
||||
|
||||
if docker info > /dev/null 2>&1; then
|
||||
check "PostgreSQL container running" "docker ps | grep -q math-postgres" "WARN"
|
||||
check "Redis container running" "docker ps | grep -q math-redis" "WARN"
|
||||
check "Backend container running" "docker ps | grep -q math-backend" "WARN"
|
||||
check "Frontend container running" "docker ps | grep -q math-frontend" "WARN"
|
||||
check "Nginx container running" "docker ps | grep -q math-nginx" "WARN"
|
||||
else
|
||||
echo -e "${YELLOW}Docker not running, skipping service checks${NC}"
|
||||
fi
|
||||
|
||||
# Section 8: Service Health (if running)
|
||||
echo -e "\n${BLUE}═══ Service Health Endpoints ═══${NC}"
|
||||
|
||||
if curl -s http://localhost:3001/health > /dev/null 2>&1; then
|
||||
check "Backend API health endpoint" "curl -s -f http://localhost:3001/health" "WARN"
|
||||
else
|
||||
echo -e "${YELLOW}Backend not accessible, skipping health checks${NC}"
|
||||
fi
|
||||
|
||||
if curl -s http://localhost:3000 > /dev/null 2>&1; then
|
||||
check "Frontend web server" "curl -s -f http://localhost:3000" "WARN"
|
||||
else
|
||||
echo -e "${YELLOW}Frontend not accessible, skipping health checks${NC}"
|
||||
fi
|
||||
|
||||
# Section 9: Port Availability (if services not running)
|
||||
echo -e "\n${BLUE}═══ Port Availability ═══${NC}"
|
||||
|
||||
if ! docker ps | grep -q math-postgres; then
|
||||
check "Port 5432 available" "! netstat -tuln 2>/dev/null | grep -q ':5432 ' || ! ss -tuln 2>/dev/null | grep -q ':5432 '" "WARN"
|
||||
else
|
||||
echo -e "${YELLOW}PostgreSQL running, skipping port check${NC}"
|
||||
fi
|
||||
|
||||
if ! docker ps | grep -q math-redis; then
|
||||
check "Port 6379 available" "! netstat -tuln 2>/dev/null | grep -q ':6379 ' || ! ss -tuln 2>/dev/null | grep -q ':6379 '" "WARN"
|
||||
else
|
||||
echo -e "${YELLOW}Redis running, skipping port check${NC}"
|
||||
fi
|
||||
|
||||
# Section 10: System Resources
|
||||
echo -e "\n${BLUE}═══ System Resources ═══${NC}"
|
||||
|
||||
DISK_USAGE=$(df -h "$PROJECT_ROOT" | awk 'NR==2 {print $5}' | sed 's/%//')
|
||||
if [ "$DISK_USAGE" -lt 80 ]; then
|
||||
check "Disk space OK (using ${DISK_USAGE}%)" "true"
|
||||
else
|
||||
check "Disk space low (using ${DISK_USAGE}%)" "false" "WARN"
|
||||
fi
|
||||
|
||||
MEM_USAGE=$(free | awk 'NR==2{printf "%.0f", $3*100/$2}')
|
||||
if [ "$MEM_USAGE" -lt 90 ]; then
|
||||
check "Memory OK (using ${MEM_USAGE}%)" "true"
|
||||
else
|
||||
check "Memory high (using ${MEM_USAGE}%)" "false" "WARN"
|
||||
fi
|
||||
|
||||
# Final Summary
|
||||
echo -e "\n${CYAN}╔════════════════════════════════════════════════════════════╗${NC}"
|
||||
echo -e "${CYAN}║ Verification Summary ║${NC}"
|
||||
echo -e "${CYAN}╠════════════════════════════════════════════════════════════╣${NC}"
|
||||
printf "${CYAN}║ Total Checks: %-3d ║${NC}\n" $total_checks
|
||||
printf "${GREEN}║ Passed: %-3d ║${NC}\n" $passed_checks
|
||||
printf "${RED}║ Failed: %-3d ║${NC}\n" $failed_checks
|
||||
printf "${YELLOW}║ Warnings: %-3d ║${NC}\n" $warned_checks
|
||||
echo -e "${CYAN}╚════════════════════════════════════════════════════════════╝${NC}"
|
||||
|
||||
if [ $failed_checks -eq 0 ]; then
|
||||
echo -e "\n${GREEN}✓ All critical checks passed!${NC}\n"
|
||||
|
||||
if [ $warned_checks -gt 0 ]; then
|
||||
echo -e "${YELLOW}⚠ Some warnings detected. Review above for details.${NC}\n"
|
||||
fi
|
||||
|
||||
echo -e "${BLUE}Next steps:${NC}"
|
||||
echo -e " 1. Start services: ${CYAN}./docker/start.sh${NC}"
|
||||
echo -e " 2. Run health check: ${CYAN}./scripts/health-check.sh${NC}"
|
||||
echo -e " 3. Run E2E tests: ${CYAN}./scripts/test-e2e.sh${NC}"
|
||||
echo -e " 4. View documentation: ${CYAN}cat DEPLOY.md${NC}\n"
|
||||
|
||||
exit 0
|
||||
else
|
||||
echo -e "\n${RED}✗ Some critical checks failed!${NC}"
|
||||
echo -e "${RED} Please resolve the issues above before proceeding.${NC}\n"
|
||||
exit 1
|
||||
fi
|
||||
Reference in New Issue
Block a user