Improve log output for installer
parent
6217bc71eb
commit
3f9265cf69
|
@ -10,15 +10,18 @@ import sys # Importar sys para leer los argumentos del script
|
|||
import logging # Importar el módulo logging
|
||||
|
||||
CONFIGS_DIR = "/tmp/oginstall"
|
||||
os.makedirs(CONFIGS_DIR, exist_ok=True)
|
||||
LOGS_DIR = "/var/log/oginstaller"
|
||||
|
||||
REPO_URL = "https://ognproject.evlt.uma.es/gitea/opengnsys/ogcore.git"
|
||||
|
||||
# Configurar logging
|
||||
# Configurar logging y directorio configuración
|
||||
try:
|
||||
if not os.path.exists(LOGS_DIR):
|
||||
os.makedirs(LOGS_DIR, exist_ok=True)
|
||||
LOG_FILE = os.path.join(LOGS_DIR, "oginstall.log")
|
||||
if not os.path.exists(CONFIGS_DIR):
|
||||
os.makedirs(CONFIGS_DIR, exist_ok=True) # Crear el directorio si no existe
|
||||
LOG_FILE = os.path.join(CONFIGS_DIR, "debug.log")
|
||||
os.makedirs(CONFIGS_DIR, exist_ok=True)
|
||||
|
||||
logging.basicConfig(
|
||||
filename=LOG_FILE,
|
||||
level=logging.DEBUG,
|
||||
|
@ -27,7 +30,7 @@ try:
|
|||
logging.debug("Inicio del programa") # Mensaje inicial para verificar que el log se crea
|
||||
except Exception as e:
|
||||
print(f"[ERROR] No se pudo configurar el logging: {e}")
|
||||
print(f"[ERROR] Verifica los permisos del directorio: {CONFIGS_DIR}")
|
||||
print(f"[ERROR] Verifica los permisos del directorio: {LOGS_DIR}")
|
||||
exit(1) # Salir si no se puede configurar el logging
|
||||
|
||||
def get_network_interfaces():
|
||||
|
@ -399,20 +402,16 @@ class InstallationProgressForm(npyscreen.FormBaseNew):
|
|||
self.progress_box.values.append(message)
|
||||
self.progress_box.display()
|
||||
|
||||
def update_log(self, log_lines):
|
||||
def update_log(self, new_line):
|
||||
"""Actualiza el log en tiempo real en la parte inferior."""
|
||||
# Limpiar caracteres especiales de las líneas del log
|
||||
cleaned_lines = [self._clean_text(line) for line in log_lines]
|
||||
self.log_box.values = cleaned_lines[-self.log_box.height:] # Mostrar solo las últimas líneas
|
||||
max_lines = 10 # Número máximo de líneas a mostrar
|
||||
self.log_box.values.append(new_line.strip()) # Agregar la nueva línea
|
||||
self.log_box.values = self.log_box.values[-max_lines:] # Mantener solo las últimas `max_lines` líneas
|
||||
self.log_box.display()
|
||||
|
||||
def _clean_text(self, text):
|
||||
"""Elimina caracteres especiales o no imprimibles del texto."""
|
||||
return ''.join(c if c.isprintable() else '?' for c in text)
|
||||
|
||||
def install_components_with_ui(form, components, selected_tag):
|
||||
"""Instala los componentes seleccionados mostrando el progreso y el log en tiempo real."""
|
||||
log_file_path = os.path.join(CONFIGS_DIR, "installation.log")
|
||||
log_file_path = os.path.join(LOGS_DIR, "installation.log")
|
||||
installed_packages = [] # Lista de paquetes instalados correctamente
|
||||
failed_packages = [] # Lista de paquetes que fallaron
|
||||
|
||||
|
@ -420,7 +419,8 @@ def install_components_with_ui(form, components, selected_tag):
|
|||
start_time = time.time()
|
||||
|
||||
try:
|
||||
with open(log_file_path, "w") as log_file:
|
||||
# Abrir el archivo de log en modo sin buffer
|
||||
with open(log_file_path, "w", buffering=1) as log_file: # Line-buffered mode
|
||||
total_packages = len(components)
|
||||
|
||||
# Hilo para leer el log en tiempo real
|
||||
|
@ -428,10 +428,10 @@ def install_components_with_ui(form, components, selected_tag):
|
|||
with open(log_file_path, "r") as log_reader:
|
||||
log_reader.seek(0, os.SEEK_END) # Ir al final del archivo
|
||||
while True:
|
||||
line = log_reader.readline()
|
||||
line = log_reader.readline() # Leer una nueva línea
|
||||
if line:
|
||||
form.update_log([line]) # Actualizar el log línea por línea
|
||||
time.sleep(0.1)
|
||||
form.update_log(line) # Actualizar el log en la interfaz
|
||||
#time.sleep(0.1) # Pequeña pausa para evitar uso excesivo de CPU
|
||||
|
||||
log_thread = threading.Thread(target=tail_log, daemon=True)
|
||||
log_thread.start()
|
||||
|
@ -443,12 +443,15 @@ def install_components_with_ui(form, components, selected_tag):
|
|||
# Crear una barra de progreso para el paquete
|
||||
install_command = f"DEBIAN_FRONTEND=noninteractive apt-get install -y {package}"
|
||||
process = subprocess.Popen(
|
||||
install_command, shell=True, text=True, stdout=log_file, stderr=log_file
|
||||
install_command, shell=True, text=True, stdout=log_file, stderr=log_file, bufsize=1 # Line-buffered
|
||||
)
|
||||
|
||||
# Esperar a que el proceso de instalación termine
|
||||
process.wait()
|
||||
|
||||
# Forzar el vaciado del buffer del archivo de log
|
||||
log_file.flush()
|
||||
|
||||
# Registrar errores en el archivo de registro
|
||||
if process.returncode != 0:
|
||||
error_message = f"Error al instalar el paquete {package}. Consulta el archivo de registro: {log_file_path}"
|
||||
|
@ -463,10 +466,13 @@ def install_components_with_ui(form, components, selected_tag):
|
|||
form.update_progress("Instalando paquete adicional: ogclient")
|
||||
install_command = "DEBIAN_FRONTEND=noninteractive apt-get install -y ogclient"
|
||||
process = subprocess.Popen(
|
||||
install_command, shell=True, text=True, stdout=log_file, stderr=log_file
|
||||
install_command, shell=True, text=True, stdout=log_file, stderr=log_file, bufsize=1 # Line-buffered
|
||||
)
|
||||
process.wait()
|
||||
|
||||
# Forzar el vaciado del buffer del archivo de log
|
||||
log_file.flush()
|
||||
|
||||
if process.returncode != 0:
|
||||
error_message = f"Error al instalar el paquete ogclient. Consulta el archivo de registro: {log_file_path}"
|
||||
form.update_progress(error_message)
|
||||
|
|
Loading…
Reference in New Issue