se agrega integración con SAP HANA, manejo de errores en el demonio y actualización de documentación

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
This commit is contained in:
GeorgeandClaude Sonnet 5 committed 2026-09-02 07:40:26 -05:00
1 parent fcc80d3c6e
commit e6cde62e72
14 files changed
+1711 -237

No files matched your search

+34 -29
View File
@@ -14,6 +14,7 @@ HORARIOS = [
(13, 15, 14, 0, 1800, "full"), # 13:15 - 14:00 -> cada 30 minutos
(14, 0, 18, 30, 300, "rapido"), # 14:00 - 17:30 -> cada 5 minutos
(18, 30, 21, 30, 3600, "full"), # 17:30 - 21:30 -> cada 60 minutos
(0, 0, 5, 0, 60, "rapido"), # 00:00 - 05:00 -> cada 5 minutos
]
# ============================================================================
def obtener_intervalo(dt: datetime) -> tuple[int, str] | None:
@@ -64,7 +65,7 @@ def main() -> None:
dias = args.dias
load_dotenv(dotenv_path=".env.dev")
load_dotenv(dotenv_path=".env")
EMAIL = os.getenv("EMAIL", "")
DOWNLOAD_FOLDER = os.getenv("DOWNLOAD_FOLDER", "")
@@ -73,48 +74,52 @@ def main() -> None:
print("🚀 Demonio iniciado")
print("=" * 60)
while True:
try:
while True:
inicio_ciclo = datetime.now()
inicio_ciclo = datetime.now()
resultado = obtener_intervalo(inicio_ciclo)
resultado = obtener_intervalo(inicio_ciclo)
if resultado is not None:
if resultado is not None:
intervalo, modo = resultado
intervalo, modo = resultado
print(
f"\n[{inicio_ciclo:%Y-%m-%d %H:%M:%S}] "
f"Iniciando ciclo [{modo}] (cada {intervalo}s)"
)
run_pipeline(dias, EMAIL, DOWNLOAD_FOLDER, OUTPUT_FOLDER)
duracion = (datetime.now() - inicio_ciclo).total_seconds()
if duracion > intervalo:
print(
f"⚠️ El ciclo demoró {duracion:.1f}s "
f"(intervalo configurado {intervalo}s)"
f"\n[{inicio_ciclo:%Y-%m-%d %H:%M:%S}] "
f"Iniciando ciclo [{modo}] (cada {intervalo}s)"
)
dormir = max(0, intervalo - duracion)
run_pipeline(dias, EMAIL, DOWNLOAD_FOLDER, OUTPUT_FOLDER)
print(f"💤 Próximo ciclo [{modo}] en {dormir:.0f}s...")
duracion = (datetime.now() - inicio_ciclo).total_seconds()
else:
if duracion > intervalo:
print(
f"⚠️ El ciclo demoró {duracion:.1f}s "
f"(intervalo configurado {intervalo}s)"
)
dormir = segundos_hasta_proximo_inicio(inicio_ciclo)
dormir = max(0, intervalo - duracion)
despertar = inicio_ciclo + timedelta(seconds=dormir)
print(f"💤 Próximo ciclo [{modo}] en {dormir:.0f}s...")
print(
f"\n[{inicio_ciclo:%Y-%m-%d %H:%M:%S}] "
f"Fuera del horario.\n"
f"Próxima ejecución: {despertar:%Y-%m-%d %H:%M:%S}"
)
else:
time.sleep(dormir)
dormir = segundos_hasta_proximo_inicio(inicio_ciclo)
despertar = inicio_ciclo + timedelta(seconds=dormir)
print(
f"\n[{inicio_ciclo:%Y-%m-%d %H:%M:%S}] "
f"Fuera del horario.\n"
f"Próxima ejecución: {despertar:%Y-%m-%d %H:%M:%S}"
)
time.sleep(dormir)
except KeyboardInterrupt:
print("\n\n🛑 Demonio detenido por el usuario.")
# ============================================================================