mirror of
https://github.com/koloideal/Argenta.git
synced 2026-06-10 18:15:28 +03:00
122 lines
2.9 KiB
Python
122 lines
2.9 KiB
Python
__all__ = ["SystemInfo", "get_system_info"]
|
|
|
|
import platform
|
|
import sys
|
|
from dataclasses import dataclass
|
|
|
|
import cpuinfo
|
|
import psutil
|
|
|
|
|
|
@dataclass(frozen=True, slots=True)
|
|
class OSInfo:
|
|
name: str
|
|
kernel_version: str
|
|
|
|
|
|
@dataclass(frozen=True, slots=True)
|
|
class CPUInfo:
|
|
name: str
|
|
architecture: str
|
|
physical_cores: int
|
|
logical_cores: int
|
|
max_frequency: float
|
|
|
|
|
|
@dataclass(frozen=True, slots=True)
|
|
class MemoryInfo:
|
|
total_ram: float # in GB
|
|
used_ram: float # in GB
|
|
available_ram: float # in GB
|
|
|
|
|
|
@dataclass(frozen=True, slots=True)
|
|
class PythonInfo:
|
|
version: str
|
|
implementation: str
|
|
compiler: str
|
|
|
|
|
|
def get_os_info() -> OSInfo:
|
|
system = platform.system()
|
|
|
|
if system == "Windows":
|
|
ver = sys.getwindowsversion()
|
|
kernel_version = f"{ver.major}.{ver.minor}.{ver.build}"
|
|
|
|
if ver.build >= 22000:
|
|
product_name = "Windows 11"
|
|
else:
|
|
product_name = "Windows 10"
|
|
|
|
return OSInfo(
|
|
name=product_name,
|
|
kernel_version=kernel_version,
|
|
)
|
|
elif system == "Darwin":
|
|
return OSInfo(kernel_version=platform.release(), name=f"macOS {platform.mac_ver()[0]}")
|
|
else:
|
|
return OSInfo(kernel_version=platform.release(), name=platform.system())
|
|
|
|
|
|
def get_cpu_info() -> CPUInfo:
|
|
cpu_info = cpuinfo.get_cpu_info()
|
|
cpu_name = cpu_info["brand_raw"]
|
|
cpu_architecture = cpu_info["arch"]
|
|
cpu_physical_cores = psutil.cpu_count(logical=False) or 0
|
|
cpu_logical_cores = psutil.cpu_count(logical=True) or 0
|
|
|
|
cpu_freq = psutil.cpu_freq()
|
|
cpu_max_frequency = cpu_freq.max
|
|
|
|
return CPUInfo(
|
|
name=cpu_name,
|
|
architecture=cpu_architecture,
|
|
physical_cores=cpu_physical_cores,
|
|
logical_cores=cpu_logical_cores,
|
|
max_frequency=cpu_max_frequency,
|
|
)
|
|
|
|
|
|
def get_memory_info() -> MemoryInfo:
|
|
mem = psutil.virtual_memory()
|
|
total_ram = round(mem.total / (1024**3), 2)
|
|
used_ram = round(mem.used / (1024**3), 2)
|
|
available_ram = round(mem.available / (1024**3), 2)
|
|
|
|
return MemoryInfo(
|
|
total_ram=total_ram,
|
|
used_ram=used_ram,
|
|
available_ram=available_ram,
|
|
)
|
|
|
|
|
|
def get_python_info() -> PythonInfo:
|
|
python_version = platform.python_version()
|
|
python_implementation = platform.python_implementation()
|
|
python_compiler = platform.python_compiler()
|
|
return PythonInfo(
|
|
version=python_version, implementation=python_implementation, compiler=python_compiler
|
|
)
|
|
|
|
|
|
@dataclass(frozen=True, slots=True)
|
|
class SystemInfo:
|
|
os_info: OSInfo
|
|
cpu_info: CPUInfo
|
|
memory_info: MemoryInfo
|
|
python_info: PythonInfo
|
|
|
|
|
|
def get_system_info() -> SystemInfo:
|
|
os_info = get_os_info()
|
|
cpu_info = get_cpu_info()
|
|
memory_info = get_memory_info()
|
|
python_info = get_python_info()
|
|
return SystemInfo(
|
|
os_info=os_info,
|
|
cpu_info=cpu_info,
|
|
memory_info=memory_info,
|
|
python_info=python_info,
|
|
)
|