iniciando proyecto

This commit is contained in:
2026-01-11 23:10:43 -05:00
commit bc1953fce1
5 changed files with 501 additions and 0 deletions

501
README.md Normal file
View File

@@ -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 <repository-url>
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

0
src/config.rs Normal file
View File

0
src/interface.rs Normal file
View File

0
src/logger.rs Normal file
View File

0
src/monitor.rs Normal file
View File