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.pybackend/app/providers/rcon_provider.pybackend/app/rcon_client.pybackend/app/historical_ingestion.pybackend/app/historical_storage.pybackend/app/player_event_worker.pybackend/app/player_event_storage.pybackend/README.mddocs/rcon-data-capability-audit.mddocs/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 resolverrconget_historical_data_source()puede resolverrcon, 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:
ServerConnectLoginGetServerInformation
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_idserver_namestatusplayersmax_playerscurrent_mapregionsource_namesnapshot_originsource_ref
Inferencia basada en rcon_client.py:
- el payload remoto de
GetServerInformationcontiene como minimoserverName,playerCount,maxPlayerCountymapIdomapName - 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
60a300segundos para operativa normal 30segundos 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
RconHistoricalDataSourcesigue siendo un placeholder y no puede sustituir apublic-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
Recommended Minimal Architecture
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_checkpointstarget_keylast_successful_capture_atlast_sample_atlast_error
Workers
Worker dedicado fuera del request path HTTP:
python -m app.rcon_historical_worker capturepython -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_atexitoso por target - ultimo error por target
- ultimo run exitoso global
Compatibility With public-scoreboard
Politica recomendada:
public-scoreboardsigue 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
Recommended Degradation Policy
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
Recommended Phases
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-scoreboardcomo 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