# monitor_data.py import psutil import subprocess import GPUtil import time def format_uptime(): uptime_seconds = time.time() - psutil.boot_time() days = int(uptime_seconds // 86400) hours = int((uptime_seconds % 86400) // 3600) minutes = int((uptime_seconds % 3600) // 60) return f"{days}d {hours:02d}h {minutes:02d}m" if days > 0 else f"{hours:02d}h {minutes:02d}m" def get_cpu_temp(): try: output = subprocess.check_output(['sensors'], universal_newlines=True) for line in output.splitlines(): if "Package id 0:" in line or "Core 0:" in line: temp_str = line.split(":")[1].strip().split("°")[0] return f"{float(temp_str)}°C" except Exception: return "---" def get_gpu_temp(): try: gpus = GPUtil.getGPUs() return f"{gpus[0].temperature}°C" if gpus else "---" except Exception: return "---" def get_gpu_usage(): try: gpus = GPUtil.getGPUs() return f"{gpus[0].load * 100:.1f}%" if gpus else "---" except Exception: return "---" def get_net_speed(interface='enp0s31f6', interval=1): try: start = psutil.net_io_counters(pernic=True)[interface] time.sleep(interval) end = psutil.net_io_counters(pernic=True)[interface] download = (end.bytes_recv - start.bytes_recv) / 1024 / interval upload = (end.bytes_sent - start.bytes_sent) / 1024 / interval return f"{download:.2f} KB/s", f"{upload:.2f} KB/s" except Exception: return "---", "---" def check_alive(ip="192.168.0.101"): try: result = subprocess.run(["ping", "-c", "1", "-W", "1", ip], stdout=subprocess.DEVNULL, stderr=subprocess.DEVNULL) return "True" if result.returncode == 0 else "False" except Exception: return "---" def get_monitor_data(): download, upload = get_net_speed() return { "CPU": f"{psutil.cpu_percent()}%", "RAM": f"{psutil.virtual_memory().percent}%", "Disk": f"{psutil.disk_usage('/').percent}%", "Uptime": format_uptime(), "CPU Temp": get_cpu_temp(), "GPU Temp": get_gpu_temp(), "GPU Usage": get_gpu_usage(), "Swap": f"{psutil.swap_memory().percent}%", "Download": download, "Upload": upload, "Alive": check_alive(), "Processes": str(len(psutil.pids())) }