commit bc1953fce16091c1a9536f2dbb23acad6a0d0f10 Author: pablinux Date: Sun Jan 11 23:10:43 2026 -0500 iniciando proyecto diff --git a/README.md b/README.md new file mode 100644 index 0000000..889d6b1 --- /dev/null +++ b/README.md @@ -0,0 +1,501 @@ +# SIAX Monitor + +Sistema de monitoreo en tiempo real para aplicaciones Node.js, desarrollado en Rust. Detecta automáticamente procesos Node.js, recolecta métricas de rendimiento (CPU, RAM, PID) y las envía a la nube SIAX. + +## Características + +- **Monitoreo Automático**: Detecta y monitorea procesos Node.js basándose en su directorio de trabajo +- **Métricas en Tiempo Real**: CPU, memoria RAM, PID y estado del proceso +- **Interface Web**: Panel de control intuitivo en el puerto 8080 +- **Sistema de Logs**: Registro completo con niveles (Info, Warning, Error, Critical) +- **Configuración Dinámica**: Gestión de aplicaciones mediante archivo JSON +- **Envío a la Nube**: Reportes automáticos cada 60 segundos a la API SIAX + +## Arquitectura del Proyecto + +``` +siax_monitor/ +├── src/ +│ ├── main.rs # Punto de entrada principal +│ ├── monitor.rs # Lógica de monitoreo de procesos +│ ├── interface.rs # Servidor web Axum +│ ├── logger.rs # Sistema de logging +│ └── config.rs # Gestión de configuración +├── web/ # Templates HTML +│ ├── index.html +│ ├── scan.html +│ ├── select.html +│ ├── success.html +│ └── logs.html +├── config/ # Configuración generada automáticamente +│ └── monitored_apps.json +├── logs/ # Logs del sistema +│ └── errors.log +└── Cargo.toml # Dependencias del proyecto +``` + +## Requisitos Previos + +### Sistema Operativo +- Linux (Ubuntu/Debian recomendado) +- macOS +- Windows (con limitaciones en detección de procesos) + +### Herramientas Necesarias + +#### 1. Rust (toolchain completo) +```bash +# Instalar Rust usando rustup +curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh + +# Verificar instalación +rustc --version +cargo --version +``` + +#### 2. Librerías del Sistema (Linux) + +**Ubuntu/Debian:** +```bash +sudo apt update +sudo apt install -y build-essential pkg-config libssl-dev +``` + +**Fedora/RHEL/CentOS:** +```bash +sudo dnf groupinstall "Development Tools" +sudo dnf install pkg-config openssl-devel +``` + +**Arch Linux:** +```bash +sudo pacman -S base-devel openssl pkg-config +``` + +**macOS:** +```bash +# Instalar Homebrew si no lo tienes +/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)" + +# Instalar dependencias +brew install openssl pkg-config +``` + +## Instalación + +### Opción 1: Clonar y Compilar + +```bash +# Clonar el repositorio (si aplica) +git clone +cd siax_monitor + +# Compilar el proyecto +cargo build --release + +# El binario estará en: +# ./target/release/siax_monitor +``` + +### Opción 2: Compilación Directa + +```bash +# Si ya tienes el código fuente +cd siax_monitor + +# Compilar en modo release (optimizado) +cargo build --release +``` + +## Configuración + +### 1. Archivo de Configuración + +El archivo `config/monitored_apps.json` se crea automáticamente con valores por defecto: + +```json +{ + "apps": [ + { + "name": "app_tareas", + "port": 3000 + }, + { + "name": "fidelizacion", + "port": 3001 + } + ] +} +``` + +**Edita este archivo para agregar/modificar las aplicaciones a monitorear.** + +### 2. Configuración de Credenciales + +Actualmente las credenciales están en `src/main.rs`. Para producción, edita: + +```rust +let server_name = "tu-servidor".to_string(); +let api_key = "tu-api-key".to_string(); +let cloud_url = "https://api.siax-system.net/api/apps_servcs/apps".to_string(); +``` + +## Despliegue + +### Despliegue Manual + +#### 1. Compilar el Proyecto + +```bash +cd /ruta/a/siax_monitor +cargo build --release +``` + +#### 2. Ejecutar el Monitor + +```bash +# Opción 1: Ejecutar directamente +./target/release/siax_monitor + +# Opción 2: Ejecutar con Cargo +cargo run --release +``` + +#### 3. Verificar que Funciona + +```bash +# El sistema mostrará: +# ✅ Sistema SIAX operativo. Monitor en segundo plano e Interface en puerto 8080. + +# Acceder a la interface web: +# http://localhost:8080 +``` + +### Despliegue Automático con Script Bash + +Crea el archivo `desplegar_siax.sh`: + +```bash +#!/bin/bash + +# SIAX Monitor - Script de Despliegue Automático +# Autor: Sistema SIAX +# Descripción: Instala dependencias, compila y ejecuta el monitor + +set -e # Detener en caso de error + +echo "🚀 Iniciando despliegue de SIAX Monitor..." + +# ======================================== +# 1. Verificar Rust +# ======================================== +echo "" +echo "📦 Verificando instalación de Rust..." + +if ! command -v rustc &> /dev/null; then + echo "❌ Rust no está instalado." + echo "Instalando Rust..." + curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh -s -- -y + source "$HOME/.cargo/env" + echo "✅ Rust instalado correctamente" +else + echo "✅ Rust ya está instalado ($(rustc --version))" +fi + +# ======================================== +# 2. Detectar sistema operativo e instalar dependencias +# ======================================== +echo "" +echo "🔧 Instalando dependencias del sistema..." + +if [[ "$OSTYPE" == "linux-gnu"* ]]; then + # Detectar distribución Linux + if [ -f /etc/debian_version ]; then + echo "Detectado: Debian/Ubuntu" + sudo apt update + sudo apt install -y build-essential pkg-config libssl-dev + elif [ -f /etc/redhat-release ]; then + echo "Detectado: RHEL/Fedora/CentOS" + sudo dnf groupinstall "Development Tools" -y + sudo dnf install pkg-config openssl-devel -y + elif [ -f /etc/arch-release ]; then + echo "Detectado: Arch Linux" + sudo pacman -S --noconfirm base-devel openssl pkg-config + else + echo "⚠️ Distribución no reconocida. Instala manualmente: build-essential, pkg-config, libssl-dev" + fi +elif [[ "$OSTYPE" == "darwin"* ]]; then + echo "Detectado: macOS" + if ! command -v brew &> /dev/null; then + echo "Instalando Homebrew..." + /bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)" + fi + brew install openssl pkg-config +else + echo "⚠️ Sistema operativo no soportado automáticamente" +fi + +echo "✅ Dependencias instaladas" + +# ======================================== +# 3. Compilar el proyecto +# ======================================== +echo "" +echo "🔨 Compilando SIAX Monitor..." + +cargo build --release + +if [ $? -eq 0 ]; then + echo "✅ Compilación exitosa" +else + echo "❌ Error en la compilación" + exit 1 +fi + +# ======================================== +# 4. Crear directorios necesarios +# ======================================== +echo "" +echo "📁 Creando directorios..." + +mkdir -p config +mkdir -p logs + +echo "✅ Directorios creados" + +# ======================================== +# 5. Verificar configuración +# ======================================== +echo "" +echo "⚙️ Verificando configuración..." + +if [ ! -f "config/monitored_apps.json" ]; then + echo "ℹ️ Archivo de configuración no encontrado. Se creará automáticamente al iniciar." +fi + +# ======================================== +# 6. Ejecutar el monitor +# ======================================== +echo "" +echo "🎯 Iniciando SIAX Monitor..." +echo "" +echo "==========================================" +echo " Interface Web: http://localhost:8080" +echo " Logs: logs/errors.log" +echo " Config: config/monitored_apps.json" +echo "==========================================" +echo "" + +./target/release/siax_monitor +``` + +#### Usar el Script + +```bash +# Dar permisos de ejecución +chmod +x desplegar_siax.sh + +# Ejecutar +./desplegar_siax.sh +``` + +### Despliegue como Servicio Systemd (Linux) + +Para ejecutar SIAX Monitor como servicio en segundo plano: + +#### 1. Crear archivo de servicio + +```bash +sudo nano /etc/systemd/system/siax-monitor.service +``` + +#### 2. Contenido del servicio + +```ini +[Unit] +Description=SIAX Monitor - Sistema de Monitoreo Node.js +After=network.target + +[Service] +Type=simple +User=tu_usuario +WorkingDirectory=/ruta/completa/a/siax_monitor +ExecStart=/ruta/completa/a/siax_monitor/target/release/siax_monitor +Restart=always +RestartSec=10 + +# Variables de entorno (opcional) +Environment="RUST_LOG=info" + +# Logs +StandardOutput=append:/var/log/siax-monitor.log +StandardError=append:/var/log/siax-monitor-error.log + +[Install] +WantedBy=multi-user.target +``` + +#### 3. Activar y gestionar el servicio + +```bash +# Recargar systemd +sudo systemctl daemon-reload + +# Habilitar inicio automático +sudo systemctl enable siax-monitor + +# Iniciar el servicio +sudo systemctl start siax-monitor + +# Ver estado +sudo systemctl status siax-monitor + +# Ver logs +sudo journalctl -u siax-monitor -f + +# Detener servicio +sudo systemctl stop siax-monitor + +# Reiniciar servicio +sudo systemctl restart siax-monitor +``` + +## Uso + +### Interface Web + +Accede a `http://localhost:8080` para: + +1. **Dashboard Principal** (`/`) + - Vista general del sistema + +2. **Escanear Procesos** (`/scan`) + - Lista todos los procesos Node.js detectados + - Muestra PID, CPU, RAM y ruta + +3. **Seleccionar Procesos** (`/select`) + - Interfaz para agregar procesos al monitoreo + - Auto-completa nombre basándose en la ruta + +4. **Ver Logs** (`/logs`) + - Historial completo de logs + - Estadísticas por nivel + - Filtros por tipo + +### Línea de Comandos + +```bash +# Ver logs en tiempo real +tail -f logs/errors.log + +# Editar configuración +nano config/monitored_apps.json + +# Verificar procesos Node.js +ps aux | grep node +``` + +## Dependencias de Rust + +El proyecto utiliza las siguientes crates: + +- **tokio** `1.x` - Runtime asíncrono +- **axum** `0.7` - Framework web +- **reqwest** `0.11` - Cliente HTTP (con feature `json`) +- **serde** `1.0` - Serialización/deserialización (con feature `derive`) +- **serde_json** `1.0` - Manejo de JSON +- **sysinfo** `0.30` - Información del sistema +- **chrono** `0.4` - Manejo de fechas y timestamps + +## Estructura de Datos + +### AppStatusUpdate (enviado a la nube) + +```json +{ + "app_name": "app_tareas", + "server": "siax-intel", + "status": "running", + "port": 3000, + "pid": 12345, + "memory_usage": "125.45MB", + "cpu_usage": "2.30%", + "last_check": "2025-01-11 14:30:00" +} +``` + +### MonitoredApp (configuración) + +```json +{ + "name": "nombre_app", + "port": 3000 +} +``` + +## Solución de Problemas + +### Error: "error: linker 'cc' not found" + +```bash +# Ubuntu/Debian +sudo apt install build-essential + +# Fedora/RHEL +sudo dnf groupinstall "Development Tools" +``` + +### Error: "failed to run custom build command for openssl-sys" + +```bash +# Ubuntu/Debian +sudo apt install pkg-config libssl-dev + +# Fedora/RHEL +sudo dnf install pkg-config openssl-devel + +# macOS +brew install openssl pkg-config +``` + +### El monitor no detecta mis procesos Node.js + +1. Verifica que los procesos estén corriendo: `ps aux | grep node` +2. Comprueba que el nombre en `config/monitored_apps.json` coincida con el directorio de trabajo del proceso +3. El monitor busca coincidencias en el `cwd` (current working directory) del proceso + +### La interface web no carga + +1. Verifica que el puerto 8080 esté libre: `lsof -i :8080` +2. Comprueba los logs: `cat logs/errors.log` +3. Asegúrate de que las templates HTML existan en `web/` + +## Seguridad + +⚠️ **IMPORTANTE**: + +- El API Key está hardcodeado en `src/main.rs` +- Para producción, usa variables de entorno +- No expongas el puerto 8080 a internet sin autenticación +- Considera usar HTTPS en producción + +## Contribuir + +1. Fork el proyecto +2. Crea una rama para tu feature (`git checkout -b feature/nueva-funcionalidad`) +3. Commit tus cambios (`git commit -am 'Agrega nueva funcionalidad'`) +4. Push a la rama (`git push origin feature/nueva-funcionalidad`) +5. Crea un Pull Request + +## Licencia + +[Especificar licencia] + +## Contacto + +Sistema SIAX - [Información de contacto] + +--- + +**Versión**: 0.1.0 +**Última actualización**: 2025-01-11 diff --git a/src/config.rs b/src/config.rs new file mode 100644 index 0000000..e69de29 diff --git a/src/interface.rs b/src/interface.rs new file mode 100644 index 0000000..e69de29 diff --git a/src/logger.rs b/src/logger.rs new file mode 100644 index 0000000..e69de29 diff --git a/src/monitor.rs b/src/monitor.rs new file mode 100644 index 0000000..e69de29