# frozen_string_literal: true # ========================================================== # FILE: core/globals.rb # ========================================================== # --- CONSTANTES GLOBALES DEL SCRIPT --- APP_NOM_BASE = 'dtic-BKPs' APP_NOM = "#{APP_NOM_BASE}_app.rb" APP_VER = 'v5.5.1' # Actualizado APP_AUTOR = "Ricardo MONLA ( rmonla@ )" APP_DIR_SCRIPT = File.dirname(File.expand_path(__FILE__)) APP_CFG_NOM_ARCHIVO = "#{APP_NOM_BASE}_tasks.rb" APP_LOG_NOM_ARCHIVO = "../logs/#{APP_NOM_BASE}.log" APP_CFG_RUTA_ARCHIVO = File.join(APP_DIR_SCRIPT, APP_CFG_NOM_ARCHIVO) APP_LOG_RUTA_ARCHIVO = File.join(APP_DIR_SCRIPT, APP_LOG_NOM_ARCHIVO) # --- COLORES E ICONOS GLOBALES --- RESET = "\e[0m"; NEGRITA = "\e[1m"; SUBRAYADO="\e[4m"; INTERMITENTE = "\e[5m" CIAN = "\e[96m"; AMARILLO = "\e[93m"; ROJO = "\e[91m"; VERDE = "\e[92m" ICONO_OK = "#{VERDE}✔#{RESET}"; ICONO_ERROR = "#{ROJO}✖#{RESET}"; ICONO_WARN = "#{AMARILLO}⚠#{RESET}"; ICONO_INFO = "#{CIAN}ℹ#{RESET}" # --- CONFIGURACIÓN GLOBAL --- # Bloque para configurar el logger directamente aquí require 'logger' # Asegúrate de que Logger esté cargado $logger = Logger.new(APP_LOG_RUTA_ARCHIVO, 'daily') $logger.level = Logger::INFO # Puedes ajustar el nivel de log aquí $logger.formatter = proc do |severity, datetime, progname, msg| "[#{datetime.strftime('%Y-%m-%d %H:%M:%S')}] [#{severity}] #{msg}\n" end $estadisticas_ejecucion = { tareas_completadas: {} } # --- FUNCIÓN DE LOGGING GLOBAL --- def log(nivel, mensaje) # Usa esta expresión regular más robusta para eliminar códigos ANSI msg_l = mensaje.gsub(/\e\[(?:\d{1,3}(?:;\d{1,3})*)?[m|K]/, '') case nivel when :info then $logger.info(msg_l) when :error then $logger.error(msg_l) when :warn then $logger.warn(msg_l) else $logger.debug(msg_l) end end # Función auxiliar para verificar si un comando existe def which(cmd) exts = ENV['PATHEXT'] ? ENV['PATHEXT'].split(';') : [''] ENV['PATH'].split(File::PATH_SEPARATOR).each do |path| exts.each { |ext| exe = File.join(path, "#{cmd}#{ext}") return exe if File.executable?(exe) && !File.directory?(exe) } end nil end