import getpass import platform import re import socket import subprocess from datetime import datetime from raveos_center import rendszerinfo TARTALOM = [ "rendszer: RaveOS verzió, kernel, asztali környezet", "hardver: processzor, memória, videokártya, hálózati és hangeszközök, lemezek", "illesztőprogramok: betöltött GPU modulok", "csomagok: RaveOS csomagok és a telepített csomagok száma", "hibák: hibás szolgáltatások és a rendszernapló hibái az utolsó indítás óta", "lemezhasználat és fájlrendszer", ] KITAKARAS = "IP- és MAC-címek, lemez UUID-k, egyedi azonosítók, a gép neve és a felhasználóneved" def _ki(parancs, ido=30): try: k = subprocess.run(parancs, capture_output=True, text=True, timeout=ido) except (OSError, subprocess.TimeoutExpired): return "(nem elérhető)" return (k.stdout or k.stderr or "").rstrip() or "(üres)" def _szakasz(cim, tartalom): return f"== {cim} ==\n{tartalom}\n" def kitakar(szoveg): szoveg = re.sub(r"\b(\d{1,3}\.){3}\d{1,3}\b", "[ip]", szoveg) szoveg = re.sub(r"\b([0-9a-fA-F]{2}:){5}[0-9a-fA-F]{2}\b", "[mac]", szoveg) szoveg = re.sub(r"\b([0-9a-fA-F]{1,4}:){7}[0-9a-fA-F]{1,4}\b", "[ip6]", szoveg) szoveg = re.sub(r"\b([0-9a-fA-F]{1,4}:){1,6}:([0-9a-fA-F]{1,4}(:[0-9a-fA-F]{1,4})*)?", "[ip6]", szoveg) szoveg = re.sub(r"[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12}", "[uuid]", szoveg) szoveg = re.sub(r"\b[0-9a-fA-F]{32}\b", "[id]", szoveg) szoveg = re.sub(r"(?i)\b(pass(word)?|passwd|token|secret|api[_-]?key|auth)(\s*[=:]\s*)\S+", r"\1\3[titok]", szoveg) gep = socket.gethostname() if gep and len(gep) > 1: szoveg = re.sub(rf"\b{re.escape(gep)}\b", "[gep]", szoveg) felhasznalo = getpass.getuser() if felhasznalo and felhasznalo != "root" and len(felhasznalo) > 1: szoveg = re.sub(rf"\b{re.escape(felhasznalo)}\b", "[user]", szoveg) return szoveg def jelentes(): reszek = [ f"RaveOS Center diagnosztika\n{datetime.now():%Y-%m-%d %H:%M}\n", _szakasz( "rendszer", f"verzio: {rendszerinfo.raveos_verzio()}\nkernel: {platform.release()}\n" f"asztal: {rendszerinfo.asztal()}\nuzemido: {rendszerinfo.uzemido()}", ), _szakasz( "hardver", f"processzor: {rendszerinfo.cpu()}\nmemoria: {rendszerinfo.memoria()}\n" + _ki(["sh", "-c", "lspci -nn | grep -iE 'vga|3d|display|ethernet|network|wireless|audio'"]) + "\n" + _ki(["lsblk", "-d", "-n", "-e", "7,11", "-o", "NAME,SIZE,MODEL,TRAN,ROTA"]), ), _szakasz("illesztoprogramok", ", ".join(rendszerinfo.gpu_driverek()) or "(nincs)"), _szakasz( "csomagok", _ki(["sh", "-c", "pacman -Q | grep -E '^(raveos|calamares|linux|mesa|nvidia)'"]) + f"\nosszes: {_ki(['sh', '-c', 'pacman -Qq | wc -l'])}", ), _szakasz("hibas szolgaltatasok", _ki(["systemctl", "--failed", "--no-legend", "--no-pager"])), _szakasz("rendszernaplo hibai", _ki(["journalctl", "-b", "-p", "err", "-n", "150", "--no-pager"])), _szakasz("lemez", _ki(["df", "-h", "/", "/home"]) + f"\nfajlrendszer: {rendszerinfo.fajlrendszer()}"), ] return kitakar("\n".join(reszek)) def rendszer_osszegzes(): return { "RaveOS": rendszerinfo.raveos_verzio(), "Kernel": platform.release(), "Asztal": rendszerinfo.asztal(), "GPU": ", ".join(rendszerinfo.gpuk()) or "ismeretlen", }