Zulema Gutiérrez
← Todos los proyectos
Python

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.

PythonFastAPIWebSocketpsutilpytest
zulemagutierrez.com/monitor/

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

  1. 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.

  2. 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.

  3. Paso 3

    Descubre qué consume

    La tabla de procesos ordena lo que más CPU está usando, con su PID y su memoria.

  4. 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.

  5. 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.

  6. 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

  1. Sistema operativoCPU, memoria, red, discos, procesos
  2. Collectorpsutil, en un hilo aparte
  3. Hub · FastAPI1 lectura por segundo para todos
  4. 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/systemInformación fija del equipo
GET/api/metricsÚltima lectura completa
GET/api/historyÚltimos 2 minutos (CPU, RAM y red)
WS/ws/metricsUna lectura por segundo
GET/docsDocumentació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.

Siguiente proyecto → 🕹️ Zulema Gutiérrez · portfolio