Documentación actualizada v1.0.13 - reintentos, timeouts, troubleshooting
This commit is contained in:
@@ -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
|
- **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
|
- **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
|
- **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)
|
- **Rellena automáticamente** días sin publicación (fines de semana, feriados)
|
||||||
- **Ejecución manual** con rango de fechas específico
|
- **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
|
## 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
|
### Fuente Principal: API bcv.today
|
||||||
- **Endpoint**: `https://bcv.today/api/v1/rate.json`
|
- **Endpoint**: `https://bcv.today/api/v1/rate.json`
|
||||||
- **Endpoint por fecha**: `https://bcv.today/api/v1/history/YYYY-MM-DD.json`
|
- **Endpoint por fecha**: `https://bcv.today/api/v1/history/YYYY-MM-DD.json`
|
||||||
- **Ventaja**: Rápida, estructurada
|
- **Ventaja**: Rápida, estructurada
|
||||||
- **Desventaja**: Puede tener retraso deactualización
|
- **Desventaja**: Puede tener retraso de actualización
|
||||||
|
|
||||||
### Fuente de Respaldo: Scraping BCV
|
### Fuente de Respaldo: Scraping BCV
|
||||||
- **URL**: `https://www.bcv.org.ve/`
|
- **URL**: `https://www.bcv.org.ve/`
|
||||||
- **Método**: Extracción directa del HTML con regex
|
- **Método**: Extracción directa del HTML con regex
|
||||||
- **Ventaja**: Siempre actualizada (datos oficiales)
|
- **Ventaja**: Siempre actualizada (datos oficiales)
|
||||||
- **Desventaja**: Requiere SSL bypass y parsing de HTML
|
- **Desventaja**: Requiere SSL bypass y parsing de HTML
|
||||||
|
- **Reintentos**: 3 máximo con espera de 5 segundos
|
||||||
|
|
||||||
### Flujo de Selección
|
## Configuración de Red
|
||||||
```
|
|
||||||
1. Intentar API bcv.today (búsqueda hacia adelante 1-10 días)
|
### Timeouts
|
||||||
↓ (si no encuentra)
|
| Operación | Valor | Descripción |
|
||||||
2. Scraping directo del sitio web del BCV
|
|-----------|-------|-------------|
|
||||||
↓ (si falla)
|
| Conexión | 30 segundos | Tiempo máximo para establecer conexión |
|
||||||
3. API bcv.today getCurrentRate() (último recurso)
|
| 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
|
## Comportamiento del Proceso
|
||||||
|
|
||||||
@@ -80,7 +96,7 @@ com.venezuela.bcvrate/
|
|||||||
│ ├ process/
|
│ ├ process/
|
||||||
│ │ └ BCVExchangeRateProcess.java # Lógica principal del proceso
|
│ │ └ BCVExchangeRateProcess.java # Lógica principal del proceso
|
||||||
│ └ service/
|
│ └ service/
|
||||||
│ ├ BCVApiService.java # Cliente HTTP + scraping BCV
|
│ ├ BCVApiService.java # Cliente HTTP + scraping BCV + reintentos
|
||||||
│ └ BCVRateResponse.java # Modelo de respuesta
|
│ └ BCVRateResponse.java # Modelo de respuesta
|
||||||
├ dist/
|
├ dist/
|
||||||
│ └ com.venezuela.bcvrate.jar # JAR compilado listo para instalar
|
│ └ com.venezuela.bcvrate.jar # JAR compilado listo para instalar
|
||||||
@@ -89,6 +105,7 @@ com.venezuela.bcvrate/
|
|||||||
├ migration/
|
├ migration/
|
||||||
│ ├ install_v10.sql # SQL para registrar proceso
|
│ ├ install_v10.sql # SQL para registrar proceso
|
||||||
│ └ BCV_ExchangeRateProcess_2Pack.xml # 2pack para despliegue
|
│ └ BCV_ExchangeRateProcess_2Pack.xml # 2pack para despliegue
|
||||||
|
├ .gitignore # Archivos ignorados por git
|
||||||
└ build.sh # Script de build para Linux
|
└ build.sh # Script de build para Linux
|
||||||
```
|
```
|
||||||
|
|
||||||
@@ -98,6 +115,7 @@ com.venezuela.bcvrate/
|
|||||||
- iDempiere v10 ejecutándose
|
- iDempiere v10 ejecutándose
|
||||||
- Acceso a consola Felix (http://servidor:8080/system/console)
|
- Acceso a consola Felix (http://servidor:8080/system/console)
|
||||||
- Acceso a la base de datos PostgreSQL
|
- Acceso a la base de datos PostgreSQL
|
||||||
|
- Conectividad a internet (bcv.today y bcv.org.ve)
|
||||||
|
|
||||||
### Paso 1: Instalar JAR en Felix
|
### Paso 1: Instalar JAR en Felix
|
||||||
1. Abrir consola Felix → **Bundles**
|
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`
|
- Verificar conectividad: `curl https://bcv.today/api/v1/rate.json`
|
||||||
- El plugin automáticamente intenta scraping del sitio web del BCV como respaldo
|
- 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
|
### Error SSL en scraping del BCV
|
||||||
- El plugin incluye SSL bypass para el sitio web del BCV
|
- El plugin incluye SSL bypass para el sitio web del BCV
|
||||||
- Si persiste, verificar que el bundle tiene la última versión
|
- Si persiste, verificar que el bundle tiene la última versión
|
||||||
@@ -216,11 +240,23 @@ chmod +x build.sh
|
|||||||
### Dual Source: API + Scraping
|
### Dual Source: API + Scraping
|
||||||
El plugin implementa dos fuentes de datos para máxima confiabilidad:
|
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
|
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.
|
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
|
### 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:
|
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
|
- Si la versión no cambia, el bundle anterior permanece activo
|
||||||
- Siempre incrementar `Bundle-Version` en MANIFEST.MF al actualizar
|
- 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
|
## 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)
|
### v1.0.11 (2026-07-03)
|
||||||
- Fix regex scraping: captura tasa USD específicamente (no EUR)
|
- Fix regex scraping: captura tasa USD específicamente (no EUR)
|
||||||
- Regex busca después de `USD</span>` en el HTML
|
- Regex busca después de `USD</span>` en el HTML
|
||||||
|
|||||||
Reference in New Issue
Block a user