Files
comunidadhll/docs/rcon-historical-ingestion-design.md
devRaGonSa 0cf98a1be9
Some checks failed
Codex Worker / run-codex-worker (push) Has been cancelled
initial export
2026-06-02 16:23:16 +02:00

7.1 KiB

RCON Historical Ingestion Design

Validation Date

  • 2026-03-25

Scope

Definir si la repo puede soportar historico por RCON con la implementacion actual y, si no puede hacerlo de forma retroactiva, dejar una arquitectura minima y defendible para una primera captura prospectiva.

Este documento se limita a la evidencia local de la repo. No asume comandos RCON no integrados ni capacidades externas no demostradas aqui.

Evidence Reviewed

  • backend/app/data_sources.py
  • backend/app/providers/rcon_provider.py
  • backend/app/rcon_client.py
  • backend/app/historical_ingestion.py
  • backend/app/historical_storage.py
  • backend/app/player_event_worker.py
  • backend/app/player_event_storage.py
  • backend/README.md
  • docs/rcon-data-capability-audit.md
  • docs/crcon-advanced-metrics-origin-audit.md

Current State In Code

La separacion entre live e historico ya existe en la seleccion de proveedores:

  • get_live_data_source() puede resolver rcon
  • get_historical_data_source() puede resolver rcon, pero hoy devuelve un placeholder que falla

La implementacion RCON real disponible en la repo es minima y esta concentrada en backend/app/rcon_client.py.

Comandos soportados hoy en codigo:

  • ServerConnect
  • Login
  • GetServerInformation

No hay evidencia local de otros comandos ya integrados para:

  • scoreboards por jugador
  • detalle de partida cerrada
  • eventos kill por kill
  • logs tacticos
  • historico retroactivo de matches cerrados

Payload Available Today

La salida efectiva que la repo consume desde RCON hoy es la normalizada por query_live_server_state():

  • external_server_id
  • server_name
  • status
  • players
  • max_players
  • current_map
  • region
  • source_name
  • snapshot_origin
  • source_ref

Inferencia basada en rcon_client.py:

  • el payload remoto de GetServerInformation contiene como minimo serverName, playerCount, maxPlayerCount y mapId o mapName
  • la repo no persiste hoy el payload crudo ni deriva entidades historicas de match o jugador a partir de RCON

Operational Frequency Assessment

Inferencia basada en la implementacion actual:

  • cada pasada por target abre una conexion TCP
  • realiza handshake ServerConnect
  • autentica con Login
  • ejecuta una consulta GetServerInformation

Con este alcance, una frecuencia inicial razonable para captura prospectiva es:

  • cada 60 a 300 segundos para operativa normal
  • 30 segundos solo como validacion o monitoreo puntual

No hay evidencia en la repo para defender un polling mas agresivo de forma sostenida ni para asegurar que aportaria historico competitivo util.

Viability Decision

Conclusion principal:

  • no viable hoy para historico real retroactivo de partidas cerradas con el cliente actual
  • viable solo para captura prospectiva

Motivos:

  • el cliente actual solo consulta estado live puntual
  • no existe base local para reconstruir partidas ya cerradas
  • no existe feed raw de eventos ni logs persistidos
  • RconHistoricalDataSource sigue siendo un placeholder y no puede sustituir a public-scoreboard

Conclusion secundaria:

  • una capa historica parcial por RCON si es defendible, pero solo si se define como captura prospectiva de muestras live y no como backfill de matches ya perdidos

Storage

Separar completamente la persistencia prospectiva RCON del historico actual historical_*.

Tablas minimas recomendadas:

  • rcon_historical_targets
    • identidad estable del target configurado
    • ultimo estado conocido de configuracion
  • rcon_historical_capture_runs
    • una fila por ejecucion del worker
    • estado, inicio, fin, errores y target scope
  • rcon_historical_samples
    • una fila por muestra y target
    • captured_at
    • identidad de target
    • payload normalizado
    • payload crudo opcional de GetServerInformation

Si se quiere checkpoint explicito desde la primera version:

  • rcon_historical_checkpoints
    • target_key
    • last_successful_capture_at
    • last_sample_at
    • last_error

Workers

Worker dedicado fuera del request path HTTP:

  • python -m app.rcon_historical_worker capture
  • python -m app.rcon_historical_worker loop --interval 120

Responsabilidades:

  • cargar HLL_BACKEND_RCON_TARGETS
  • consultar cada target con el cliente RCON actual
  • persistir run tracking
  • persistir muestras idempotentes por target y timestamp
  • actualizar checkpoints

Checkpoints

Como no existe backfill retroactivo real, el checkpoint no debe modelarse como pagina o offset de archivo historico. Debe modelarse como tiempo de captura.

Checkpoint minimo defendible:

  • ultimo captured_at exitoso por target
  • ultimo error por target
  • ultimo run exitoso global

Compatibility With public-scoreboard

Politica recomendada:

  • public-scoreboard sigue siendo la fuente historica principal para:
    • leaderboards semanales y mensuales
    • MVP V1 y V2
    • recent matches cerrados
    • player events derivados de la capa publica actual
  • RCON prospectivo convive en una linea paralela para:
    • cobertura temporal hacia delante
    • disponibilidad del servidor
    • actividad reciente
    • trazabilidad de frescura por target

Si en una fase posterior se habilita HLL_BACKEND_HISTORICAL_DATA_SOURCE=rcon, la degradacion minima correcta es esta:

  • solo exponer endpoints o bloques claramente soportados por la persistencia prospectiva RCON
  • no simular leaderboards completos cuando no existan
  • devolver metadata de cobertura y frescura antes que rankings vacios

Contratos defendibles en una primera lectura minima:

  • resumen de cobertura por servidor
  • actividad reciente por servidor
  • estado de frescura
  • rango temporal disponible

Contratos que deben seguir dependiendo de public-scoreboard hasta nueva evidencia:

  • weekly leaderboards completos
  • monthly leaderboards completos
  • monthly MVP V1
  • monthly MVP V2
  • player profiles competitivos
  • equivalencia completa con historico.html

Phase 1: Prospective Capture

Objetivo:

  • empezar a guardar muestras live RCON hacia delante

Incluye:

  • storage separado
  • worker dedicado
  • run tracking
  • checkpoints temporales
  • ejecucion manual y en loop

No incluye:

  • backfill retroactivo
  • paridad con public-scoreboard
  • endpoints competitivos nuevos

Phase 2: Minimal Operational Read Model

Objetivo:

  • leer la persistencia prospectiva RCON sin consultar RCON on-demand en HTTP

Incluye:

  • resumen por servidor
  • ultima muestra
  • cobertura disponible
  • actividad reciente

Phase 3: Competitive Metrics Only If Signal Improves

Objetivo:

  • evaluar si aparecen comandos, eventos o logs suficientes para enriquecer la capa historica RCON

Solo deberia abrirse si existe evidencia real de:

  • eventos reutilizables
  • scoreboards historificables
  • granularidad por jugador o por encounter

Final Recommendation

La decision tecnica correcta para esta repo es:

  • mantener public-scoreboard como fuente historica por defecto
  • tratar RCON historico como una linea prospectiva separada
  • no prometer reconstruccion retroactiva con el cliente actual
  • abrir implementacion incremental en dos tasks:
    • captura prospectiva persistida
    • lectura minima sobre persistencia local