Viste Tester
View lato server che rispondono alle domande di supporto a livello di giocatore: "cosa ha caricato questo giocatore, quando, e perché una sessione è stata bloccata?". Basate su view SQL nello schema public, con prefisso support_*, oltre a un helper di lookup dell'identità.
Flusso di lookup
Il percorso di lookup canonico per una segnalazione di un tester è:
playroll_users_view
Risoluzione dell'identità. Mappa uno qualsiasi degli identificativi che un giocatore potrebbe citare a un user_id.
| Colonna | Tipo |
|---|---|
user_id | text |
steam_id | text |
steam_username | text |
avatar_url | text |
email | character varying |
discord_username | text |
support_player_upload_summary
Una riga per giocatore. Il punto di partenza per il triage: ambito dell'attività, completezza e intervallo temporale.
| Colonna | Tipo | Significato |
|---|---|---|
user_id, display_name, steam_id, avatar_url, discord_username | text | Identità. |
search_text | text | Stringa di identità concatenata e ricercabile. |
total_sessions_seen | bigint | Tutte le sessioni osservate per questo giocatore. |
sessions_with_uploads | bigint | Sessioni con almeno un artefatto arrivato. |
valid_current_sessions | bigint | Sessioni che soddisfano il contratto MP4+CSV. |
valid_future_triplet_sessions | bigint | Sessioni che soddisfano MP4+CSV+JSON. |
partial_upload_sessions / no_upload_sessions | bigint | Dettaglio dell'incompletezza. |
total_files, mp4_files, csv_files, json_files, ogg_files | numeric | Conteggi degli artefatti per tipologia. |
total_size_bytes, total_size_pretty | bigint / text | Byte totali caricati. |
first_upload_at, last_upload_at | timestamptz | Finestra di attività. |
games | text[] | Giochi visti per questo giocatore. |
sessions_with_known_duration, known_recorded_seconds, known_recorded_hours | bigint / numeric | Copertura della durata. |
duration_coverage_pct_for_valid_current_sessions | numeric | Frazione delle sessioni valide con durata nota. |
support_recording_sessions
Una riga per sessione di registrazione. La principale superficie di drill-down per "perché questa sessione non è stata caricata?".
| Colonna | Tipo | Significato |
|---|---|---|
user_id, display_name, steam_id, avatar_url, discord_username | text | Identità. |
session_id | text | Chiave della sessione. |
game, game_slug, game_name | text | Riferimenti al gioco. |
recording_session_status | text | Stato del ciclo di vita lato server. |
session_created_at, session_updated_at, client_ended_at, server_verified_at | timestamptz | Ancore del ciclo di vita. |
first_upload_at, last_upload_at | timestamptz | Finestra di upload. |
recording_started_at, recording_ended_at | timestamptz | Finestra di cattura. |
duration_seconds, duration_quality | bigint / text | Durata misurata ed etichetta di confidenza. |
total_files, mp4_count, csv_count, json_count, ogg_count | bigint | Conteggi degli artefatti. |
total_size_bytes | bigint | Byte della sessione. |
has_current_required_pair, has_future_required_triplet | boolean | Verifiche di contratto. |
upload_consistency_status | text | Coerenza tra gli artefatti attesi e quelli osservati. |
required_artifact_mode | text | Indica se la sessione è valutata rispetto al contratto attuale (coppia) o futuro (tripletta). |
uploadability_status | text | Esito finale: uploadable, blocked, partial, ecc. |
block_reason | text | Motivazione leggibile quando uploadability_status è di tipo bloccante. |
mp4_s3_keys, csv_s3_keys, json_s3_keys, ogg_s3_keys | text[] | Chiavi S3 per tipologia, per il fetch diretto. |
files | jsonb | Metadati completi per ciascun artefatto. |
detected_resolution | jsonb | Risoluzione(i) di cattura osservate per la sessione. |
support_recording_files
Una riga per artefatto caricato. Da usare quando si indaga su un file specifico o si costruisce un link S3 da condividere con un giocatore.
| Colonna | Tipo | Significato |
|---|---|---|
upload_id | uuid | Chiave dell'artefatto. |
user_id, display_name, steam_id, avatar_url, discord_username | text | Identità. |
session_id | text | Sessione di appartenenza. |
game_slug | text | Riferimento al gioco. |
file_type, filename, size_bytes | text / text / bigint | Descrittori dell'artefatto. |
status | text | Stato di upload dell'artefatto. |
uploaded_at | timestamptz | Quando è arrivato. |
recording_started_at, recording_ended_at | timestamptz | Finestra di cattura della sessione sorgente. |
s3_bucket, s3_key, s3_uri, s3_object_url | text | Riferimenti di destinazione. |
Helper operativi
Queste view pubbliche non sono di per sé rivolte a tester o VC, ma sono consumate dalle view qui sopra:
daily_upload_stats— conteggi giornalieri di file/utenti/sessioni/byte per tipologia.session_completion_status—expected_chunksvsuploaded_chunksper sessione, oltre ais_complete.complete_triplets— per ciascuna(user, session, chunk_dir)indica se mp4+csv+json sono tutti presenti.upload_summary_by_user— totali per utente, inclusa la lista dei giochi (forma più vecchia; preferiresupport_player_upload_summary).
Relazione con le dashboard OTEL
Le viste tester rispondono a "cosa è arrivato sul server?" — stato autorevole lato server. Le dashboard OTEL (es. Capture Pipeline) rispondono a "cosa ha provato a fare il client?" — telemetria emessa dal client. Quando un giocatore segnala una sessione mancante, l'ordine consigliato è:
- OTEL Errors & Auth per confermare che il client fosse autenticato e non bloccato.
- OTEL Capture Pipeline (client) per confermare che il funnel di registrazione abbia raggiunto
recording.stop. support_recording_sessionsper vedere se il server ha ricevuto la sessione e cosa indicanouploadability_status/block_reason.support_recording_filesper esaminare gli artefatti specifici e le loro destinazioni S3.