# Troubleshooting ## 1) El DAG no aparece o falla al importarse **Síntomas** - Airflow muestra “ImportError” o el DAG no se lista. **Causas comunes** - La ruta `'/opt/airflow/dags/save_url_ftp'` no existe dentro del contenedor. - `SaveUrl.py` no está en esa carpeta (o tiene otro nombre). - Dependencias no instaladas en el entorno del worker (ej. `pyodbc`, `kafka`). **Acciones** - Verifica que existan los archivos: - `/opt/airflow/dags/save_url_ftp/dag_save_url_ftp.py` - `/opt/airflow/dags/save_url_ftp/SaveUrl.py` - Revisa el scheduler logs por import errors. ## 2) Error conectando al FTP **Síntomas** - `❌ FTP | ...` en logs - notificación por webhook con “Error leyendo FTP folder ...” **Causas comunes** - Credenciales incorrectas (`FTP_000oqta_USER` / `FTP_000oqta_PASSWORD`) - Host incorrecto (`FTP_000oqta_SERVER`) - Firewall / DNS / ruteo - La carpeta del mes no existe (``) **Acciones** - Probar conectividad desde el mismo runtime (worker) hacia el host FTP. - Confirmar que `FTP_BASE_PATH` + `code_folder` existe en el servidor. - Verificar si el servidor cambió estructura para 2027/otro año (porque `FTP_BASE_PATH` incluye `2026`). ## 3) Error leyendo SQL Server **Síntomas** - `❌ SQL | ...` en logs - webhook “Error leyendo URLs ...” **Causas comunes** - Driver ODBC faltante en el worker (`ODBC Driver 18 for SQL Server`) - Credenciales inválidas o permisos insuficientes - SQL Server inaccesible desde la red del worker - Tabla `URL_FTP` inexistente o en otro schema/db esperado **Acciones** - Verificar instalación del driver ODBC en el contenedor/host. - Validar que el usuario tenga `SELECT` sobre `URL_FTP`. - Confirmar nombre de la base de datos: se toma de `INFORMATIONS` (ej. `glm_pmi`, `IS001`). ## 4) Error insertando (schema/constraints) **Síntomas** - `❌ INSERT | ...` en logs - webhook “Error insertando URLs ...” **Causas comunes** - La tabla tiene columnas NOT NULL sin default que el dict no provee. - Tipos incompatibles (ej. `Date` espera datetime pero recibe string). - Restricción UNIQUE (por `IDcodigo`, `URL`, u otra combinación) que el código no contempla. **Acciones** - Revisar definición de `URL_FTP` y confirmar que acepta las columnas: - `Folder`, `Date`, `IDcodigo`, `ObjectCode`, `TaskName`, `URL` - Confirmar tipos: el código inserta strings. - Si existe una columna “ExportDate”, el código NO la inserta (la excluye si aparece en dict). ## 5) No inserta nada, pero debería **Síntomas** - `A insertar: 0` repetidamente, aunque hay archivos nuevos en FTP. **Causas comunes** - `IDcodigo` se parsea mal (mismo valor para distintos archivos) por cambios de naming. - La consulta SQL `Folder LIKE %code_folder%` trae más registros de los necesarios y “tapa” IDs. - El FTP lista rutas que no cumplen el patrón y el parse genera IDs inesperados. **Acciones** - Tomar una URL real del FTP y revisar manualmente el parsing: - ¿contiene `_{YYYY}-{MM}`? - ¿contiene el `identity_id` correcto? - ¿`IDcodigo` de 24 chars es correcto? - Comparar un `IDcodigo` “nuevo” con los existentes en SQL. ## 6) Kafka no recibe logs **Síntomas** - Logs de Airflow muestran fallos de Kafka o no hay eventos en `executions_logs`. **Causas comunes** - `BOOTSTRAP_SERVERS_DOCKER` incorrecto para el runtime del worker. - `KAFKA_USE_SSL=True` pero faltan variables de entorno `SECURITY_PROTOCOL`, `SASL_*`, `SSL_CAFILE`, etc. - Certificados/rutas inválidas dentro del contenedor. **Acciones** - Validar conectividad al broker desde el contenedor/worker. - Si SSL/SASL: asegurar que las variables están definidas como **env vars** del proceso. ## 7) Webhook no notifica **Síntomas** - Se ve el error en logs pero no llega alerta. **Causas comunes** - `WEBHOOK_URL_NOTIFICATION` no definido o es inválido. - Endpoint requiere auth/cabeceras adicionales (el código no las envía). - Restricciones de red del worker. **Acciones** - Probar un `POST` manual al webhook desde el mismo entorno. - Revisar respuesta HTTP (4xx/5xx) en logs si se captura (actualmente no se valida el status code).