ZulemaOS Monitor
Monitor de sistema en tiempo real hecho con Python, FastAPI y psutil, con una interfaz web retro y dos ayudantes muy especiales: Thor y Hela, mis gatos, que reaccionan a la carga de la CPU.
En pocas palabras
- 1 lectura/s
- por WebSocket a todos los navegadores a la vez
- 6 paneles
- CPU, memoria, red, discos, procesos y sistema
- 2 sistemas
- tests en CI en Windows y Linux
- 0 librerías
- en la interfaz: las gráficas se dibujan a mano
Cómo se usa
-
Paso 1
Abre la demo
En la web funciona con datos simulados (el hosting no puede ejecutar Python), con la misma forma que los reales. Todo se actualiza una vez por segundo.
-
Paso 2
Lee la CPU
Gráfica de los últimos 2 minutos y una barra por cada núcleo, que cambia de color con la carga.
-
Paso 3
Descubre qué consume
La tabla de procesos ordena lo que más CPU está usando, con su PID y su memoria.
-
Paso 4
Mira a Thor y Hela
Duermen la siesta si el PC está tranquilo, pasean con carga media y corren por toda la casa cuando la CPU se dispara.
-
Paso 5
Conéctalo a tu PC
Arranca el servidor en tu ordenador (los comandos están abajo) y pulsa Conectar a mi PC: la demo pasa a enseñar tus datos reales.
-
Paso 6
También en el móvil
Los paneles se reordenan en una columna.
Qué incluye
Tiempo real
WebSocket: sin preguntar cada segundo.
Gráficas propias
Dibujadas en canvas, sin librerías.
Thor y Hela
Pixel-art que reacciona a la CPU.
Solo en tu equipo
Escucha en 127.0.0.1 y CORS cerrado.
Modo demo
Datos simulados con la forma real.
API documentada
REST + WebSocket, con /docs.
Cómo está hecho
- Sistema operativoCPU, memoria, red, discos, procesos
- Collectorpsutil, en un hilo aparte
- Hub · FastAPI1 lectura por segundo para todos
- NavegadoresWebSocket /ws/metrics · REST /api
Decisiones técnicas
Un único recolector compartido
El % de CPU se calcula respecto a la lectura anterior: si cada navegador pidiera la suya, se pisarían. El Hub toma una lectura por segundo y la reparte a todos.
WebSocket en vez de preguntar
El servidor envía los datos en cuanto los tiene, sin que el navegador repita peticiones HTTP cada segundo.
psutil en un hilo aparte
Las lecturas bloquean; con asyncio.to_thread no congelan el servidor asíncrono.
Solo escucha en tu equipo
La lista de procesos es información sensible: el servidor solo acepta conexiones de 127.0.0.1 y el CORS solo permite a la propia interfaz y a mi portfolio.
Modo demo con la forma real
Un generador de datos simulados con exactamente la misma estructura, para poder enseñarlo en una web estática.
API
| GET | /api/system | Información fija del equipo |
| GET | /api/metrics | Última lectura completa |
| GET | /api/history | Últimos 2 minutos (CPU, RAM y red) |
| WS | /ws/metrics | Una lectura por segundo |
| GET | /docs | Documentación interactiva de FastAPI |
Calidad y tests
- Tests con pytest: forma y rangos de las lecturas, cálculos propios (velocidad de red y % de CPU por proceso), API REST, WebSocket y CORS.
- GitHub Actions los ejecuta en Windows y Linux en cada cambio.
- La interfaz no usa librerías: gráficas en
<canvas>y gatos definidos como texto.
Pruébalo en tu ordenador
git clone https://github.com/Zulema1904/zulemaos-monitor.git
cd zulemaos-monitor
python -m venv .venv
.venv\Scripts\activate # en Linux o Mac: source .venv/bin/activate
pip install -r requirements.txt
python -m monitor # abre http://127.0.0.1:8000
¿Hablamos?
Si quieres saber más de este proyecto o de cómo trabajo, escríbeme.