81 lines
4.5 KiB
Markdown
81 lines
4.5 KiB
Markdown
# TASK-035-real-a2s-capture-validation-comunidad-hispana-02
|
|
|
|
## Goal
|
|
Validar una captura A2S real extremo a extremo contra Comunidad Hispana #02, confirmando que el colector puede consultar el servidor, normalizar la respuesta y persistir snapshots útiles junto a los ya existentes de Comunidad Hispana #01.
|
|
|
|
## Context
|
|
El proyecto ya ha validado el flujo real A2S con Comunidad Hispana #01. Ahora se ha verificado un segundo servidor real de Comunidad Hispana con:
|
|
- Host/IP: `152.114.195.150`
|
|
- Query Port: `7878`
|
|
- Game Port: `7877`
|
|
|
|
El objetivo es confirmar que el pipeline soporta múltiples targets reales y que la persistencia y los endpoints históricos siguen siendo coherentes.
|
|
|
|
## Steps
|
|
1. Revisar la configuración actual de targets A2S y el target recién añadido para Comunidad Hispana #02.
|
|
2. Ejecutar el colector o flujo equivalente contra este target real.
|
|
3. Confirmar que el backend consulta correctamente el host `152.114.195.150` con query port `7878`.
|
|
4. Validar que la respuesta A2S obtenida se normaliza al modelo interno.
|
|
5. Persistir al menos un snapshot real de Comunidad Hispana #02 en la base local actual.
|
|
6. Verificar que los endpoints históricos reflejan este nuevo servidor junto al ya existente.
|
|
7. Revisar el comportamiento si la consulta falla, timeout o devuelve datos parciales.
|
|
8. Actualizar la documentación mínima necesaria sobre cómo repetir esta validación en local.
|
|
9. Mantener el alcance centrado en validación del flujo real, no en nuevas features.
|
|
|
|
## Files to Read First
|
|
- AGENTS.md
|
|
- ai/repo-context.md
|
|
- ai/architecture-index.md
|
|
- backend/README.md
|
|
- backend/app/a2s_client.py
|
|
- backend/app/server_targets.py
|
|
- backend/app/collector.py
|
|
- backend/app/normalizers.py
|
|
- backend/app/snapshots.py
|
|
- backend/app/storage.py
|
|
- backend/app/routes.py
|
|
- backend/app/payloads.py
|
|
|
|
## Expected Files to Modify
|
|
- backend/README.md
|
|
- backend/app/collector.py
|
|
- backend/app/normalizers.py
|
|
- backend/app/storage.py
|
|
- backend/app/routes.py
|
|
- backend/app/payloads.py
|
|
- opcionalmente otros archivos backend si son estrictamente necesarios para soportar mejor múltiples targets reales
|
|
|
|
## Constraints
|
|
- No tocar frontend salvo que una referencia mínima fuera imprescindible para mostrar el nuevo target una vez persistido.
|
|
- No añadir analítica avanzada.
|
|
- No añadir scraping de terceros.
|
|
- No introducir complejidad innecesaria.
|
|
- No hacer cambios destructivos.
|
|
- Mantener la validación centrada en Comunidad Hispana #02 y coexistencia con #01.
|
|
|
|
## Validation
|
|
- Se realiza una captura real A2S sobre Comunidad Hispana #02.
|
|
- Se persiste al menos un snapshot real en la base local.
|
|
- El flujo real queda documentado y es repetible en local.
|
|
- Los endpoints históricos reflejan ambos targets reales cuando existan snapshots.
|
|
- Los errores de consulta están razonablemente manejados.
|
|
|
|
## Change Budget
|
|
- Preferir menos de 6 archivos modificados.
|
|
- Preferir menos de 180 líneas cambiadas.
|
|
## Outcome
|
|
- `backend/app/a2s_client.py` eleva el timeout A2S por defecto de `3.0s` a `6.0s` para reducir timeouts transitorios al consultar varios targets reales seguidos.
|
|
- `backend/README.md` documenta la validacion local extremo a extremo con ambos targets reales por defecto y el resultado esperado cuando responden `#01` y `#02`.
|
|
- No fue necesario cambiar `collector.py`, `normalizers.py`, `storage.py`, `routes.py` ni `payloads.py` porque el pipeline ya normalizaba, persistia y exponia historico multi-target correctamente.
|
|
|
|
## Validation Result
|
|
- Ejecutado desde `backend/`: `python -m app.a2s_client 152.114.195.150 7878 --timeout 6`.
|
|
- Resultado: respuesta valida de `Comunidad Hispana #02` con `server_name=#02 [ESP] Comunidad Hispana - discord.comunidadhll.es - Spa Onl`, `map_name=StMarie`, `players=0`, `max_players=100`.
|
|
- Ejecutado desde `backend/`: `python -m app.collector --source a2s --no-fallback`.
|
|
- Resultado: `target_count: 2`, `success_count: 2`, snapshots persistidos para `comunidad-hispana-01` y `comunidad-hispana-02` en `backend/data/hll_vietnam_dev.sqlite3`.
|
|
- Ejecutado desde `backend/`: `python -c "from app.payloads import build_server_history_payload, build_server_detail_history_payload; ..."` para revisar historico.
|
|
- Resultado: `/api/servers/history` refleja ambos targets reales y `/api/servers/comunidad-hispana-02/history` devuelve el snapshot persistido de `#02`.
|
|
|
|
## Decision Notes
|
|
- Se ajusta el timeout por defecto en lugar de introducir reintentos o complejidad adicional porque la captura ya era funcional y el problema observado fue de sensibilidad temporal, no de arquitectura.
|