desarrollo instalado en el cliente globe italia
This commit is contained in:
commit
d7c4d532b5
17 files changed
+1946
No files matched your search
@@ -0,0 +1,109 @@
|
||||
import sys
|
||||
import os
|
||||
import time
|
||||
import signal
|
||||
from datetime import datetime, timedelta
|
||||
|
||||
sys.path.insert(0, os.path.dirname(os.path.abspath(__file__)))
|
||||
from logger_manager import get_logger
|
||||
from service import process_all
|
||||
# ============================================================================
|
||||
HORARIOS = [
|
||||
(8, 0, 18, 0, 600, "rapido"),
|
||||
(18, 0, 23, 0, 3600, "full"),
|
||||
]
|
||||
|
||||
DIAS_ACTIVOS = [0, 1, 2, 3, 4, 5, 6]
|
||||
|
||||
_running = True
|
||||
|
||||
log = get_logger()
|
||||
|
||||
# ============================================================================
|
||||
def obtener_intervalo(dt):
|
||||
minutos = dt.hour * 60 + dt.minute
|
||||
for hi, mi, hf, mf, intervalo, modo in HORARIOS:
|
||||
inicio = hi * 60 + mi
|
||||
fin = hf * 60 + mf
|
||||
if inicio <= minutos < fin:
|
||||
return (intervalo, modo)
|
||||
return None
|
||||
|
||||
# ============================================================================
|
||||
def segundos_hasta_proximo_inicio(dt):
|
||||
target = dt.replace(hour=HORARIOS[0][0], minute=HORARIOS[0][1], second=0, microsecond=0)
|
||||
if dt >= target:
|
||||
target += timedelta(days=1)
|
||||
return int((target - dt).total_seconds())
|
||||
|
||||
# ============================================================================
|
||||
def segundos_hasta_proximo_dia_activo(dt):
|
||||
for dias in range(1, 8):
|
||||
prox = dt + timedelta(days=dias)
|
||||
if prox.weekday() in DIAS_ACTIVOS:
|
||||
target = prox.replace(hour=HORARIOS[0][0], minute=HORARIOS[0][1], second=0, microsecond=0)
|
||||
return int((target - dt).total_seconds())
|
||||
return 86400
|
||||
|
||||
# ============================================================================
|
||||
def signal_handler(signum, frame):
|
||||
global _running
|
||||
log.info("🛑 Señal de parada recibida. Deteniendo...")
|
||||
_running = False
|
||||
|
||||
# ============================================================================
|
||||
def main():
|
||||
global _running
|
||||
signal.signal(signal.SIGINT, signal_handler)
|
||||
signal.signal(signal.SIGTERM, signal_handler)
|
||||
|
||||
log.info("🚀 Servicio ComercioNet - Procesador OC")
|
||||
log.info("📅 Días activos: {} (0=lun, 6=dom)".format(DIAS_ACTIVOS))
|
||||
log.info("🕐 Horarios:")
|
||||
for hi, mi, hf, mf, intervalo, modo in HORARIOS:
|
||||
log.info(" {:02d}:{:02d} - {:02d}:{:02d} | cada {}s | {}".format(hi, mi, hf, mf, intervalo, modo))
|
||||
|
||||
while _running:
|
||||
ahora = datetime.now()
|
||||
|
||||
if ahora.weekday() not in DIAS_ACTIVOS:
|
||||
espera = segundos_hasta_proximo_dia_activo(ahora)
|
||||
prox = ahora + timedelta(seconds=espera)
|
||||
log.info("📅 Día no activo. Próximo inicio: {}".format(prox.strftime("%a %Y-%m-%d %H:%M:%S")))
|
||||
for _ in range(int(espera)):
|
||||
if not _running:
|
||||
break
|
||||
time.sleep(1)
|
||||
continue
|
||||
|
||||
intervalo_info = obtener_intervalo(ahora)
|
||||
if not intervalo_info:
|
||||
espera = segundos_hasta_proximo_inicio(ahora)
|
||||
prox = ahora + timedelta(seconds=espera)
|
||||
log.info("⏸️ Fuera de horario. Próximo inicio: {}".format(prox.strftime("%H:%M:%S")))
|
||||
for _ in range(int(espera)):
|
||||
if not _running:
|
||||
break
|
||||
time.sleep(1)
|
||||
continue
|
||||
|
||||
intervalo, modo = intervalo_info
|
||||
log.info("🔄 Ciclo: {} | modo={} | intervalo={}s".format(ahora.strftime("%Y-%m-%d %H:%M:%S"), modo, intervalo))
|
||||
|
||||
try:
|
||||
process_all()
|
||||
except Exception as e:
|
||||
log.error("❌ Error en ciclo: {}".format(e))
|
||||
|
||||
if _running:
|
||||
log.info("💤 Próximo ciclo [{}] en {}s...".format(modo, intervalo))
|
||||
for _ in range(intervalo):
|
||||
if not _running:
|
||||
break
|
||||
time.sleep(1)
|
||||
|
||||
log.info("🛑 Servicio detenido.")
|
||||
|
||||
# ============================================================================
|
||||
if __name__ == "__main__":
|
||||
main()
|
||||
Reference in new issue
Block a user