Files
autoficher/main.py
Omar Sánchez Pizarro ce179ebff9 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
2026-01-13 01:39:16 +01:00

91 lines
2.9 KiB
Python
Executable File

#!./venv/bin/python3
# encoding: utf-8
#
# Automarcaje para timenet.gpisoftware.com
# usage: main.py -u USER -p PIN -t TYPE [-f] [-h]
#
# Argumentos obligatorios:
# -u USER, --user USER Usuario
# -p PIN, --pin PIN Contraseña
# -t TYPE, --type TYPE Tipo marcado. 0 = Entrada, 1 = Salida (Si no se utiliza -bt)
#
#
# Creado: Omar Sánchez 04-05-2019
# Importamos App Principal
import sys
import traceback
import logging
import asyncio
from app import timenet_manager, telegram_bot
# Configurar logging
logging.basicConfig(
level=logging.INFO,
format='%(asctime)s - %(name)s - %(levelname)s - %(message)s',
datefmt='%Y-%m-%d %H:%M:%S'
)
logger = logging.getLogger(__name__)
if __name__ == '__main__':
telegram = None
try:
logger.info("=" * 50)
logger.info("Iniciando autoficher...")
logger.info("=" * 50)
af = timenet_manager.timenetManager()
telegram = af.telegram
af.sendUpdate()
logger.info("=" * 50)
logger.info("Autoficher completado exitosamente")
logger.info("=" * 50)
except KeyboardInterrupt:
logger.info("Interrupción por el usuario (Ctrl+C)")
sys.exit(0)
except SystemExit as e:
logger.info(f"Salida del sistema con código: {e.code}")
sys.exit(e.code if e.code else 0)
except Exception as e:
error_msg = f"Error crítico no manejado: {str(e)}"
error_traceback = traceback.format_exc()
logger.error("=" * 50)
logger.error("ERROR CRÍTICO NO MANEJADO")
logger.error("=" * 50)
logger.error(error_msg)
logger.error(error_traceback)
logger.error("=" * 50)
# Intentar enviar error por Telegram
try:
if telegram:
full_error = f"🟥🕐 ERROR CRÍTICO EN AUTOFICHER\n\n{error_msg}\n\n```\n{error_traceback}\n```"
asyncio.run(telegram.sendMessage(full_error))
logger.info("Error enviado por Telegram")
else:
# Intentar crear un bot temporal para enviar el error
try:
temp_telegram = telegram_bot.telegramBot()
full_error = f"🟥🕐 ERROR CRÍTICO EN AUTOFICHER\n\n{error_msg}\n\n```\n{error_traceback}\n```"
asyncio.run(temp_telegram.sendMessage(full_error))
logger.info("Error enviado por Telegram (bot temporal)")
except:
logger.error("No se pudo enviar el error por Telegram")
except Exception as telegram_error:
logger.error(f"Error al intentar enviar mensaje por Telegram: {str(telegram_error)}")
# Imprimir error en consola también
print(f"\n{'=' * 50}")
print("ERROR CRÍTICO")
print(f"{'=' * 50}")
print(error_msg)
print(f"\nTraceback completo:")
print(error_traceback)
print(f"{'=' * 50}\n")
sys.exit(1)