- Añadir campos al modelo MonitoredApp: * service_name: Nombre del servicio systemd * path: WorkingDirectory de la aplicación * entry_point: Archivo de entrada (server.js, app.js, etc.) * node_bin: Ruta completa al binario de node/python * mode: Modo de ejecución (production, development, test) * service_file_path: Ruta al archivo .service de systemd * registered_at: Timestamp de registro (ISO 8601) - Actualizar discovery.rs para extraer toda la información: * Parsear ExecStart para obtener node_bin y entry_point * Extraer NODE_ENV para determinar el modo * Guardar ruta completa al archivo .service * Usar add_app_full() con información completa - Integrar ConfigManager en AppManager: * Guardar automáticamente en monitored_apps.json al registrar apps * Eliminar del JSON al desregistrar apps * Extraer metadata desde ServiceConfig (puerto, entry_point, mode, etc.) - Mantener retrocompatibilidad con JSON antiguo mediante campos deprecated - Todos los nuevos campos usan #[serde(default)] para evitar errores de deserialización
765 lines
32 KiB
HTML
765 lines
32 KiB
HTML
<!doctype html>
|
|
<html class="dark" lang="es" dir="ltr">
|
|
<head>
|
|
<meta charset="utf-8" />
|
|
<meta content="width=device-width, initial-scale=1.0" name="viewport" />
|
|
<title>
|
|
SIAX Monitor: Sistema de Monitoreo de Aplicaciones en Rust - Blog
|
|
Telcotronics
|
|
</title>
|
|
<link rel="icon" type="image/svg+xml" href="/static/icon/favicon.svg" />
|
|
<script src="https://cdn.tailwindcss.com?plugins=forms,container-queries"></script>
|
|
<link
|
|
href="https://fonts.googleapis.com/css2?family=Inter:wght@400;500;600;700;800;900&display=swap"
|
|
rel="stylesheet"
|
|
/>
|
|
<link
|
|
href="https://fonts.googleapis.com/css2?family=JetBrains+Mono:wght@400;500;600&display=swap"
|
|
rel="stylesheet"
|
|
/>
|
|
<link
|
|
href="https://fonts.googleapis.com/css2?family=Material+Symbols+Outlined:wght,FILL@100..700,0..1&display=swap"
|
|
rel="stylesheet"
|
|
/>
|
|
<script>
|
|
tailwind.config = {
|
|
darkMode: "class",
|
|
theme: {
|
|
extend: {
|
|
colors: {
|
|
primary: "#137fec",
|
|
"background-light": "#f6f7f8",
|
|
"background-dark": "#101922",
|
|
},
|
|
fontFamily: {
|
|
display: ["Inter", "sans-serif"],
|
|
mono: ["JetBrains Mono", "monospace"],
|
|
},
|
|
},
|
|
},
|
|
};
|
|
</script>
|
|
<style>
|
|
body {
|
|
font-family: "Inter", sans-serif;
|
|
}
|
|
.material-symbols-outlined {
|
|
font-variation-settings:
|
|
"FILL" 0,
|
|
"wght" 400,
|
|
"GRAD" 0,
|
|
"opsz" 24;
|
|
}
|
|
.blog-content h2 {
|
|
font-size: 2rem;
|
|
font-weight: 800;
|
|
margin-top: 3rem;
|
|
margin-bottom: 1.5rem;
|
|
color: white;
|
|
}
|
|
.blog-content h3 {
|
|
font-size: 1.5rem;
|
|
font-weight: 700;
|
|
margin-top: 2rem;
|
|
margin-bottom: 1rem;
|
|
color: #e2e8f0;
|
|
}
|
|
.blog-content p {
|
|
margin-bottom: 1.25rem;
|
|
line-height: 1.75;
|
|
color: #cbd5e1;
|
|
}
|
|
.blog-content ul,
|
|
.blog-content ol {
|
|
margin-bottom: 1.5rem;
|
|
padding-left: 1.5rem;
|
|
}
|
|
.blog-content li {
|
|
margin-bottom: 0.75rem;
|
|
line-height: 1.75;
|
|
color: #cbd5e1;
|
|
}
|
|
.blog-content ul li {
|
|
list-style-type: disc;
|
|
}
|
|
.blog-content ol li {
|
|
list-style-type: decimal;
|
|
}
|
|
.blog-content strong {
|
|
color: white;
|
|
font-weight: 600;
|
|
}
|
|
.blog-content code {
|
|
background: #1e293b;
|
|
padding: 0.2rem 0.4rem;
|
|
border-radius: 0.25rem;
|
|
font-size: 0.9em;
|
|
color: #60a5fa;
|
|
}
|
|
.blog-content pre {
|
|
background: #0f172a;
|
|
padding: 1.5rem;
|
|
border-radius: 0.5rem;
|
|
overflow-x: auto;
|
|
margin-bottom: 1.5rem;
|
|
border: 1px solid #334155;
|
|
}
|
|
.blog-content pre code {
|
|
background: none;
|
|
padding: 0;
|
|
color: #94a3b8;
|
|
}
|
|
.blog-content blockquote {
|
|
border-left: 4px solid #137fec;
|
|
padding-left: 1.5rem;
|
|
margin: 1.5rem 0;
|
|
font-style: italic;
|
|
color: #94a3b8;
|
|
}
|
|
</style>
|
|
</head>
|
|
<body class="bg-background-dark text-slate-300">
|
|
<!-- Header -->
|
|
<header class="border-b border-slate-800 bg-[#0a0f16]">
|
|
<div class="max-w-4xl mx-auto px-4 sm:px-6 lg:px-8 py-6">
|
|
<div class="flex items-center justify-between">
|
|
<a
|
|
href="/"
|
|
class="text-2xl font-black text-white hover:text-primary transition-colors"
|
|
>
|
|
SIAX Monitor
|
|
</a>
|
|
<nav class="flex items-center gap-6">
|
|
<a
|
|
href="/"
|
|
class="text-slate-400 hover:text-white transition-colors"
|
|
>Dashboard</a
|
|
>
|
|
<a
|
|
href="/api-docs"
|
|
class="text-slate-400 hover:text-white transition-colors"
|
|
>API</a
|
|
>
|
|
<a
|
|
href="https://git.telcotronics.net/pablinux/SIAX-MONITOR"
|
|
target="_blank"
|
|
class="text-slate-400 hover:text-primary transition-colors flex items-center gap-1"
|
|
>
|
|
<span class="material-symbols-outlined text-sm"
|
|
>code</span
|
|
>
|
|
Git
|
|
</a>
|
|
</nav>
|
|
</div>
|
|
</div>
|
|
</header>
|
|
|
|
<!-- Article Container -->
|
|
<article class="max-w-4xl mx-auto px-4 sm:px-6 lg:px-8 py-12">
|
|
<!-- Article Header -->
|
|
<header class="mb-12">
|
|
<!-- Categories -->
|
|
<div class="flex flex-wrap gap-2 mb-6">
|
|
<span
|
|
class="inline-flex items-center gap-1 px-3 py-1 rounded-full bg-primary/20 text-primary text-sm font-semibold"
|
|
>
|
|
<span class="material-symbols-outlined text-xs"
|
|
>folder</span
|
|
>
|
|
DevOps
|
|
</span>
|
|
<span
|
|
class="inline-flex items-center gap-1 px-3 py-1 rounded-full bg-green-500/20 text-green-400 text-sm font-semibold"
|
|
>
|
|
<span class="material-symbols-outlined text-xs"
|
|
>code</span
|
|
>
|
|
Rust
|
|
</span>
|
|
<span
|
|
class="inline-flex items-center gap-1 px-3 py-1 rounded-full bg-blue-500/20 text-blue-400 text-sm font-semibold"
|
|
>
|
|
<span class="material-symbols-outlined text-xs"
|
|
>monitoring</span
|
|
>
|
|
Monitoring
|
|
</span>
|
|
</div>
|
|
|
|
<!-- Title -->
|
|
<h1
|
|
class="text-4xl md:text-5xl font-black text-white mb-6 leading-tight"
|
|
>
|
|
SIAX Monitor: Sistema de Monitoreo y Gestión de Aplicaciones
|
|
Node.js y Python
|
|
</h1>
|
|
|
|
<!-- Meta info -->
|
|
<div
|
|
class="flex flex-wrap items-center gap-4 text-slate-400 text-sm"
|
|
>
|
|
<div class="flex items-center gap-2">
|
|
<div
|
|
class="w-10 h-10 rounded-full bg-primary/20 flex items-center justify-center"
|
|
>
|
|
<span
|
|
class="material-symbols-outlined text-primary text-lg"
|
|
>person</span
|
|
>
|
|
</div>
|
|
<span
|
|
>Por
|
|
<strong class="text-white">pablinux</strong></span
|
|
>
|
|
</div>
|
|
<div class="flex items-center gap-1">
|
|
<span class="material-symbols-outlined text-sm"
|
|
>calendar_today</span
|
|
>
|
|
<time datetime="2026-01-13">13 de enero, 2026</time>
|
|
</div>
|
|
<div class="flex items-center gap-1">
|
|
<span class="material-symbols-outlined text-sm"
|
|
>schedule</span
|
|
>
|
|
<span>10 min de lectura</span>
|
|
</div>
|
|
</div>
|
|
</header>
|
|
|
|
<!-- Featured Image -->
|
|
<div
|
|
class="mb-12 rounded-2xl overflow-hidden border border-slate-800 bg-gradient-to-br from-primary/20 via-background-dark to-background-dark p-12"
|
|
>
|
|
<div class="flex items-center justify-center">
|
|
<div class="text-center">
|
|
<div
|
|
class="inline-flex items-center justify-center w-24 h-24 rounded-2xl bg-primary/20 border-2 border-primary/30 mb-4"
|
|
>
|
|
<span
|
|
class="material-symbols-outlined text-primary"
|
|
style="font-size: 3rem"
|
|
>monitoring</span
|
|
>
|
|
</div>
|
|
<p class="text-slate-400 text-lg">
|
|
Monitoreo inteligente con Rust + Systemd
|
|
</p>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
|
|
<!-- Article Content -->
|
|
<div class="blog-content">
|
|
<p class="text-xl text-slate-300 mb-8 leading-relaxed">
|
|
En el mundo del desarrollo moderno, gestionar múltiples
|
|
aplicaciones Node.js y Python en servidores de producción
|
|
puede convertirse rápidamente en un dolor de cabeza. SIAX
|
|
Monitor nace como una solución elegante, ligera y poderosa
|
|
para este problema, aprovechando la velocidad y seguridad de
|
|
Rust.
|
|
</p>
|
|
|
|
<h2>¿Qué es SIAX Monitor?</h2>
|
|
<p>
|
|
SIAX Monitor es un
|
|
<strong>agente de monitoreo inteligente</strong> diseñado
|
|
específicamente para entornos Linux con systemd. A
|
|
diferencia de soluciones enterprise como Prometheus o
|
|
Grafana que pueden resultar excesivas para equipos pequeños,
|
|
SIAX Monitor ofrece exactamente lo que necesitas sin
|
|
complicaciones innecesarias.
|
|
</p>
|
|
<p>
|
|
Desarrollado completamente en Rust, combina alto rendimiento
|
|
con un consumo mínimo de recursos. El proyecto utiliza
|
|
tecnologías modernas como Tokio para async runtime, Axum
|
|
para el servidor web, y se integra nativamente con systemd y
|
|
journalctl.
|
|
</p>
|
|
|
|
<h2>Características Principales</h2>
|
|
|
|
<h3>🔍 Escaneo Automático de Procesos</h3>
|
|
<p>
|
|
El sistema detecta automáticamente procesos Node.js y Python
|
|
en ejecución, recopilando información detallada como:
|
|
</p>
|
|
<ul>
|
|
<li>PID y nombre del proceso</li>
|
|
<li>Usuario propietario</li>
|
|
<li>Uso de CPU en tiempo real</li>
|
|
<li>Consumo de memoria RAM</li>
|
|
<li>Comando completo de ejecución</li>
|
|
</ul>
|
|
|
|
<h3>⚙️ Gestión de Ciclo de Vida</h3>
|
|
<p>
|
|
Control total sobre tus aplicaciones mediante la API REST:
|
|
</p>
|
|
<ul>
|
|
<li>
|
|
<code>POST /api/apps</code> - Registrar nueva aplicación
|
|
</li>
|
|
<li>
|
|
<code>POST /api/apps/:name/start</code> - Iniciar
|
|
servicio
|
|
</li>
|
|
<li>
|
|
<code>POST /api/apps/:name/stop</code> - Detener
|
|
servicio
|
|
</li>
|
|
<li>
|
|
<code>POST /api/apps/:name/restart</code> - Reiniciar
|
|
servicio
|
|
</li>
|
|
<li>
|
|
<code>GET /api/apps/:name/status</code> - Consultar
|
|
estado
|
|
</li>
|
|
</ul>
|
|
<p>
|
|
El sistema incluye <strong>rate limiting</strong> (1
|
|
operación/segundo por app) para evitar abusos y validaciones
|
|
de seguridad en todos los endpoints.
|
|
</p>
|
|
|
|
<h3>📝 Logs en Tiempo Real</h3>
|
|
<p>
|
|
Uno de los puntos más fuertes es el streaming de logs vía
|
|
WebSocket. Conectándote al endpoint
|
|
<code>ws://localhost:8080/api/apps/:name/logs</code>,
|
|
recibes logs en tiempo real desde journalctl sin necesidad
|
|
de SSH al servidor.
|
|
</p>
|
|
<p>La interfaz web incluye un visor tipo terminal con:</p>
|
|
<ul>
|
|
<li>Auto-scroll inteligente</li>
|
|
<li>Colores para niveles de log (ERROR, WARN, INFO)</li>
|
|
<li>Timestamps formateados</li>
|
|
<li>Botón para pausar/reanudar</li>
|
|
</ul>
|
|
|
|
<h3>🛡️ Seguridad y Validaciones</h3>
|
|
<p>SIAX Monitor toma la seguridad en serio:</p>
|
|
<ul>
|
|
<li>
|
|
Validación estricta de paths de trabajo (previene
|
|
directory traversal)
|
|
</li>
|
|
<li>Lista blanca de usuarios permitidos</li>
|
|
<li>
|
|
Configuración automatizada de sudoers para systemctl
|
|
</li>
|
|
<li>Hardening de servicios systemd generados</li>
|
|
<li>Rate limiting en operaciones críticas</li>
|
|
</ul>
|
|
|
|
<h3>🎨 Dashboard Moderno</h3>
|
|
<p>
|
|
La interfaz web está construida con
|
|
<strong>Tailwind CSS</strong> en tema oscuro (#101922 de
|
|
fondo, #137fec como color primario). Incluye:
|
|
</p>
|
|
<ul>
|
|
<li>
|
|
<strong>/</strong> - Dashboard con estadísticas y lista
|
|
de apps
|
|
</li>
|
|
<li>
|
|
<strong>/scan</strong> - Escaneo de procesos activos
|
|
</li>
|
|
<li>
|
|
<strong>/select</strong> - Selección de procesos para
|
|
registrar
|
|
</li>
|
|
<li>
|
|
<strong>/register</strong> - Formulario de registro
|
|
manual
|
|
</li>
|
|
<li>
|
|
<strong>/logs</strong> - Visor de logs en tiempo real
|
|
</li>
|
|
<li>
|
|
<strong>/api-docs</strong> - Documentación completa de
|
|
la API
|
|
</li>
|
|
</ul>
|
|
|
|
<h2>¿Cómo Funciona?</h2>
|
|
|
|
<h3>Arquitectura Multi-Threaded</h3>
|
|
<p>
|
|
SIAX Monitor utiliza una arquitectura basada en tres
|
|
componentes principales:
|
|
</p>
|
|
|
|
<p><strong>1. Monitor en Background</strong></p>
|
|
<p>Un thread dedicado ejecuta cada 60 segundos para:</p>
|
|
<ul>
|
|
<li>
|
|
Recopilar métricas de CPU y RAM usando
|
|
<code>sysinfo</code>
|
|
</li>
|
|
<li>Reconciliar estados entre sysinfo y systemd</li>
|
|
<li>Reportar al cloud API de SIAX (opcional)</li>
|
|
</ul>
|
|
|
|
<p><strong>2. Servidor Web Unificado</strong></p>
|
|
<p>Un servidor HTTP en puerto 8080 que fusiona:</p>
|
|
<ul>
|
|
<li>API REST (JSON responses)</li>
|
|
<li>WebSocket para logs</li>
|
|
<li>Interfaz web HTML estática</li>
|
|
<li>Archivos estáticos (favicon, logos)</li>
|
|
</ul>
|
|
<p>
|
|
Esto elimina problemas de CORS al servir todo desde el mismo
|
|
origen.
|
|
</p>
|
|
|
|
<p><strong>3. Integración Systemd</strong></p>
|
|
<p>
|
|
El módulo <code>systemd_manager</code> genera archivos
|
|
<code>.service</code> automáticamente con:
|
|
</p>
|
|
<pre><code>[Unit]
|
|
Description=App gestionada por SIAX Monitor
|
|
After=network.target
|
|
|
|
[Service]
|
|
Type=simple
|
|
User=app-user
|
|
WorkingDirectory=/opt/app
|
|
ExecStart=/usr/bin/node server.js
|
|
Restart=always
|
|
RestartSec=10
|
|
StandardOutput=journal
|
|
StandardError=journal
|
|
|
|
[Install]
|
|
WantedBy=multi-user.target</code></pre>
|
|
|
|
<h2>Stack Tecnológico</h2>
|
|
<p>
|
|
El proyecto está construido sobre tecnologías modernas y
|
|
probadas:
|
|
</p>
|
|
<ul>
|
|
<li>
|
|
<strong>Rust</strong> - Lenguaje core (seguridad de
|
|
memoria, velocidad)
|
|
</li>
|
|
<li><strong>Tokio</strong> - Runtime asíncrono</li>
|
|
<li><strong>Axum 0.7</strong> - Framework web moderno</li>
|
|
<li><strong>Serde</strong> - Serialización JSON</li>
|
|
<li><strong>Sysinfo</strong> - Información del sistema</li>
|
|
<li>
|
|
<strong>Tower-HTTP</strong> - Middleware (CORS, static
|
|
files)
|
|
</li>
|
|
<li><strong>DashMap</strong> - HashMap thread-safe</li>
|
|
<li>
|
|
<strong>Tailwind CSS</strong> - Estilos del frontend
|
|
</li>
|
|
<li><strong>Material Symbols</strong> - Iconos</li>
|
|
</ul>
|
|
|
|
<h2>Ventajas y Consideraciones</h2>
|
|
|
|
<h3>✅ Ventajas</h3>
|
|
<ul>
|
|
<li>
|
|
<strong>Alto Rendimiento</strong>: Rust ofrece velocidad
|
|
cercana a C con seguridad de memoria garantizada
|
|
</li>
|
|
<li>
|
|
<strong>Ligero</strong>: Binario compilado de ~15MB,
|
|
consumo mínimo de RAM
|
|
</li>
|
|
<li>
|
|
<strong>Sin Dependencias</strong>: No requiere Node.js,
|
|
Python o base de datos
|
|
</li>
|
|
<li>
|
|
<strong>Integración Nativa</strong>: Aprovecha systemd y
|
|
journalctl del sistema
|
|
</li>
|
|
<li>
|
|
<strong>Fácil Despliegue</strong>: Single binary +
|
|
script de instalación
|
|
</li>
|
|
<li>
|
|
<strong>Open Source</strong>: Código auditable y
|
|
personalizable
|
|
</li>
|
|
</ul>
|
|
|
|
<h3>⚠️ Consideraciones</h3>
|
|
<ul>
|
|
<li>
|
|
<strong>Solo Linux + Systemd</strong>: Requiere
|
|
distribuciones con systemd (no macOS/Windows)
|
|
</li>
|
|
<li>
|
|
<strong>Permisos Sudo</strong>: Necesita configurar
|
|
sudoers para systemctl
|
|
</li>
|
|
<li>
|
|
<strong>Sin Métricas Históricas</strong>: No almacena
|
|
histórico, solo tiempo real
|
|
</li>
|
|
<li>
|
|
<strong>Solo Node.js y Python</strong>: Otros lenguajes
|
|
requieren extensión del código
|
|
</li>
|
|
<li>
|
|
<strong>Sin Autenticación</strong>: Diseñado para acceso
|
|
local/VPN, no exponer públicamente
|
|
</li>
|
|
</ul>
|
|
|
|
<h2>Casos de Uso</h2>
|
|
|
|
<h3>👔 Equipos DevOps</h3>
|
|
<p>
|
|
Gestión centralizada de microservicios en múltiples
|
|
servidores. El monitor actúa como worker node que reporta al
|
|
cloud API central, permitiendo visibilidad de toda la
|
|
infraestructura desde un solo panel.
|
|
</p>
|
|
|
|
<h3>💻 Desarrolladores</h3>
|
|
<p>
|
|
Monitoreo de aplicaciones en entornos de desarrollo y
|
|
staging sin la complejidad de herramientas enterprise.
|
|
Perfecto para proyectos pequeños a medianos que necesitan
|
|
control básico de servicios.
|
|
</p>
|
|
|
|
<h3>🖥️ Administradores de Sistemas</h3>
|
|
<p>
|
|
Control de servicios systemd con una interfaz web moderna.
|
|
Alternativa visual a comandos
|
|
<code>systemctl</code> repetitivos, con la ventaja de logs
|
|
centralizados y accesibles desde el navegador.
|
|
</p>
|
|
|
|
<h2>Instalación Rápida</h2>
|
|
<p>El proceso de instalación es extremadamente simple:</p>
|
|
<pre><code># Clonar el repositorio
|
|
git clone https://git.telcotronics.net/pablinux/SIAX-MONITOR.git
|
|
cd SIAX-MONITOR
|
|
|
|
# Compilar en modo release
|
|
cargo build --release
|
|
|
|
# Ejecutar instalador (crea usuario, configura sudoers, instala servicio)
|
|
sudo ./instalador.sh
|
|
|
|
# El servicio estará disponible en http://localhost:8080
|
|
</code></pre>
|
|
|
|
<p>
|
|
El script <code>instalador.sh</code> realiza
|
|
automáticamente:
|
|
</p>
|
|
<ul>
|
|
<li>Crear usuario del sistema <code>siax-agent</code></li>
|
|
<li>Configurar permisos sudoers para systemctl</li>
|
|
<li>Copiar binario a <code>/opt/siax-agent/</code></li>
|
|
<li>Instalar y habilitar servicio systemd</li>
|
|
<li>Verificar salud del servicio</li>
|
|
</ul>
|
|
|
|
<h2>Arquitectura de Despliegue</h2>
|
|
<p>
|
|
SIAX Monitor fue diseñado pensando en una arquitectura
|
|
distribuida:
|
|
</p>
|
|
<ul>
|
|
<li>
|
|
<strong>Cloud API</strong>:
|
|
<code>https://api.siax-system.net</code> - Panel central
|
|
de control
|
|
</li>
|
|
<li>
|
|
<strong>Worker Nodes</strong>: Agentes SIAX Monitor en
|
|
cada servidor
|
|
</li>
|
|
<li>
|
|
<strong>Comunicación</strong>: VPN segura entre workers
|
|
y cloud API
|
|
</li>
|
|
</ul>
|
|
<p>
|
|
Cada worker reporta cada 60 segundos su estado, permitiendo
|
|
monitoreo centralizado de toda la infraestructura sin
|
|
exponer puertos públicamente.
|
|
</p>
|
|
|
|
<h2>Conclusión</h2>
|
|
<p>
|
|
SIAX Monitor demuestra que no siempre necesitas soluciones
|
|
enterprise complejas para problemas simples. Con menos de
|
|
2,000 líneas de código Rust bien estructurado, ofrece
|
|
exactamente lo necesario para gestionar aplicaciones Node.js
|
|
y Python en producción.
|
|
</p>
|
|
<p>
|
|
La combinación de Rust + Systemd + WebSocket resulta en una
|
|
herramienta rápida, confiable y fácil de mantener. Es
|
|
perfecta para equipos pequeños o medianos que buscan
|
|
simplicidad sin sacrificar funcionalidad.
|
|
</p>
|
|
<p>
|
|
Si administras servidores Linux con aplicaciones Node.js o
|
|
Python, definitivamente vale la pena darle una oportunidad.
|
|
El código está disponible en
|
|
<a
|
|
href="https://git.telcotronics.net/pablinux/SIAX-MONITOR"
|
|
target="_blank"
|
|
class="text-primary hover:underline"
|
|
>Git Telcotronics</a
|
|
>
|
|
bajo licencia open source.
|
|
</p>
|
|
|
|
<blockquote>
|
|
"A veces la mejor solución no es la más compleja, sino la
|
|
que resuelve tu problema específico de la manera más
|
|
elegante posible." - Filosofía detrás de SIAX Monitor
|
|
</blockquote>
|
|
</div>
|
|
|
|
<!-- Article Footer -->
|
|
<footer class="mt-16 pt-8 border-t border-slate-800">
|
|
<div class="flex flex-wrap items-center justify-between gap-4">
|
|
<div class="flex items-center gap-3">
|
|
<div
|
|
class="w-12 h-12 rounded-full bg-primary/20 flex items-center justify-center"
|
|
>
|
|
<span class="material-symbols-outlined text-primary"
|
|
>person</span
|
|
>
|
|
</div>
|
|
<div>
|
|
<p class="text-white font-semibold">pablinux</p>
|
|
<p class="text-slate-400 text-sm">
|
|
DevOps Engineer · Rust Enthusiast
|
|
</p>
|
|
</div>
|
|
</div>
|
|
<div class="flex gap-3">
|
|
<a
|
|
href="https://git.telcotronics.net/pablinux/SIAX-MONITOR"
|
|
target="_blank"
|
|
class="inline-flex items-center gap-2 px-6 py-3 bg-primary hover:brightness-110 rounded-lg text-white font-semibold transition-all"
|
|
>
|
|
<span class="material-symbols-outlined text-sm"
|
|
>code</span
|
|
>
|
|
Ver en Git
|
|
</a>
|
|
<a
|
|
href="/api-docs"
|
|
class="inline-flex items-center gap-2 px-6 py-3 bg-slate-800 hover:bg-slate-700 rounded-lg text-white font-semibold transition-all"
|
|
>
|
|
<span class="material-symbols-outlined text-sm"
|
|
>description</span
|
|
>
|
|
Documentación
|
|
</a>
|
|
</div>
|
|
</div>
|
|
</footer>
|
|
|
|
<!-- Related Articles / Tags -->
|
|
<div
|
|
class="mt-12 p-6 rounded-2xl border border-slate-800 bg-[#0a0f16]"
|
|
>
|
|
<h3 class="text-lg font-bold text-white mb-4">Etiquetas</h3>
|
|
<div class="flex flex-wrap gap-2">
|
|
<span
|
|
class="px-3 py-1 rounded-full bg-slate-800 text-slate-300 text-sm hover:bg-slate-700 transition-colors cursor-pointer"
|
|
>rust</span
|
|
>
|
|
<span
|
|
class="px-3 py-1 rounded-full bg-slate-800 text-slate-300 text-sm hover:bg-slate-700 transition-colors cursor-pointer"
|
|
>systemd</span
|
|
>
|
|
<span
|
|
class="px-3 py-1 rounded-full bg-slate-800 text-slate-300 text-sm hover:bg-slate-700 transition-colors cursor-pointer"
|
|
>monitoring</span
|
|
>
|
|
<span
|
|
class="px-3 py-1 rounded-full bg-slate-800 text-slate-300 text-sm hover:bg-slate-700 transition-colors cursor-pointer"
|
|
>devops</span
|
|
>
|
|
<span
|
|
class="px-3 py-1 rounded-full bg-slate-800 text-slate-300 text-sm hover:bg-slate-700 transition-colors cursor-pointer"
|
|
>nodejs</span
|
|
>
|
|
<span
|
|
class="px-3 py-1 rounded-full bg-slate-800 text-slate-300 text-sm hover:bg-slate-700 transition-colors cursor-pointer"
|
|
>python</span
|
|
>
|
|
<span
|
|
class="px-3 py-1 rounded-full bg-slate-800 text-slate-300 text-sm hover:bg-slate-700 transition-colors cursor-pointer"
|
|
>websocket</span
|
|
>
|
|
<span
|
|
class="px-3 py-1 rounded-full bg-slate-800 text-slate-300 text-sm hover:bg-slate-700 transition-colors cursor-pointer"
|
|
>axum</span
|
|
>
|
|
<span
|
|
class="px-3 py-1 rounded-full bg-slate-800 text-slate-300 text-sm hover:bg-slate-700 transition-colors cursor-pointer"
|
|
>tokio</span
|
|
>
|
|
<span
|
|
class="px-3 py-1 rounded-full bg-slate-800 text-slate-300 text-sm hover:bg-slate-700 transition-colors cursor-pointer"
|
|
>linux</span
|
|
>
|
|
</div>
|
|
</div>
|
|
</article>
|
|
|
|
<!-- Footer -->
|
|
<footer class="bg-[#0a0f16] border-t border-slate-800 mt-20 py-12">
|
|
<div class="max-w-4xl mx-auto px-4 sm:px-6 lg:px-8">
|
|
<div class="text-center mb-6">
|
|
<h3 class="text-2xl font-bold text-white mb-2">
|
|
SIAX Monitor
|
|
</h3>
|
|
<p class="text-slate-400">
|
|
Sistema de Monitoreo y Gestión de Aplicaciones
|
|
</p>
|
|
</div>
|
|
<div class="flex justify-center gap-8 mb-6">
|
|
<a
|
|
href="https://git.telcotronics.net/pablinux/SIAX-MONITOR"
|
|
target="_blank"
|
|
class="text-slate-400 hover:text-primary transition-colors"
|
|
>Git</a
|
|
>
|
|
<a
|
|
href="/api-docs"
|
|
class="text-slate-400 hover:text-primary transition-colors"
|
|
>API Docs</a
|
|
>
|
|
<a
|
|
href="/"
|
|
class="text-slate-400 hover:text-primary transition-colors"
|
|
>Dashboard</a
|
|
>
|
|
</div>
|
|
<p class="text-slate-500 text-sm text-center">
|
|
© 2026 SIAX Monitor. Desarrollado con 🦀 Rust y ❤️ por la
|
|
comunidad
|
|
</p>
|
|
</div>
|
|
</footer>
|
|
</body>
|
|
</html>
|