Control de Flujos
Guía para controlar los flujos de sincronización en producción.
Estados de un Flow
stateDiagram-v2
[*] --> Running: Inicio
Running --> Paused: POST /pause
Paused --> Running: POST /resume
Running --> Limited: POST /limit/N
Limited --> Running: Alcanza límite
Running --> Paused: Auto-pause (límite)
Limited --> Paused: DELETE /limit + pause
| Estado | Descripción |
|---|---|
| Running | Flow activo, ejecuta cada pollInterval |
| Paused | Flow detenido, no ejecuta |
| Limited (N/M) | Ejecuta N veces y se auto-pausa |
Persistencia
El estado de pause se guarda en Redis:
# Ver flows pausados
redis-cli SMEMBERS sync:paused
# Pausar manualmente (antes de iniciar)
redis-cli SADD sync:paused articulos clientes pedidos
# Despausar manualmente
redis-cli SREM sync:paused articulos
Al reiniciar el servicio, carga el estado desde Redis.
Casos de Uso
Deploy Gradual
Para probar cambios en producción de forma controlada:
flowchart TD
A[Deploy nuevo código] --> B[Pausar flow]
B --> C[Test con 1 item]
C --> D{¿OK?}
D -->|No| E[Fix y redeploy]
E --> C
D -->|Sí| F[Habilitar con límite 5]
F --> G[Monitorear 5 runs]
G --> H{¿OK?}
H -->|No| I[Pausar y debuggear]
H -->|Sí| J[Quitar límite]
J --> K[Flow en producción]
Comandos:
# 1. Pausar
curl -X POST http://localhost:8080/flow/articulos/pause
# 2. Test individual
curl -X POST http://localhost:8080/sync/articulos/ART001
# 3. Habilitar con límite
curl -X POST http://localhost:8080/flow/articulos/limit/5
# 4. Monitorear en dashboard
open http://localhost:8080/admin
# 5. Si OK, quitar límite
curl -X DELETE http://localhost:8080/flow/articulos/limit
Mantenimiento de Base de Datos
Pausar flows durante mantenimiento:
# Pausar todos
curl -X POST http://localhost:8080/flows/pause
# Hacer mantenimiento...
# Reanudar todos
curl -X POST http://localhost:8080/flows/resume
Debugging de Errores
Para investigar un error en un item específico:
# 1. Ver errores
curl http://localhost:8080/errors | jq
# 2. Borrar hash del item problemático
curl -X DELETE http://localhost:8080/reset/articulos/ART001
# 3. Sync solo ese item
curl -X POST http://localhost:8080/sync/articulos/ART001
# 4. Ver logs
docker logs rodamar_sync | grep ART001
Re-sincronización Completa
Para forzar re-sync de todo un flow:
# Opción 1: Resync (borra cache + sync inmediato)
curl -X POST http://localhost:8080/resync/articulos
# Opción 2: Reset + próximo poll
curl -X DELETE http://localhost:8080/reset/articulos
# Esperar al próximo pollInterval
Límites de Ejecución
¿Para qué sirven?
- Testing controlado: Ejecutar N veces y parar
- Rollout gradual: Probar con pocas ejecuciones
- Depuración: Ver comportamiento sin loop infinito
Funcionamiento
sequenceDiagram
participant API
participant Poller
participant Redis
API->>Poller: setLimit("articulos", 3)
Note over Poller: runCount = 0, runLimit = 3
loop Cada pollInterval
Poller->>Poller: pollFlow()
Poller->>Poller: runCount++
alt runCount >= runLimit
Poller->>Redis: SADD sync:paused articulos
Note over Poller: Flow auto-pausado
end
end
Ejemplo
# Establecer límite de 3 ejecuciones
curl -X POST http://localhost:8080/flow/articulos/limit/3
# Ver estado
curl http://localhost:8080/flows/status | jq '.articulos'
# {"paused": false, "runLimit": 3, "runCount": 0}
# Después de 3 ejecuciones:
# {"paused": true, "runLimit": 3, "runCount": 3}
Monitoreo
Dashboard
Ver estado en tiempo real en /admin:
- Columna "Status": Running / Paused / N/M
- Botones de control por flow
- Activity log con acciones
API
# Estado de todos los flows
curl http://localhost:8080/flows/status
# Métricas
curl http://localhost:8080/metrics
# Errores
curl http://localhost:8080/errors
Logs
# Ver logs del container
docker logs -f rodamar_sync
# Filtrar por flow
docker logs rodamar_sync 2>&1 | grep '"flow":"articulos"'
# Ver solo errores
docker logs rodamar_sync 2>&1 | grep '"level":50'
Scripts Útiles
Pausar todo al iniciar
En .env:
O manualmente antes de iniciar:
Script de deploy
#!/bin/bash
# deploy.sh
# Pausar todos los flows
curl -X POST http://localhost:8080/flows/pause
# Actualizar imagen
docker pull mundoit/erp-wms-sync:latest
docker rm -f rodamar_sync
./update-sync.sh
# Esperar que inicie
sleep 5
# Verificar health
curl http://localhost:8080/health
# Reanudar flows gradualmente
for flow in provincias zonas transportes; do
curl -X POST http://localhost:8080/flow/$flow/resume
sleep 2
done
# Flows críticos con límite
for flow in articulos clientes pedidos; do
curl -X POST http://localhost:8080/flow/$flow/limit/5
done
echo "Deploy completado. Flows críticos con límite de 5 runs."
echo "Monitorear en http://localhost:8080/admin"
Troubleshooting
Flow no se despausa
# Verificar Redis
redis-cli SMEMBERS sync:paused
# Forzar despausar
redis-cli SREM sync:paused articulos
# Reiniciar poller (opcional)
curl -X POST http://localhost:8080/flow/articulos/resume
Límite no funciona
El límite se resetea si se reinicia el servicio. Solo el estado de pause persiste.
Flow pausado pero sigue ejecutando
El pause solo afecta al próximo ciclo. Si hay un poll en progreso, termina.