Refactor meminfo (#4698)

This commit is contained in:
codefiles 2026-08-10 23:23:29 -04:00 committed by GitHub
parent d571283d69
commit f4e0d4cf66
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
2 changed files with 28 additions and 35 deletions

View File

@ -1,4 +1,5 @@
import os
from dataclasses import dataclass
from enum import Enum, StrEnum
from functools import cached_property
from pathlib import Path
@ -163,25 +164,6 @@ class _SysInfo:
return cpu
@cached_property
def mem_info(self) -> dict[str, int]:
"""
Returns system memory information
"""
mem_info_path = Path('/proc/meminfo')
mem_info: dict[str, int] = {}
with mem_info_path.open() as file:
for line in file:
key, value = line.strip().split(':')
num = value.split()[0]
mem_info[key] = int(num)
return mem_info
def mem_info_by_key(self, key: str) -> int:
return self.mem_info[key]
@cached_property
def loaded_modules(self) -> list[str]:
"""
@ -273,18 +255,6 @@ class SysInfo:
except FileNotFoundError:
return None
@staticmethod
def mem_available() -> int:
return _sys_info.mem_info_by_key('MemAvailable')
@staticmethod
def mem_free() -> int:
return _sys_info.mem_info_by_key('MemFree')
@staticmethod
def mem_total() -> int:
return _sys_info.mem_info_by_key('MemTotal')
@staticmethod
def virtualization() -> str | None:
try:
@ -340,3 +310,26 @@ class SysInfo:
return True
return False
@dataclass(frozen=True)
class MemInfo:
mem_total: int
mem_free: int
mem_available: int
def read_meminfo() -> MemInfo:
data: dict[str, int] = {}
with Path('/proc/meminfo').open() as file:
for line in file:
key, _, remainder = line.partition(':')
num, _, _ = remainder.strip().partition(' ')
data[key] = int(num)
return MemInfo(
mem_total=data['MemTotal'],
mem_free=data['MemFree'],
mem_available=data['MemAvailable'],
)

View File

@ -10,7 +10,7 @@ from pathlib import Path
from archinstall.lib.args import ArchConfigHandler, SubCommand
from archinstall.lib.disk.utils import disk_layouts
from archinstall.lib.hardware import SysInfo
from archinstall.lib.hardware import MemInfo, SysInfo, read_meminfo
from archinstall.lib.log import debug, error, info, logger, share_install_log, warn
from archinstall.lib.menu.helpers import Confirmation
from archinstall.lib.network.wifi_handler import WifiHandler
@ -23,11 +23,11 @@ from archinstall.tui.components import tui
from archinstall.tui.menu_item import MenuItemGroup
def _log_sys_info() -> None:
def _log_sys_info(meminfo: MemInfo) -> None:
# Log various information about hardware before starting the installation. This might assist in troubleshooting
debug(f'Hardware model detected: {SysInfo.sys_vendor()} {SysInfo.product_name()}; UEFI mode: {SysInfo.has_uefi()}')
debug(f'Processor model detected: {SysInfo.cpu_model()}')
debug(f'Memory statistics: {SysInfo.mem_available()} available out of {SysInfo.mem_total()} total installed')
debug(f'Memory statistics: {meminfo.mem_available} kB available out of {meminfo.mem_total} kB total installed')
debug(f'Virtualization detected: {SysInfo.virtualization()}; is VM: {SysInfo.is_vm()}')
debug(f'Graphics devices detected: {SysInfo._graphics_devices().keys()}')
@ -138,7 +138,7 @@ def run() -> int:
translation_handler.save_console_font()
_log_sys_info()
_log_sys_info(read_meminfo())
if not arch_config_handler.args.offline:
if not arch_config_handler.args.skip_wifi_check: