Files
TransferData-main/Documentacion/Manejo_de_Errores.md
T
2026-05-09 14:00:04 -04:00

8.9 KiB
Raw Blame History

Manejo de Errores

Clasificación de Errores

DataTransferV2 clasifica los errores en tres categorías principales con diferentes impactos en el pipeline.

Estados de Ejecución

SUCCESS ()

Definición: Ejecución completamente exitosa Condiciones:

  • Datos encontrados en base de datos
  • Archivo Excel generado correctamente
  • Todos los destinos de distribución exitosos

Ejemplo:

✅ Cobertura-2024-01-15: 1,500 registros procesados, FTP+SharePoint OK

COMPLETED_WITH_ERRORS (⚠️)

Definición: Datos procesados pero con fallos en distribución Condiciones:

  • Datos encontrados y Excel generado
  • Al menos un destino de distribución falló
  • Otros destinos pueden haber sido exitosos

Impacto: No detiene el pipeline, continúa con siguientes reportes

Ejemplo:

⚠️ Checkout-2024-01-15: Datos OK, FTP falló (timeout), SharePoint OK

WARNING ()

Definición: Sin datos disponibles Condiciones:

  • Query ejecutada correctamente
  • 0 registros retornados
  • No se genera archivo Excel

Reglas de negocio:

  • Si es domingo + sin datos → Ignorado
  • 3+ warnings consecutivos → Se eleva a FAILED

Ejemplo:

️ Promociones-2024-01-15: Sin datos disponibles

FAILED ()

Definición: Fallo crítico que detiene el procesamiento Condiciones:

  • Error en conexión a base de datos
  • Error en query SQL
  • Error en generación de Excel
  • 3+ warnings consecutivos en mismo reporte

Impacto: Detiene procesamiento del reporte actual

Ejemplo:

❌ QualityDisplay-2024-01-15: Error de conexión DB - timeout

Tipos de Errores Técnicos

Errores de Base de Datos

Connection Timeout

Error: [08001] [Microsoft][ODBC SQL Server Driver]Timeout expired
Causa: Red lenta, servidor sobrecargado
Solución: Reintentar, verificar conectividad

Authentication Failed

Error: [28000] [Microsoft][ODBC SQL Server Driver]Login failed
Causa: Credenciales incorrectas
Solución: Verificar USERNAME/PASSWORD en config

Database Not Found

Error: [08004] [Microsoft][ODBC SQL Server Driver]Server does not exist
Causa: Servidor incorrecto o no accesible
Solución: Verificar SERVER en config

Query Syntax Error

Error: [42000] [Microsoft][ODBC SQL Server Driver]Incorrect syntax
Causa: Nombre de tabla/columna incorrecto
Solución: Verificar configuración de reportes

Errores de FTP

Connection Failed

Error: [Errno 110] Connection timed out
Causa: Firewall, red bloqueada
Solución: Verificar host/puerto, permisos de red

Authentication Failed

Error: 530 Login incorrect
Causa: Credenciales FTP incorrectas
Solución: Verificar FTP_CONFIG

Permission Denied

Error: 550 Permission denied
Causa: Usuario sin permisos de escritura
Solución: Verificar permisos en servidor FTP

Disk Full

Error: 452 Insufficient storage space
Causa: Espacio insuficiente en servidor
Solución: Liberar espacio, contactar administrador

Errores de SFTP

SSH Connection Failed

Error: [Errno 61] Connection refused
Causa: Puerto cerrado, servidor no responde
Solución: Verificar host/puerto SFTP

Host Key Verification

Error: Host key verification failed
Causa: Primera conexión, clave host no conocida
Solución: Agregar host a known_hosts o usar policy

File Transfer Error

Error: Permission denied (publickey,password)
Causa: Autenticación fallida
Solución: Verificar credenciales SFTP

Errores de SharePoint

Authentication Failed

Error: Invalid client credentials
Causa: client_id/tenant_id incorrectos
Solución: Verificar configuración Azure AD

Permission Denied

Error: Access denied
Causa: Usuario sin permisos en site/library
Solución: Verificar permisos en SharePoint

File Upload Failed

Error: The file exists
Causa: Archivo ya existe, no se puede sobrescribir
Solución: Verificar configuración de sobrescritura

Errores de Sistema

Disk Full

Error: [Errno 28] No space left on device
Causa: Disco local lleno
Solución: Liberar espacio, verificar partición

Memory Error

Error: MemoryError
Causa: DataFrame muy grande
Solución: Optimizar query, procesar en lotes

Encoding Error

Error: 'utf-8' codec can't decode byte
Causa: Datos con caracteres especiales
Solución: Especificar encoding correcto

Estrategias de Recuperación

Reintentos Automáticos

def retry_operation(operation, max_retries=3, delay=5):
    for attempt in range(max_retries):
        try:
            return operation()
        except Exception as e:
            if attempt < max_retries - 1:
                time.sleep(delay * (attempt + 1))  # Backoff exponencial
            else:
                raise e

