248 lines
5.1 KiB
Markdown
248 lines
5.1 KiB
Markdown
# Configuración
|
|
|
|
## Archivos de Configuración
|
|
|
|
La configuración está organizada en archivos separados por proyecto en `App/Config/`.
|
|
|
|
## GeneralConfig.py
|
|
|
|
Configuraciones globales aplicables a todos los proyectos.
|
|
|
|
### Base de Datos
|
|
|
|
```python
|
|
# SQL Server Connection
|
|
SERVER = "sql.glmanalytics.com"
|
|
DATABASES = {
|
|
"pg": {"id": "00080001", "name": "glm_pg"},
|
|
"feduro": {"id": "00010007", "name": "IS001"}
|
|
}
|
|
USERNAME = "tu_usuario"
|
|
PASSWORD = "tu_password"
|
|
```
|
|
|
|
### Zonas Horarias
|
|
|
|
```python
|
|
TIMEZONES = {
|
|
"central": "America/El_Salvador", # UTC-6
|
|
"caribbean": "America/Santo_Domingo" # UTC-4
|
|
}
|
|
```
|
|
|
|
### Notificaciones
|
|
|
|
```python
|
|
WHATSAPP_WEBHOOK = "https://automation.glmanalytics.com/webhook/wsp-notifcation"
|
|
EMAIL_CONFIG = {
|
|
"smtp_server": "smtp.gmail.com",
|
|
"port": 587,
|
|
"username": "tu_email@gmail.com",
|
|
"password": "tu_password"
|
|
}
|
|
```
|
|
|
|
### FTP Global
|
|
|
|
```python
|
|
FTP_CONFIG = {
|
|
"host": "rcomhost.com",
|
|
"username": "tu_usuario",
|
|
"password": "tu_password",
|
|
"base_path": "/www/TranferData_APP_PYTHON"
|
|
}
|
|
```
|
|
|
|
## Configuración por Proyecto
|
|
|
|
### pgConfig.py
|
|
|
|
Configuración específica para Pentagono Group.
|
|
|
|
```python
|
|
class PGConfig:
|
|
name = "pg"
|
|
timezone = "central"
|
|
|
|
reports = [
|
|
{"name": "Cobertura", "ftp": True, "sharepoint": True, "n8n": False},
|
|
{"name": "Checkout", "ftp": True, "sharepoint": False, "n8n": True},
|
|
# ... más reportes
|
|
]
|
|
|
|
sharepoint_config = {
|
|
"site_url": "https://pgone.sharepoint.com",
|
|
"client_id": "tu_client_id",
|
|
"tenant_id": "tu_tenant_id",
|
|
"folder_mappings": {
|
|
"Cobertura": "/sites/PGReports/Cobertura",
|
|
"Checkout": "/sites/PGReports/Checkout"
|
|
}
|
|
}
|
|
```
|
|
|
|
### feduroConfig.py
|
|
|
|
Configuración para proyecto FEDURO.
|
|
|
|
```python
|
|
class FeduroConfig:
|
|
name = "feduro"
|
|
timezone = "caribbean"
|
|
|
|
reports = [
|
|
{"name": "Cobertura", "ftp": False, "sftp": True, "n8n": False},
|
|
# ... más reportes
|
|
]
|
|
|
|
sftp_config = {
|
|
"host": "tu-azure-container-instance",
|
|
"username": "tu_usuario",
|
|
"password": "tu_password",
|
|
"port": 22,
|
|
"path_mappings": {
|
|
"Cobertura": "/feduro/reports/cobertura",
|
|
"Checkout": "/feduro/reports/checkout"
|
|
}
|
|
}
|
|
```
|
|
|
|
## Flags de Distribución
|
|
|
|
Cada reporte puede configurarse para múltiples destinos:
|
|
|
|
- **ftp:** Subida a servidor FTP
|
|
- **sftp:** Subida a servidor SFTP (Azure)
|
|
- **sharepoint:** Subida a SharePoint/OneDrive
|
|
- **n8n:** Trigger de webhook N8N
|
|
|
|
## Credenciales Seguras
|
|
|
|
### Variables de Entorno (Recomendado)
|
|
|
|
```bash
|
|
# Linux/macOS
|
|
export DB_USER="usuario_seguro"
|
|
export DB_PASSWORD="password_seguro"
|
|
export SHAREPOINT_CLIENT_ID="client_id_seguro"
|
|
|
|
# Windows
|
|
set DB_USER=usuario_seguro
|
|
set DB_PASSWORD=password_seguro
|
|
```
|
|
|
|
### Modificar Código para Usar Variables
|
|
|
|
```python
|
|
import os
|
|
|
|
USERNAME = os.getenv("DB_USER", "default_user")
|
|
PASSWORD = os.getenv("DB_PASSWORD", "default_password")
|
|
```
|
|
|
|
## Configuración de Docker
|
|
|
|
### Dockerfile
|
|
|
|
```dockerfile
|
|
FROM python:3.9-slim
|
|
|
|
WORKDIR /app
|
|
COPY requirements.txt .
|
|
RUN pip install -r requirements.txt
|
|
|
|
COPY . .
|
|
EXPOSE 5000
|
|
|
|
CMD ["python", "main.py"]
|
|
```
|
|
|
|
### docker-compose.yml
|
|
|
|
```yaml
|
|
version: '3.8'
|
|
services:
|
|
datatransfer:
|
|
build: .
|
|
ports:
|
|
- "5000:5000"
|
|
environment:
|
|
- DB_USER=${DB_USER}
|
|
- DB_PASSWORD=${DB_PASSWORD}
|
|
volumes:
|
|
- ./Reportes:/app/Reportes
|
|
- ./Logs:/app/Logs
|
|
```
|
|
|
|
## Validación de Configuración
|
|
|
|
### Verificar Conexiones
|
|
|
|
```python
|
|
# Probar conexión DB
|
|
from App.Utils.db_utils import DatabaseManager
|
|
db = DatabaseManager()
|
|
conn = db.get_connection("pg")
|
|
# Debería conectar sin errores
|
|
|
|
# Probar FTP
|
|
from App.Utils.ftp_utils import FTPManager
|
|
ftp = FTPManager()
|
|
ftp.connect()
|
|
# Debería conectar sin errores
|
|
```
|
|
|
|
### Validar Reportes
|
|
|
|
```python
|
|
# Verificar que todos los reportes tengan configuraciones válidas
|
|
for config in [PGConfig, FeduroConfig]:
|
|
for report in config.reports:
|
|
assert "name" in report
|
|
assert any([report.get("ftp"), report.get("sftp"), report.get("sharepoint"), report.get("n8n")])
|
|
```
|
|
|
|
## Configuración de Producción
|
|
|
|
### Variables de Entorno
|
|
|
|
- `FLASK_ENV=production`
|
|
- `SECRET_KEY=tu_clave_secreta`
|
|
- `LOG_LEVEL=INFO`
|
|
|
|
### Configuración de Logging
|
|
|
|
```python
|
|
LOGGING_CONFIG = {
|
|
"version": 1,
|
|
"formatters": {
|
|
"detailed": {
|
|
"format": "%(asctime)s - %(name)s - %(levelname)s - %(message)s"
|
|
}
|
|
},
|
|
"handlers": {
|
|
"file": {
|
|
"class": "logging.FileHandler",
|
|
"filename": "Logs/app.log",
|
|
"formatter": "detailed"
|
|
}
|
|
},
|
|
"root": {
|
|
"level": "INFO",
|
|
"handlers": ["file"]
|
|
}
|
|
}
|
|
```
|
|
|
|
## Troubleshooting
|
|
|
|
### Problemas Comunes
|
|
|
|
1. **Conexión DB falla:** Verificar credenciales y firewall
|
|
2. **FTP timeout:** Revisar configuración de red y credenciales
|
|
3. **SharePoint error:** Validar client_id y permisos en Azure AD
|
|
4. **SFTP falla:** Confirmar host y puerto de Azure Container Instance
|
|
|
|
### Logs de Configuración
|
|
|
|
Los errores de configuración se registran en `Logs/etl.log` con mensajes descriptivos. |