workspace/projects/gamilit/scripts/diagnose-production.sh
rckrdmrd d0d5699cd5 feat: Add production deployment scripts and synchronization analysis
Changes:
- Fix ecosystem.config.js path (line 138)
- Add production scripts (update-production.sh, diagnose-production.sh)
- Add PRODUCTION-UPDATE.md with quick instructions
- Add reference to production deployment documentation

Analysis reports:
- PLAN-SINCRONIZACION-WORKSPACES-2025-12-18.md - Master sync plan
- ANALISIS-CONFIGURACION-PRODUCCION-2025-12-18.md - Config analysis
- PLAN-IMPLEMENTACION-SINCRONIZACION-2025-12-18.md - Implementation plan
- VALIDACION-PLAN-SINCRONIZACION-2025-12-18.md - Validation report

Result: Both workspaces (NUEVO/VIEJO) are now 100% synchronized
- DDL: 100% identical
- Seeds: 100% identical
- Backend: 100% synchronized
- Frontend: 100% synchronized

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2025-12-18 10:14:22 -06:00

182 lines
6.7 KiB
Bash
Executable File

#!/bin/bash
# ============================================================================
# GAMILIT - Script de Diagnostico de Produccion
# ============================================================================
# Uso: ./scripts/diagnose-production.sh
#
# Este script verifica el estado completo del sistema GAMILIT en produccion:
# - Estado de PM2
# - Health del backend
# - Conectividad del frontend
# - Conexion a base de datos
# - Tablas criticas (tenants, usuarios, modulos)
# - Recursos del sistema (disco, memoria)
#
# Variables de entorno requeridas:
# DATABASE_URL - URL de conexion a PostgreSQL
#
# ============================================================================
set -e
# Colores
RED='\033[0;31m'
GREEN='\033[0;32m'
YELLOW='\033[1;33m'
BLUE='\033[0;34m'
NC='\033[0m'
# Configuracion
DATABASE_URL="${DATABASE_URL:-postgresql://gamilit_user:PASSWORD@localhost:5432/gamilit_platform}"
BACKEND_URL="${BACKEND_URL:-http://localhost:3006}"
FRONTEND_URL="${FRONTEND_URL:-http://localhost:3005}"
echo -e "${BLUE}"
echo "=============================================="
echo " DIAGNOSTICO SISTEMA GAMILIT PRODUCCION"
echo "=============================================="
echo -e "${NC}"
echo "Fecha: $(date)"
echo "Servidor: $(hostname)"
echo ""
# ============================================================================
# 1. ESTADO PM2
# ============================================================================
echo -e "${YELLOW}=== 1. ESTADO PM2 ===${NC}"
if command -v pm2 &> /dev/null; then
pm2 list 2>/dev/null || echo -e "${RED}Error al listar procesos PM2${NC}"
else
echo -e "${RED}PM2 no esta instalado${NC}"
fi
echo ""
# ============================================================================
# 2. HEALTH BACKEND
# ============================================================================
echo -e "${YELLOW}=== 2. HEALTH BACKEND ===${NC}"
health=$(curl -s --connect-timeout 5 "$BACKEND_URL/api/health" 2>/dev/null)
if [ -n "$health" ]; then
echo -e "${GREEN}Backend respondiendo:${NC}"
echo "$health" | head -10
else
echo -e "${RED}Backend NO responde en $BACKEND_URL${NC}"
echo "Verificar con: pm2 logs gamilit-backend"
fi
echo ""
# ============================================================================
# 3. FRONTEND
# ============================================================================
echo -e "${YELLOW}=== 3. FRONTEND ===${NC}"
frontend_status=$(curl -s -o /dev/null -w "%{http_code}" --connect-timeout 5 "$FRONTEND_URL" 2>/dev/null || echo "000")
if [ "$frontend_status" == "200" ]; then
echo -e "${GREEN}Frontend OK (HTTP $frontend_status)${NC}"
else
echo -e "${RED}Frontend ERROR (HTTP $frontend_status)${NC}"
echo "Verificar con: pm2 logs gamilit-frontend"
fi
echo ""
# ============================================================================
# 4. CONEXION BASE DE DATOS
# ============================================================================
echo -e "${YELLOW}=== 4. CONEXION BASE DE DATOS ===${NC}"
db_version=$(psql "$DATABASE_URL" -t -c "SELECT version();" 2>/dev/null | head -1 | xargs)
if [ -n "$db_version" ]; then
echo -e "${GREEN}BD conectada:${NC}"
echo " $db_version"
else
echo -e "${RED}No se puede conectar a la BD${NC}"
echo "Verificar DATABASE_URL y que PostgreSQL este corriendo"
fi
echo ""
# ============================================================================
# 5. TABLAS CRITICAS
# ============================================================================
echo -e "${YELLOW}=== 5. TABLAS CRITICAS ===${NC}"
check_table() {
local table=$1
local min_expected=${2:-0}
local count=$(psql "$DATABASE_URL" -t -c "SELECT COUNT(*) FROM $table;" 2>/dev/null | tr -d ' ')
if [ -n "$count" ] && [ "$count" -gt 0 ]; then
if [ "$count" -ge "$min_expected" ]; then
echo -e "${GREEN}$table: $count registros${NC}"
else
echo -e "${YELLOW} ⚠️ $table: $count registros (esperado: $min_expected+)${NC}"
fi
else
echo -e "${RED}$table: VACIO o ERROR${NC}"
fi
}
echo "Verificando tablas criticas..."
check_table "auth_management.tenants" 1
check_table "auth.users" 1
check_table "auth_management.profiles" 1
check_table "educational_content.modules" 5
check_table "educational_content.exercises" 20
check_table "gamification_system.maya_ranks" 5
check_table "gamification_system.achievements" 25
check_table "system_configuration.feature_flags" 20
echo ""
# ============================================================================
# 6. TENANT PRINCIPAL (CRITICO)
# ============================================================================
echo -e "${YELLOW}=== 6. TENANT PRINCIPAL (CRITICO) ===${NC}"
tenant=$(psql "$DATABASE_URL" -t -c "SELECT slug || ' | is_active=' || is_active FROM auth_management.tenants WHERE slug = 'gamilit-prod';" 2>/dev/null | xargs)
if [ -n "$tenant" ]; then
echo -e "${GREEN}Tenant encontrado: $tenant${NC}"
else
echo -e "${RED}❌ TENANT PRINCIPAL 'gamilit-prod' NO EXISTE${NC}"
echo -e "${RED} EL REGISTRO DE USUARIOS NO FUNCIONARA${NC}"
echo ""
echo -e "${YELLOW}SOLUCION:${NC}"
echo " cd apps/database"
echo " psql \"\$DATABASE_URL\" -f seeds/prod/auth_management/01-tenants.sql"
fi
echo ""
# ============================================================================
# 7. ESPACIO EN DISCO
# ============================================================================
echo -e "${YELLOW}=== 7. ESPACIO EN DISCO ===${NC}"
df -h / | tail -1
echo ""
# ============================================================================
# 8. MEMORIA
# ============================================================================
echo -e "${YELLOW}=== 8. MEMORIA ===${NC}"
free -h 2>/dev/null || echo "Comando free no disponible"
echo ""
# ============================================================================
# 9. PUERTOS EN USO
# ============================================================================
echo -e "${YELLOW}=== 9. PUERTOS EN USO ===${NC}"
echo "Puerto 3005 (Frontend):"
ss -tlnp 2>/dev/null | grep ":3005" || echo " No hay proceso en puerto 3005"
echo "Puerto 3006 (Backend):"
ss -tlnp 2>/dev/null | grep ":3006" || echo " No hay proceso en puerto 3006"
echo "Puerto 5432 (PostgreSQL):"
ss -tlnp 2>/dev/null | grep ":5432" || echo " No hay proceso en puerto 5432"
echo ""
# ============================================================================
# RESUMEN
# ============================================================================
echo -e "${BLUE}"
echo "=============================================="
echo " DIAGNOSTICO COMPLETADO"
echo "=============================================="
echo -e "${NC}"
echo ""
echo "Guia de troubleshooting:"
echo " docs/95-guias-desarrollo/GUIA-VALIDACION-PRODUCCION.md"
echo ""