Agregar logging estructurado, try-catches y envío de errores por Telegram
- Agregado logging estructurado en todos los módulos - Implementados try-catches en todos los métodos críticos - Errores ahora se envían automáticamente por Telegram - Mejorado manejo de excepciones en requests HTTP - Agregado try-catch global en main.py para errores no manejados - Logging detallado en timenet_manager, telegram_bot, google_calendar y config_parser
This commit is contained in:
@@ -1,8 +1,11 @@
|
||||
import json, os
|
||||
import logging
|
||||
from app import arg_parser
|
||||
|
||||
args = arg_parser.ArgParser().parse()
|
||||
|
||||
logger = logging.getLogger(__name__)
|
||||
|
||||
|
||||
class ConfigParser:
|
||||
config = None
|
||||
@@ -11,22 +14,71 @@ class ConfigParser:
|
||||
self.loadConfig()
|
||||
|
||||
def loadConfig(self):
|
||||
ROOT_DIR = os.path.dirname(os.path.abspath(__file__))
|
||||
path = os.path.join(ROOT_DIR, '../config.json')
|
||||
try:
|
||||
ROOT_DIR = os.path.dirname(os.path.abspath(__file__))
|
||||
path = os.path.join(ROOT_DIR, '../config.json')
|
||||
logger.info(f"Ruta base del config: {path}")
|
||||
|
||||
if args.config:
|
||||
path = args.config
|
||||
if args.config:
|
||||
path = args.config
|
||||
logger.info(f"Usando ruta de config personalizada: {path}")
|
||||
|
||||
with open(path, 'r') as f:
|
||||
self.config = json.load(f)
|
||||
if not os.path.exists(path):
|
||||
error_msg = f"Archivo de configuración no encontrado: {path}"
|
||||
logger.error(error_msg)
|
||||
raise FileNotFoundError(error_msg)
|
||||
|
||||
if args.geoLatitude:
|
||||
self.config['geo']['latitude'] = args.geoLatitude
|
||||
if args.geoLongitude:
|
||||
self.config['geo']['longitude'] = args.geoLongitude
|
||||
if args.user:
|
||||
self.config['user'] = args.user
|
||||
if args.geoAccuracy:
|
||||
self.config['geo']['accuracy'] = args.geoAccuracy
|
||||
logger.info(f"Cargando configuración desde: {path}")
|
||||
with open(path, 'r', encoding='utf-8') as f:
|
||||
try:
|
||||
self.config = json.load(f)
|
||||
logger.info("Configuración cargada correctamente")
|
||||
except json.JSONDecodeError as e:
|
||||
error_msg = f"Error al parsear JSON del archivo de configuración: {str(e)}"
|
||||
logger.error(error_msg, exc_info=True)
|
||||
raise ValueError(error_msg)
|
||||
|
||||
return self.config
|
||||
# Validar estructura básica
|
||||
if not isinstance(self.config, dict):
|
||||
error_msg = "El archivo de configuración no contiene un objeto JSON válido"
|
||||
logger.error(error_msg)
|
||||
raise ValueError(error_msg)
|
||||
|
||||
# Aplicar overrides de argumentos
|
||||
try:
|
||||
if args.geoLatitude:
|
||||
if 'geo' not in self.config:
|
||||
self.config['geo'] = {}
|
||||
self.config['geo']['latitude'] = args.geoLatitude
|
||||
logger.info(f"Latitud sobrescrita por argumento: {args.geoLatitude}")
|
||||
|
||||
if args.geoLongitude:
|
||||
if 'geo' not in self.config:
|
||||
self.config['geo'] = {}
|
||||
self.config['geo']['longitude'] = args.geoLongitude
|
||||
logger.info(f"Longitud sobrescrita por argumento: {args.geoLongitude}")
|
||||
|
||||
if args.user:
|
||||
self.config['user'] = args.user
|
||||
logger.info(f"Usuario sobrescrito por argumento: {args.user}")
|
||||
|
||||
if args.geoAccuracy:
|
||||
if 'geo' not in self.config:
|
||||
self.config['geo'] = {}
|
||||
self.config['geo']['accuracy'] = args.geoAccuracy
|
||||
logger.info(f"Precisión geográfica sobrescrita por argumento: {args.geoAccuracy}")
|
||||
except Exception as e:
|
||||
logger.warning(f"Error al aplicar overrides de argumentos: {str(e)}")
|
||||
|
||||
logger.info("Configuración procesada correctamente")
|
||||
return self.config
|
||||
except FileNotFoundError as e:
|
||||
logger.error(f"Archivo de configuración no encontrado: {str(e)}", exc_info=True)
|
||||
raise
|
||||
except json.JSONDecodeError as e:
|
||||
logger.error(f"Error de sintaxis JSON en configuración: {str(e)}", exc_info=True)
|
||||
raise
|
||||
except Exception as e:
|
||||
error_msg = f"Error inesperado al cargar configuración: {str(e)}"
|
||||
logger.error(error_msg, exc_info=True)
|
||||
raise
|
||||
Reference in New Issue
Block a user