Aplicado a:

  • Conexiones de red (FTP, SFTP, SharePoint)
  • Queries de base de datos
  • Uploads de archivos

Fallback Strategies

  1. Múltiples Destinos: Si FTP falla, intentar SFTP
  2. Modo Degradado: Continuar sin notificaciones si webhook falla
  3. Cache Local: Guardar archivos localmente si uploads fallan

Circuit Breaker

class CircuitBreaker:
    def __init__(self, failure_threshold=5, recovery_timeout=300):
        self.failure_count = 0
        self.last_failure_time = None
        self.state = 'CLOSED'  # CLOSED, OPEN, HALF_OPEN
    
    def call(self, func):
        if self.state == 'OPEN':
            if time.time() - self.last_failure_time > self.recovery_timeout:
                self.state = 'HALF_OPEN'
            else:
                raise CircuitBreakerError("Circuit is OPEN")
        
        try:
            result = func()
            self._on_success()
            return result
        except Exception as e:
            self._on_failure()
            raise e

Logging y Monitoreo

Niveles de Log

  • DEBUG: Detalles técnicos, queries ejecutadas
  • INFO: Progreso normal, estadísticas
  • WARNING: Situaciones no críticas
  • ERROR: Errores que requieren atención
  • CRITICAL: Errores que detienen el sistema

Formato de Logs

2024-01-15 08:30:15,123 - ETL - INFO - Starting ETL for PG project
2024-01-15 08:30:16,456 - DB - DEBUG - Executing query: SELECT * FROM Cobertura WHERE Fecha = '2024-01-15'
2024-01-15 08:30:18,789 - REPORT - INFO - Generated Excel: Reportes/PG/Cobertura/Cobertura-20240115.xlsx
2024-01-15 08:30:20,012 - FTP - ERROR - Upload failed: Connection timeout
2024-01-15 08:30:25,345 - FTP - INFO - Retry 1/3 successful

Base de Datos de Auditoría

Cada error se registra en ExecutionLog:

INSERT INTO ExecutionLog (
    ProcedureID, StartTime, EndTime, Status, 
    ErrorType, ErrorMessage, RetryCount
) VALUES (
    1001, '2024-01-15 08:30:15', '2024-01-15 08:30:25', 'COMPLETED_WITH_ERRORS',
    'FTP_TIMEOUT', 'Connection timed out after 30s', 1
)

Alertas y Notificaciones

Umbrales de Alerta

  • Error Rate > 10%: Notificación inmediata
  • 3+ fallos consecutivos: Alerta crítica
  • Tiempo de ejecución > 2x promedio: Warning
  • Disco > 90% usado: Alerta de capacidad

Canales de Notificación

  1. WhatsApp: Resúmenes diarios
  2. Email: Alertas críticas
  3. Logs: Registro detallado
  4. Dashboard: Métricas en tiempo real (futuro)

Debugging

Herramientas de Diagnóstico

Verificar Conectividad

# Base de datos
sqlcmd -S sql.glmanalytics.com -U $USERNAME -P $PASSWORD -Q "SELECT 1"

# FTP
ftp $FTP_HOST

# SFTP
sftp $SFTP_USER@$SFTP_HOST

Analizar Logs

# Últimos errores
tail -f Logs/etl.log | grep ERROR

# Errores por tipo
grep "ERROR" Logs/etl.log | cut -d' ' -f4 | sort | uniq -c

Probar Componentes Individualmente

# Probar DB
from App.Utils.db_utils import DatabaseManager
db = DatabaseManager()
data = db.execute_query("SELECT TOP 1 * FROM Cobertura")

# Probar FTP
from App.Utils.ftp_utils import FTPManager
ftp = FTPManager()
ftp.test_connection()

Checklist de Troubleshooting

  • Credenciales correctas en config
  • Servidores accesibles (ping, telnet)
  • Puertos abiertos (1433 DB, 21 FTP, 22 SFTP, 443 HTTPS)
  • Espacio en disco suficiente
  • Permisos de archivo correctos
  • Dependencias Python instaladas
  • Zona horaria correcta
  • Configuración de reportes válida

Mejores Prácticas

Prevención

  1. Validación de Configuración: Verificar al inicio
  2. Health Checks: Monitorear componentes críticos
  3. Backup: Mantener copias de configuraciones
  4. Versionado: Control de cambios en config

Respuesta

  1. Documentar Incidentes: Registrar causa y resolución
  2. Automatizar Recuperación: Scripts para reintentos
  3. Escalada: Definir cuándo notificar a equipo
  4. Post-mortem: Análisis después de incidentes críticos

Mejora Continua

  1. Métricas: Recopilar estadísticas de errores
  2. Análisis de Tendencias: Identificar patrones
  3. Optimización: Reducir puntos de fallo
  4. Testing: Cobertura de escenarios de error