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:
@@ -2,37 +2,86 @@ from app import config_parser
|
||||
import telegram
|
||||
from importlib.metadata import version
|
||||
import asyncio
|
||||
import logging
|
||||
|
||||
config = config_parser.ConfigParser().loadConfig()
|
||||
|
||||
logger = logging.getLogger(__name__)
|
||||
|
||||
class telegramBot:
|
||||
bot = None
|
||||
|
||||
async def sendMessage(self, message):
|
||||
ver = version("python-telegram-bot")
|
||||
major = int(ver.split(".")[0])
|
||||
try:
|
||||
logger.info(f"Preparando envío de mensaje por Telegram (longitud: {len(str(message))} caracteres)")
|
||||
|
||||
ver = version("python-telegram-bot")
|
||||
major = int(ver.split(".")[0])
|
||||
logger.info(f"Versión de python-telegram-bot: {ver} (major: {major})")
|
||||
|
||||
token = config.get("telegram", {}).get("token")
|
||||
chat_id = config.get("telegram", {}).get("chat_id")
|
||||
|
||||
if not token:
|
||||
error_msg = "Token de Telegram no configurado"
|
||||
logger.error(error_msg)
|
||||
print(f"Error: {error_msg}")
|
||||
return
|
||||
|
||||
if not chat_id:
|
||||
error_msg = "Chat ID de Telegram no configurado"
|
||||
logger.error(error_msg)
|
||||
print(f"Error: {error_msg}")
|
||||
return
|
||||
|
||||
token = config["telegram"]["token"]
|
||||
chat_id = config["telegram"]["chat_id"]
|
||||
# --------------------
|
||||
# PTB v20+ (async)
|
||||
# --------------------
|
||||
if major >= 20:
|
||||
logger.info("Usando API async de python-telegram-bot v20+")
|
||||
try:
|
||||
self.bot = telegram.Bot(token)
|
||||
await self.bot.send_message(chat_id=chat_id, text=str(message))
|
||||
logger.info("Mensaje enviado correctamente por Telegram (v20+)")
|
||||
return
|
||||
except telegram.error.TelegramError as e:
|
||||
error_msg = f"Error de Telegram API al enviar mensaje (v20+): {str(e)}"
|
||||
logger.error(error_msg, exc_info=True)
|
||||
print(f"Error: {error_msg}")
|
||||
raise
|
||||
except Exception as e:
|
||||
error_msg = f"Error inesperado al enviar mensaje por Telegram (v20+): {str(e)}"
|
||||
logger.error(error_msg, exc_info=True)
|
||||
print(f"Error: {error_msg}")
|
||||
raise
|
||||
|
||||
# --------------------
|
||||
# PTB v20+ (async)
|
||||
# --------------------
|
||||
if major >= 20:
|
||||
self.bot = telegram.Bot(token)
|
||||
await self.bot.send_message(chat_id=chat_id, text=str(message))
|
||||
return
|
||||
# --------------------
|
||||
# PTB v12/v13 (sync)
|
||||
# --------------------
|
||||
else:
|
||||
logger.info("Usando API sync de python-telegram-bot v12/v13")
|
||||
try:
|
||||
self.bot = telegram.Bot(token)
|
||||
|
||||
# --------------------
|
||||
# PTB v12/v13 (sync)
|
||||
# --------------------
|
||||
else:
|
||||
self.bot = telegram.Bot(token)
|
||||
|
||||
# ejecuta el método sync en un hilo para no romper asyncio.run()
|
||||
loop = asyncio.get_running_loop()
|
||||
await loop.run_in_executor(
|
||||
None,
|
||||
lambda: self.bot.send_message(chat_id=chat_id, text=str(message))
|
||||
)
|
||||
# ejecuta el método sync en un hilo para no romper asyncio.run()
|
||||
loop = asyncio.get_running_loop()
|
||||
await loop.run_in_executor(
|
||||
None,
|
||||
lambda: self.bot.send_message(chat_id=chat_id, text=str(message))
|
||||
)
|
||||
logger.info("Mensaje enviado correctamente por Telegram (v12/v13)")
|
||||
except telegram.error.TelegramError as e:
|
||||
error_msg = f"Error de Telegram API al enviar mensaje (v12/v13): {str(e)}"
|
||||
logger.error(error_msg, exc_info=True)
|
||||
print(f"Error: {error_msg}")
|
||||
raise
|
||||
except Exception as e:
|
||||
error_msg = f"Error inesperado al enviar mensaje por Telegram (v12/v13): {str(e)}"
|
||||
logger.error(error_msg, exc_info=True)
|
||||
print(f"Error: {error_msg}")
|
||||
raise
|
||||
except Exception as e:
|
||||
error_msg = f"Error crítico al enviar mensaje por Telegram: {str(e)}"
|
||||
logger.error(error_msg, exc_info=True)
|
||||
print(f"Error crítico: {error_msg}")
|
||||
# No re-lanzamos la excepción para evitar que rompa el flujo principal
|
||||
|
||||
Reference in New Issue
Block a user