Files
save-url-main/documentacion/01_VISION_GENERAL.md
T
2026-05-09 14:20:17 -04:00

69 lines
2.2 KiB
Markdown

# Visión general
## ¿Qué hace este proyecto?
El proyecto **lee listados de archivos desde un servidor FTP**, **construye URLs públicas** para esos archivos y **guarda las URLs en SQL Server** dentro de una tabla llamada `URL_FTP`.
Durante la ejecución también:
- publica eventos de ejecución en **Kafka** (topic `executions_logs`)
- envía una **notificación por webhook** ante errores (mensaje tipo “alerta pipeline”)
El entrypoint operativo está pensado para ejecutarse desde **Apache Airflow** a través de un DAG.
## Componentes principales
- `SaveUrl.py`
- contiene la lógica de negocio (`run_save_url`)
- implementa:
- lectura FTP (`read_ftp`)
- lectura SQL filtrada por carpeta (`read_table_where`)
- inserción en SQL en lotes (`insert_records`)
- logger a Kafka (`KafkaLogger`)
- `dag_save_url_ftp.py`
- define el DAG `save_url_ftp` y ejecuta `run_save_url`
## Entornos y configuración
Este proyecto se configura con **variables de Airflow** (Airflow Variables). Aunque el `README.md` menciona `.env`, el código actual usa `airflow.models.Variable.get(...)` para obtener:
- credenciales SQL Server
- credenciales FTP
- configuración Kafka (incluyendo SSL/SASL)
- URL de webhook de notificación
## Frecuencia de ejecución
El DAG está programado con:
- cron: `0 */2 * * *` (**cada 2 horas**)
## Fuentes/“BDs” procesadas
En cada ejecución se itera sobre una lista fija (en `SaveUrl.py`) con entradas del tipo:
- nombre de carpeta base (ej. `glmpmi`)
- `identity_id` usado para parsear el nombre de archivo/URL
- nombre de “database” lógico usado para logs (ej. `glm_pmi`)
- `database_id` (para construir `procedure_id` del log)
Para cada entrada se calcula un `code_folder` con el mes actual (formato `MM`), por ejemplo: `glmpmi04`.
## Salida principal
- **Tabla destino**: `URL_FTP` (SQL Server)
- **Campos calculados por registro** (a partir de la URL):
- `Folder`
- `Date`
- `IDcodigo`
- `ObjectCode`
- `TaskName`
- `URL`
## Señales de observabilidad
- Logs en Airflow (logger estándar de Python)
- Logs “estructurados” en Kafka en `executions_logs`
- Notificación por webhook en fallos de FTP/SQL/INSERT