From ed5db46168bdfffbd0b0e25f9e7e8670aadff13b Mon Sep 17 00:00:00 2001 From: ezerpa Date: Fri, 3 Jul 2026 16:10:14 -0400 Subject: [PATCH] =?UTF-8?q?Documentaci=C3=B3n=20actualizada=20v1.0.13=20-?= =?UTF-8?q?=20reintentos,=20timeouts,=20troubleshooting?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 82 +++++++++++++++++++++++++++++++++++++++++++++++-------- 1 file changed, 71 insertions(+), 11 deletions(-) diff --git a/README.md b/README.md index a9a5aa4..cb817c3 100644 --- a/README.md +++ b/README.md @@ -8,6 +8,8 @@ Plugin OSGi que obtiene automáticamente la tasa de cambio oficial del BCV (Banc - **Doble fuente de datos**: API bcv.today + scraping directo del sitio web del BCV - **Fallback automático**: Si la API no tiene datos recientes, scrapea el sitio del BCV +- **Reintentos automáticos**: Hasta 3 intentos con espera de 5 segundos entre ellos +- **Timeout extendido**: 30s conexión / 60s lectura para redes lentas - **Busca hacia atrás** cuando el BCV no publica tasa para un día hábil - **Rellena automáticamente** días sin publicación (fines de semana, feriados) - **Ejecución manual** con rango de fechas específico @@ -18,26 +20,40 @@ Plugin OSGi que obtiene automáticamente la tasa de cambio oficial del BCV (Banc ## Fuentes de Datos +### Flujo de Selección +``` +1. Intentar API bcv.today (búsqueda hacia adelante 1-10 días) + ↓ (si no encuentra) +2. Scraping directo del sitio web del BCV (hasta 3 reintentos) + ↓ (si falla) +3. API bcv.today getCurrentRate() (último recurso) +``` + ### Fuente Principal: API bcv.today - **Endpoint**: `https://bcv.today/api/v1/rate.json` - **Endpoint por fecha**: `https://bcv.today/api/v1/history/YYYY-MM-DD.json` - **Ventaja**: Rápida, estructurada -- **Desventaja**: Puede tener retraso deactualización +- **Desventaja**: Puede tener retraso de actualización ### Fuente de Respaldo: Scraping BCV - **URL**: `https://www.bcv.org.ve/` - **Método**: Extracción directa del HTML con regex - **Ventaja**: Siempre actualizada (datos oficiales) - **Desventaja**: Requiere SSL bypass y parsing de HTML +- **Reintentos**: 3 máximo con espera de 5 segundos -### Flujo de Selección -``` -1. Intentar API bcv.today (búsqueda hacia adelante 1-10 días) - ↓ (si no encuentra) -2. Scraping directo del sitio web del BCV - ↓ (si falla) -3. API bcv.today getCurrentRate() (último recurso) -``` +## Configuración de Red + +### Timeouts +| Operación | Valor | Descripción | +|-----------|-------|-------------| +| Conexión | 30 segundos | Tiempo máximo para establecer conexión | +| Lectura | 60 segundos | Tiempo máximo para recibir datos | +| Reintentos | 3 | Intentos máximos antes de fallar | +| Entre reintentos | 5 segundos | Espera entre intentos | + +### SSL Bypass +El sitio web del BCV usa certificados SSL que pueden no estar en el cacerts de Java. El plugin implementa SSL bypass por-conexión (no global) para evitar conflictos con iDempiere. ## Comportamiento del Proceso @@ -80,7 +96,7 @@ com.venezuela.bcvrate/ │ ├ process/ │ │ └ BCVExchangeRateProcess.java # Lógica principal del proceso │ └ service/ -│ ├ BCVApiService.java # Cliente HTTP + scraping BCV +│ ├ BCVApiService.java # Cliente HTTP + scraping BCV + reintentos │ └ BCVRateResponse.java # Modelo de respuesta ├ dist/ │ └ com.venezuela.bcvrate.jar # JAR compilado listo para instalar @@ -89,6 +105,7 @@ com.venezuela.bcvrate/ ├ migration/ │ ├ install_v10.sql # SQL para registrar proceso │ └ BCV_ExchangeRateProcess_2Pack.xml # 2pack para despliegue +├ .gitignore # Archivos ignorados por git └ build.sh # Script de build para Linux ``` @@ -98,6 +115,7 @@ com.venezuela.bcvrate/ - iDempiere v10 ejecutándose - Acceso a consola Felix (http://servidor:8080/system/console) - Acceso a la base de datos PostgreSQL +- Conectividad a internet (bcv.today y bcv.org.ve) ### Paso 1: Instalar JAR en Felix 1. Abrir consola Felix → **Bundles** @@ -171,6 +189,12 @@ Crear registro en AD_TreeBar o importar 2pack con el menú configurado. - Verificar conectividad: `curl https://bcv.today/api/v1/rate.json` - El plugin automáticamente intenta scraping del sitio web del BCV como respaldo +### Scraping BCV falla por timeout +- El plugin reintenta hasta 3 veces con espera de 5 segundos +- Verificar conectividad: `curl https://www.bcv.org.ve/` +- Si hay proxy, configurarlo en el servidor +- El log muestra "Scraping BCV fallo despues de 3 intentos" + ### Error SSL en scraping del BCV - El plugin incluye SSL bypass para el sitio web del BCV - Si persiste, verificar que el bundle tiene la última versión @@ -216,11 +240,23 @@ chmod +x build.sh ### Dual Source: API + Scraping El plugin implementa dos fuentes de datos para máxima confiabilidad: -1. **API bcv.today**: Consulta REST rápida, pero puede tener retraso deactualización +1. **API bcv.today**: Consulta REST rápida, pero puede tener retraso de actualización 2. **Scraping BCV**: Extracción directa del HTML del sitio web oficial El flujo automático intenta la API primero y fallback al scraping si no hay datos recientes. +### Lógica de Reintentos +Cuando el scraping falla (timeout, error de conexión), el plugin reintenta automáticamente: + +```java +int maxRetries = 3; +for (int attempt = 1; attempt <= maxRetries; attempt++) { + // Intentar scraping + // Si falla, esperar 5 segundos y reintentar + // Si falla 3 veces, registrar error +} +``` + ### SSL Bypass para Scraping El sitio web del BCV usa certificados SSL que pueden no estar en el cacerts de Java. El plugin implementa SSL bypass por-conexión (no global) para evitar conflictos con iDempiere: @@ -267,8 +303,32 @@ Esto evita capturar otras tasas (EUR, CNY, etc.) que aparecen en la misma págin - Si la versión no cambia, el bundle anterior permanece activo - Siempre incrementar `Bundle-Version` en MANIFEST.MF al actualizar +## Repositorio + +El código fuente está disponible en: +- **Gitea**: https://gitea.inforcloud.net/ezerpa/eru +- **Branch principal**: master + +### Clonar repositorio +```bash +git clone https://gitea.inforcloud.net/ezerpa/eru.git +``` + +### Actualizar código +```bash +git pull +``` + ## Historial de Cambios +### v1.0.13 (2026-07-03) +- Lógica de reintentos: 3 intentos máximo con espera de 5 segundos +- Timeout incrementado: 30s conexión / 60s lectura +- Logging detallado de reintentos en servidor + +### v1.0.12 (2026-07-03) +- Incremento de timeout HTTP a 30s/60s + ### v1.0.11 (2026-07-03) - Fix regex scraping: captura tasa USD específicamente (no EUR) - Regex busca después de `USD` en el HTML