Qualidade de rede e navegador nos pings de sala e espera

TLDR: Cada MeetingParticipantPing — de kind: room ou kind: wait — exibe no show do MeetingParticipant no Avo uma flag de qualidade de rede e o navegador do participante, derivados do payload diagnostics.

Visão geral

As duas seções do Avo (“Room pings” e “Wait pings”) usam o mesmo formatter (MeetingParticipants::FormatPings) — a única diferença é a relação filtrada por kind.

Fluxo

mermaid graph LR P["MeetingParticipantPing<br/>diagnostics jsonb"] --> RTT["network.rtt"] P --> UA["device.user_agent"] P --> DL["network.downlink"] RTT --> C["ClassifyNetworkQuality<br/>:good/:medium/:bad/:unknown"] UA --> B["ParseBrowser<br/>Chrome/Safari/Firefox/Edge"] C --> F["FormatPings<br/>linha no show do Avo"] B --> F DL --> F style P fill:#1f2937,color:#fff style F fill:#374151,color:#fff

Qualidade de rede

Classificada por MeetingParticipantPings::ClassifyNetworkQuality a partir de diagnostics.network.rtt (round-trip time, em ms):

rtt Qualidade
< 100 good
100..300 medium
> 300 bad
ausente/null unknown

network.effective_type não entra nesse cálculo — a Network Information API do navegador (que preenche esses campos) não é suportada em Safari/Firefox, então rtt é o dado mais confiável disponível. A linha exibida no Avo mostra só o resumo (horário, qualidade, navegador, downlink); o payload completo (diagnostics) pode ser consultado direto no console/banco.

Extraído por MeetingParticipantPings::ParseBrowser a partir de diagnostics.device.user_agent, via regex própria (sem gem). Navegadores reconhecidos: Chrome, Safari, Firefox, Edge. Qualquer outro user_agent retorna nil e cai no rótulo traduzido de fallback.

Uso estimado de banda na chamada

diagnostics.network.downlink é exibido como informação complementar (MeetingParticipantPing#humanized_downlink), mas não entra no cálculo da flag de qualidade. O rótulo evita o termo “velocidade da internet” de propósito: esse valor não é a velocidade total contratada pelo usuário, é uma estimativa do navegador sobre o tráfego observado só naquela aba/chamada — alguém com 100 Mbps de internet pode aparecer com um valor bem menor aqui, porque a chamada em si não estava usando toda essa banda no momento do ping. Também é impreciso por design: navegadores arredondam/embaçam esse valor de propósito por questões de privacidade (evitar fingerprinting). Não deve ser tratado como confiável para diagnóstico isolado.

Traduções

Os rótulos em pt-BR (labels da qualidade, downlink e os fallbacks de navegador/downlink não identificados) ficam em config/locales/pt-BR/models/meeting_participant_ping.yml, seguindo o mesmo padrão de MeetingParticipant#humanized_presence_status.

Referências