74 lines
2.1 KiB
Python
Executable File
74 lines
2.1 KiB
Python
Executable File
"""
|
|
Router pour les statistiques système
|
|
Fournit les métriques RAM et CPU du serveur IPWatch
|
|
"""
|
|
from fastapi import APIRouter
|
|
import psutil
|
|
from datetime import datetime
|
|
|
|
router = APIRouter(prefix="/api/system", tags=["system"])
|
|
|
|
|
|
@router.get("/stats")
|
|
async def get_system_stats():
|
|
"""
|
|
Récupère les statistiques système du serveur IPWatch
|
|
|
|
Returns:
|
|
dict: Statistiques RAM et CPU
|
|
- ram_percent: Pourcentage de RAM utilisée
|
|
- ram_used: RAM utilisée en MB
|
|
- ram_total: RAM totale en MB
|
|
- ram_available: RAM disponible en MB
|
|
- cpu_percent: Pourcentage d'utilisation CPU
|
|
- cpu_count: Nombre de cœurs CPU
|
|
- timestamp: Horodatage de la mesure
|
|
"""
|
|
# Statistiques mémoire
|
|
memory = psutil.virtual_memory()
|
|
|
|
# Statistiques CPU (moyenne sur 1 seconde)
|
|
cpu_percent = psutil.cpu_percent(interval=1)
|
|
|
|
# Informations processus IPWatch
|
|
process = psutil.Process()
|
|
process_memory = process.memory_info()
|
|
|
|
return {
|
|
# RAM système
|
|
"ram_percent": round(memory.percent, 1),
|
|
"ram_used": round(memory.used / (1024 * 1024), 1), # MB
|
|
"ram_total": round(memory.total / (1024 * 1024), 1), # MB
|
|
"ram_available": round(memory.available / (1024 * 1024), 1), # MB
|
|
|
|
# CPU système
|
|
"cpu_percent": round(cpu_percent, 1),
|
|
"cpu_count": psutil.cpu_count(),
|
|
|
|
# Processus IPWatch
|
|
"process_ram_mb": round(process_memory.rss / (1024 * 1024), 1), # MB
|
|
"process_cpu_percent": round(process.cpu_percent(interval=0.1), 1),
|
|
|
|
# Timestamp
|
|
"timestamp": datetime.now().isoformat()
|
|
}
|
|
|
|
|
|
@router.get("/uptime")
|
|
async def get_uptime():
|
|
"""
|
|
Récupère l'uptime du système
|
|
|
|
Returns:
|
|
dict: Informations sur l'uptime
|
|
"""
|
|
import time
|
|
boot_time = psutil.boot_time()
|
|
uptime_seconds = time.time() - boot_time
|
|
|
|
return {
|
|
"uptime_seconds": int(uptime_seconds),
|
|
"uptime_hours": round(uptime_seconds / 3600, 1),
|
|
"boot_time": datetime.fromtimestamp(boot_time).isoformat()
|
|
}
|