You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
SysMon - Librería Multiplataforma de Monitoreo de Hardware
SysMon es una librería C moderna y eficiente para obtener información detallada del hardware y sistema en tiempo real. Soporte nativo completo para Linux, Windows y macOS con una sola API unificada.
🌍 SOPORTE MULTIPLATAFORMA COMPLETO
Plataforma
Estado
Implementación
APIs Nativas
🐧 Linux
✅ 100% Completo
Nativa
/proc, /sys, X11, ALSA
🪟 Windows
✅ 100% Completo
Nativa
WMI, Performance Counters, DirectX
🍎 macOS
✅ 100% Completo
Nativa
IOKit, Core Audio, Metal
🎯 Una Sola API - Tres Plataformas
// El mismo código funciona en Linux, Windows y macOS#include"ntdl.h"intmain()
{
sysmon_init();
floatcpu_usage=sysmon_get_cpu_usage_percent(); // Funciona en todasfloatram_usage=sysmon_get_ram_usage_percent(); // APIs nativasfloatcpu_temp=sysmon_get_cpu_temperature(); // por plataformaprintf("CPU: %.1f%%, RAM: %.1f%%, Temp: %.1f°C\n", cpu_usage, ram_usage, cpu_temp);
return0;
}
🚀 CARACTERÍSTICAS COMPLETAS
💻 CPU - Información Detallada
Modelo y Vendor: Detección automática en todas las plataformas
Núcleos: Físicos y lógicos (P-cores/E-cores en Intel 12th gen+)
# Con MinGW (cross-compilation desde Linux)
sudo apt install mingw-w64
make CC=x86_64-w64-mingw32-gcc PLATFORM=windows
# Con MSVC (en Windows)
cl /LD *.c /Fe:sysmon.dll advapi32.lib ole32.lib oleaut32.lib wbemuuid.lib
# Genera: sysmon.dll
🍎 macOS
# Con Xcode Command Line Tools
make CC=clang PLATFORM=macos
# Genera: libsysmon.dylib
🧪 TESTING MULTIPLATAFORMA
🔍 Test Automático
# Test que detecta automáticamente la plataformacd testing
python3 test_multiplatform.py
# Resultado esperado:# ✅ Plataforma detectada: LINUX/WINDOWS/MACOS# ✅ Librería cargada correctamente# ✅ Todos los componentes funcionando# ✅ Rendimiento < 50ms por consulta
📊 Tests Específicos
make python-linux # Test específico Linux
make python-win # Test específico Windows
make python-macos # Test específico macOS
make test# Test completo automático
💻 USO EN APLICACIONES
🎯 Integración Inmediata - Lista para Producción
🐍 Python - Multiplataforma
importctypesimportplatform# Detectar plataforma y cargar librería apropiadasystem=platform.system().lower()
ifsystem=="linux":
lib=ctypes.CDLL("./libsysmon.so")
elifsystem=="windows":
lib=ctypes.CDLL("./sysmon.dll")
elifsystem=="darwin": # macOSlib=ctypes.CDLL("./libsysmon.dylib")
# Configurar tipos de retornolib.sysmon_get_cpu_usage_percent.restype=ctypes.c_floatlib.sysmon_get_ram_usage_percent.restype=ctypes.c_floatlib.sysmon_get_cpu_temperature.restype=ctypes.c_float# Inicializarlib.sysmon_init()
# Obtener información (funciona en todas las plataformas)cpu_usage=lib.sysmon_get_cpu_usage_percent()
ram_usage=lib.sysmon_get_ram_usage_percent()
cpu_temp=lib.sysmon_get_cpu_temperature()
print(f"CPU: {cpu_usage:.1f}%")
print(f"RAM: {ram_usage:.1f}%")
print(f"Temp: {cpu_temp:.1f}°C")
lib.sysmon_cleanup()
constffi=require('ffi-napi');constos=require('os');// Detectar plataformaletlibPath;switch(os.platform()){case'linux': libPath='./libsysmon.so';break;case'win32': libPath='./sysmon.dll';break;case'darwin': libPath='./libsysmon.dylib';break;default: thrownewError('Plataforma no soportada');}// Cargar libreríaconstsysmon=ffi.Library(libPath,{'sysmon_init': ['int',[]],'sysmon_get_cpu_usage_percent': ['float',[]],'sysmon_get_ram_usage_percent': ['float',[]],'sysmon_cleanup': ['void',[]]});// Usar (funciona en todas las plataformas)sysmon.sysmon_init();constcpuUsage=sysmon.sysmon_get_cpu_usage_percent();constramUsage=sysmon.sysmon_get_ram_usage_percent();console.log(`CPU: ${cpuUsage.toFixed(1)}%`);console.log(`RAM: ${ramUsage.toFixed(1)}%`);sysmon.sysmon_cleanup();
⚡ Monitoreo en Tiempo Real
importtimeimportthreadingclassHardwareMonitor:
def__init__(self):
self.lib=ctypes.CDLL('./libsysmon.so')
self.lib.sysmon_init()
self.running=Falsedefstart_monitoring(self, callback, interval=1.0):
"""Inicia monitoreo en tiempo real callback: función que recibe los datos interval: intervalo en segundos (1.0 = 1Hz perfecto para gráficos) """self.running=Truedefmonitor_loop():
whileself.running:
data= {
'timestamp': time.time(),
'cpu_usage': self.lib.sysmon_get_cpu_usage_percent(),
'ram_usage': self.lib.sysmon_get_ram_usage_percent(),
'cpu_temp': self.lib.sysmon_get_cpu_temperature(),
'gpu_usage': self.lib.sysmon_get_gpu_usage_percent(),
'cpu_freq': self.lib.sysmon_get_cpu_frequency()
}
callback(data)
time.sleep(interval)
thread=threading.Thread(target=monitor_loop)
thread.daemon=Truethread.start()
returnthreaddefstop_monitoring(self):
self.running=False# Usar en tu aplicación de escritoriodefupdate_charts(data):
# Actualizar tus gráficos aquíprint(f"CPU: {data['cpu_usage']:.1f}% | RAM: {data['ram_usage']:.1f}% | Temp: {data['cpu_temp']:.1f}°C")
monitor=HardwareMonitor()
monitor.start_monitoring(update_charts, interval=1.0) # 1Hz
📊 API COMPLETA DISPONIBLE
🔧 Funciones Principales
Función
Descripción
Plataformas
Tipo Retorno
sysmon_init()
Inicializar librería
Linux/Win/Mac
int
sysmon_cleanup()
Limpiar recursos
Linux/Win/Mac
void
sysmon_get_cpu_usage_percent()
Uso CPU %
Linux/Win/Mac
float
sysmon_get_ram_usage_percent()
Uso RAM %
Linux/Win/Mac
float
sysmon_get_cpu_temperature()
Temperatura CPU °C
Linux/Win/Mac
float
sysmon_get_gpu_count()
Número de GPUs
Linux/Win/Mac
int
sysmon_get_disk_count()
Número de discos
Linux/Win/Mac
int
sysmon_get_sensor_count()
Número de sensores
Linux/Win/Mac
int
sysmon_battery_is_present()
Batería presente
Linux/Win/Mac
int
sysmon_get_display_count()
Número de pantallas
Linux/Win/Mac
int
🎯 Configuración de Tipos (Python)
# Configurar tipos de retorno para mejor rendimientolib.sysmon_get_cpu_usage_percent.restype=ctypes.c_floatlib.sysmon_get_ram_usage_percent.restype=ctypes.c_floatlib.sysmon_get_cpu_temperature.restype=ctypes.c_floatlib.sysmon_get_gpu_count.restype=ctypes.c_intlib.sysmon_battery_is_present.restype=ctypes.c_int
# Detecta automáticamente la plataforma
make
# O especificar plataforma manualmente
make PLATFORM=linux # Para Linux
make PLATFORM=windows # Para Windows (cross-compilation)
make PLATFORM=macos # Para macOS
make # Compilar para plataforma actual
make compile-lib # Solo compilar librería
./build_multiplatform.sh # Compilación automática multiplataforma
make clean # Limpiar archivos compilados
🧪 Testing
make test# Test completo automático
make python-linux # Test específico Linux
make python-win # Test específico Windows
make python-macos # Test específico macOScd testing && python3 test_multiplatform.py # Test manual
📊 Utilidades
make python-deps # Instalar dependencias Python
make verify # Verificar librería compilada
make help# Mostrar ayuda completa
🤝 CONTRIBUIR
🐛 Reportar Bugs
Especifica la plataforma (Linux/Windows/macOS)
Incluye versión del OS y arquitectura
Proporciona logs de compilación si es necesario
Incluye pasos para reproducir el error
🔧 Desarrollo
# 1. Fork el repositorio
git clone https://github.com/tu-usuario/sysmon.git
# 2. Crear rama para feature
git checkout -b feature/nueva-funcionalidad
# 3. Desarrollar y testear en las 3 plataformas
./build_multiplatform.sh
cd testing && python3 test_multiplatform.py
# 4. Commit y push
git commit -m "Add nueva funcionalidad"
git push origin feature/nueva-funcionalidad
# 5. Crear Pull Request
🧪 Testing Multiplataforma
# Verificar que funciona en todas las plataformas
make test# Linux
make python-win # Windows (cross-compilation)
make python-macos # macOS (si disponible)
# DLL no encontrada# Verificar que sysmon.dll esté en PATH o directorio actual# Símbolos no encontrados
dumpbin /EXPORTS sysmon.dll
# Dependencias
ldd sysmon.dll # Con MinGW
🍎 macOS
# Librería no carga
otool -L libsysmon.dylib
# Verificar arquitectura
file libsysmon.dylib
# Permisos de ejecución
chmod +x libsysmon.dylib