Qualidade de rede e navegador nos pings de sala e espera
TLDR: Cada
MeetingParticipantPing— dekind: roomoukind: wait— exibe no show doMeetingParticipantno Avo uma flag de qualidade de rede e o navegador do participante, derivados do payloaddiagnostics.
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.
Navegador
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
app/use_cases/meeting_participant_pings/classify_network_quality.rbapp/use_cases/meeting_participant_pings/parse_browser.rbapp/use_cases/meeting_participants/format_pings.rb- Specs de origem: meeting_ping_diagnostics, room_ping_network_quality_avo