<< DASHBOARD RETURN

SYSTEM ARCHITECTURE

INFORME TÉCNICO DETALLADO: ARQUITECTURA, CÓDIGO & METODOLOGÍA

1. Arquitectura & Flujo de Datos (Modo Multi-Dispositivo)

El sistema ha evolucionado hacia una topología de red Hub & Spoke (Centro y Radios). Ahora tenemos un servidor central que agrega datos de múltiples agentes distribuidos.

[ HUB CENTRAL (Server.js) ]
Base de Datos Volátil (Memoria)

⬆️ POST /api/register (JSON) ⬆️

[ CLIENTE WEB ]
Dashboard
[ AGENTE 1 ]
agent.js
[ AGENTE 2 ]
agent.js

¿Cómo funciona la red?
A diferencia de la versión Standalone, aquí el Dashboard no lee directamente el PC donde se ejecuta. En su lugar, lee una "lista de estado" que el servidor mantiene actualizada gracias a los latidos (heartbeats) constantes que envían los agentes instalados en otros PC.

2. Análisis Profundo del Código

A continuación, desglosamos los nuevos módulos distribuidos.

A. EL AGENTE (`agent.js`)

Este es el componente de "Software Espía". Se diseña para ser un script único sin dependencias complejas para facilitar su instalación.

// Configuración Dinámica del Agente const AGENT_ID = 'NODE-' + os.hostname().toUpperCase(); // Heartbeat Loop (Cada 2 segundos) setInterval(() => { // 1. Obtener métricas locales const stats = { cpu: getLoad(), ram: getMem() }; // 2. Enviar señal al Servidor Central const req = http.request({ hostname: 'localhost', path: '/api/heartbeat', method: 'POST', }, ...); }, 2000);

B. EL HUB CENTRAL (`server.js`)

El servidor ahora actúa como un balanceador de carga simplificado.

// Almacenamiento en Memoria (RAM Database) let connectedClients = {}; // Endpoint de Registro app.post('/api/heartbeat', (req, res) => { const { id, cpu, ram } = req.body; // Guardar o Actualizar Cliente connectedClients[id] = { id, ram, cpu, lastSeen: Date.now() }; }); // Garbage Collector: Eliminar nodos inactivos > 10s setInterval(cleanupNodes, 5000);

C. FRONTEND: Lógica de Visualización (`app.js`)

El frontend se encarga de pintar la lista de "Active Nodes" en el sidebar.

function updateClientList() { fetch('/api/clients') .then(res => res.json()) .then(clients => { // Generar botones para cada nodo detectado nodesList.innerHTML = clients.map(c => `<div class="node-item">${c.id}</div>` ).join(''); }); }

3. Proceso de Resolución del Proyecto

Metodología de desarrollo incremental utilizada para construir la aplicación, desde el concepto básico hasta el producto final pulido.

FASE 1: Prototipado "Backend First"

Node.js Express

Objetivo inicial: Comunicación básica Node.js <-> OS.

FASE 2: Integración Web

Git HTML5

Creación de estructura base y resolución de conflictos Git.

FASE 3: Rediseño Visual Total

CSS3 Cyberpunk

Reescritura completa del CSS inspirado en "Tokyo Night". Inyección de CSS crítico.

FASE 4: Arquitectura Distribuida (V3.0)

Networking Agentes

Expansión final para soportar múltiples dispositivos. Creación del endpoint /api/heartbeat y el script agent.js.

SOLICITUD USUARIO: "Quiero que dispositivos se puedan conectar al servidor y todos esos dispositivos se pudiesen ver en el dashboard."