Pular para o conteúdo

Painéis de administração

O Fito tem dois painéis de administrador: Operations, que responde o Fito está funcionando, e Content, que responde o conteúdo está funcionando. Os dois leem um único fluxo de eventos, somente de acréscimo, e mais nada.

A maior parte de quem lê este guia não consegue abrir nenhum dos dois. Eles dependem de uma marca ativada à mão no banco de dados, e não existe pedido a fazer pela aplicação. Esta página os documenta mesmo assim, para que o guia cubra o que o Fito faz, e não só as partes que a maioria alcança.

Toda rota de administração pergunta a um mesmo portão — AdminGate — antes de qualquer outra coisa. O portão lê a marca users.is_admin guardada e responde de uma de duas formas:

Resposta Quando
401 As credenciais não nomeiam conta alguma. Entre de novo.
403 A conta existe e não carrega a marca. Nada que você faça com as suas credenciais muda isso.

Nada na aplicação jamais grava essa marca. Não há cadastro de administrador, botão de promoção, variável de ambiente de inicialização nem semeadura. Um operador promove uma conta rodando uma instrução no banco de dados, e essa instrução mora na documentação de arquitetura do repositório, não aqui.

Um aprendiz que vá direto para /admin encontra a recusa, e não um painel vazio:

This dashboard is for administrators. There is no request to make from here.

A recusa vem do servidor. A barra de navegação simplesmente não oferece a entrada Admin a uma conta sem a marca, então a interface nunca abre uma porta para uma recusa.

Dois endereços e uma barra de abas no alto dos dois.

Aba Endereço Pergunta que responde
Operations /admin O Fito está funcionando?
Content /admin/content O conteúdo está funcionando?

Três blocos, cada um declarando o período a que pertence, porque eles não compartilham um só.

O painel de Operations, com o seletor de janela acima dos quatro indicadores e do gráfico de endpoints que falham O painel de Operations, com o seletor de janela acima dos quatro indicadores e do gráfico de endpoints que falham

A interface do Fito só existe em inglês, então as imagens estão em inglês.

Três fichas de atalho — Last 7 days (o padrão), Last 30 days, Last 90 days. Elas delimitam os indicadores do topo e os endpoints com falha, e mais nada.

Só atalhos. A janela tem limite rígido de 1 a 90 dias, e um pedido fora disso é recusado, não estreitado em silêncio — quem pedisse dois anos e recebesse um acreditaria que a resposta cobria dois.

Quatro números, os quatro acompanhando o seletor acima deles.

Indicador O que conta
Active users Pessoas distintas que agiram na janela.
Signups Contas criadas na janela.
Events Linhas que o próprio fluxo registrou na janela.
Error rate Requisições com falha como fração do total, com uma palavra de situação ao lado.

Events é maior que os totais diários do gráfico de tráfego, e isso está certo, não é divergência. Ele conta as linhas do fluxo vindas das duas metades de captura, enquanto o gráfico conta requisições — um cadastro escreve uma linha de requisição e uma linha de publicação. Os dois respondem perguntas diferentes, e nenhum é o total do outro.

Error rate declara o próprio nível em palavras, nunca só em cor: Healthy abaixo de 1%, Elevated a partir de 1%, High a partir de 5%. Uma janela sem requisição alguma mostra 0% — uma janela parada não é uma queda.

Conta: requisições com falha por endpoint na janela do seletor, das piores para as menos ruins, no máximo dez.

Identidade: o método e o modelo de rota juntos — GET /cases/{id}, nunca um caminho cru com um id dentro. Uma requisição que não casa com nenhum endpoint catalogado aparece como <unmatched>.

Cada barra traz dois detalhamentos, porque uma contagem seca de falhas não leva ninguém a lugar nenhum:

  • os status, dos piores para os demais, cada um nomeado além de numerado — 404 Not found e 403 Forbidden apontam para reparos diferentes.
  • quantas vieram de um robô, como par e não como porcentagem: 0 of 17 e 62 of 62. Sessenta e dois de sessenta e dois vindos de um rastreador são ruído; nenhuma de dezessete em uma rota de entrada são dezessete pessoas que não conseguiram entrar.

Quando está vazio: Nothing failed in this window.

Conta: requisições HTTP por dia, separadas entre pessoas e robôs pelo user agent. As duas séries dividem o mesmo eixo, porque as duas contam requisições.

Janela: trinta dias, e não acompanha o seletor. Uma semana de colunas é pouco para mostrar um ritmo, então este gráfico mantém o próprio intervalo e o percorre sozinho com Earlier e Later, imprimindo o intervalo exato que está mostrando.

Quando está vazio: No traffic yet.

Os dois são de toda a vida, sem janela. Um funil é uma taxa de conversão sobre todo mundo que já chegou, e delimitá-lo contaria a mesma pessoa em uma etapa numa janela e em outra etapa na seguinte.

Funil Etapas
Learner funnel Signed up → Opened a case → Submitted
Author funnel Provisioned a technology → Pushed components → Drafted a case → Published a case

O funil de autores não enxerga nada criado antes de o fluxo começar. As tabelas por trás daquelas quatro etapas não têm data para datar uma linha antiga, então nenhuma foi preenchida retroativamente.

Um bloco, e uma janela sobre tudo.

Quatro fichas de atalho — All time (o padrão), Last 7 days, Last 30 days, Last 90 days. Toda seção da página acompanha o seletor, então um só título de período cobre a página inteira e todo número nela pertence à mesma fatia.

O padrão é o oposto do seletor de Operations, de sete dias, e de propósito: um indicador de operação responde está funcionando agora, enquanto uma linha de conteúdo responde isto funciona, de todo modo.

Conta: leituras de uma tecnologia na janela — as duas páginas dela, mais as listagens que alguém restringiu por ela. Da mais movimentada para a menos, no máximo dez.

Alcance: toda tecnologia registrada, inclusive as paradas. Uma tecnologia que ninguém consultou é uma barra em zero, não uma linha ausente. “Construímos para uma tecnologia que ninguém procura” é tanto a resposta que este gráfico existe para dar quanto a ponta movimentada.

Uma barra rotulada com um slug em vez de um nome é uma tecnologia renomeada depois daquelas visitas. As visitas são reais, então a barra é desenhada.

Quando está vazio: No technologies registered yet.

Uma tabela, não um gráfico — cinco medidas para cada caso passa do ponto em que mais cor ajuda.

Coluna O que traz
Case O título, ou o id quando o caso não tem nenhum.
Status Published ou Deprecated. Um rascunho não tem linha: está inacabado, não falhando.
Opens Atos. Uma volta conta de novo.
Submissions Atos, pela mesma regra.
Completion Pessoas — avaliadas sobre as que abriram, a mesma definição dos números públicos por caso.
Median score A mediana entre os envios, na faixa de 0 a 3.
Median time Tempo de relógio do primeiro acesso de um aprendiz até o primeiro envio dele.

Median score e Median time mostram —, nunca 0, quando nada foi medido. Zero é uma nota, e um caso em que ninguém foi avaliado não conquistou nenhuma. A ordenação joga essas linhas para o fim nas duas direções, então a ponta que você está olhando continua querendo dizer o que diz.

Alcance: todos os casos visíveis ao aprendiz, sem limite de linhas. O trabalho desta tabela é nomear o caso que não está funcionando, e qualquer ordenação com corte esconde justamente essa ponta. Um caso de que a janela não viu nada é uma linha de zeros.

Clique no título de uma coluna para ordenar. Uma medida começa decrescente, um nome começa de A a Z.

Conta: a média do próprio componente menos a média da plataforma na mesma janela, na faixa de 0 a 3. Negativo é mais difícil que a média, positivo é mais fácil.

Alcance: os dez mais distantes da média nas duas direções, não os dez mais baixos, reordenados do mais difícil em diante para que as barras cruzem a linha de base uma vez só.

A linha de base é a média da plataforma sobre todos os componentes da janela, não sobre os dez na tela — uma base calculada a partir das linhas visíveis se moveria toda vez que o corte mudasse.

Cada linha traz também quantos aprendizes distintos compõem a média. Uma média sobre um aprendiz e uma média sobre quarenta são afirmações diferentes, e só a segunda é evidência.

Quando está vazio: No components assessed in this window, que é também quando a linha de base está ausente, e não em zero.

Uma única tabela somente de acréscimo está por trás de todo número dos dois painéis, e também da aba Analytics do aprendiz. Nada é desenhado a partir de uma tabela de domínio ao vivo.

É esse o ponto. Uma tabela de domínio registra o estado atual e por acaso carrega uma data; ela não responde quantas pessoas olharam isto, porque olhar não muda nada. O fluxo responde, porque as leituras também são registradas.

Metade Escreve Preenche
A varredura da API Uma linha por requisição que chega à aplicação, inclusive tráfego anônimo e falhas O modelo de rota, o método, o status, a duração, o IP e o user agent
O publicador Os fatos que uma requisição não mostra — qual dos quatro desfechos de identidade um mesmo retorno produziu, as várias proficiências (proficiencies) que um resultado desdobra, e se um voto foi registrado, trocado ou retirado O detalhe de domínio, deixando os campos HTTP vazios

As duas metades nunca compartilham um nome de evento, então qualquer linha é atribuível a uma delas só pelo tipo.

  • Uma requisição que a camada de segurança recusa antes da aplicação — um caminho desconhecido, um token malformado. Ela nunca chega à varredura.
  • Os corpos das requisições. Quando a linha é escrita, o corpo já foi consumido. É por isso que vários endpoints dependem do publicador.
  • Qualquer coisa que não atravessa a API — ações locais ao terminal e interações que ficam dentro do navegador.

Os payloads de evento guardam só dimensões de domínio. Nunca uma senha, nunca um token de acesso ou de renovação, nunca um código ou estado de OAuth, nunca a URL de um pull request, nunca conteúdo enviado, nunca a nota de uma indicação e nunca um gabarito de rubrica ou de quiz.

Essa lista é garantida por um teste, e não deixada para a revisão, porque vários desses valores chegam como parâmetros de consulta em rotas que a varredura lê.

Cada leitura de painel escreve uma linha no mesmo fluxo que esses números contam.

O painel Content não consegue inflar o que mostra: as três leituras dele são registradas como visualização de painel, nunca como uma navegação, um acesso ou uma proficiência. O painel Operations não tem essa propriedade — o gráfico de tráfego dele conta requisições, e as leituras dele são requisições.

Os números e as datas dos dois painéis são escritos em en-US, e não no idioma do leitor — ponto como separador decimal, porcentagens como 1.2% e datas no formato Jul 6, 2026. Vale para qualquer leitor, seja qual for a configuração do navegador.

As três contagens dos cartões de resumo são a exceção, e dá para ver: elas saem como dígitos puros, sem separador de milhar, então uma janela de nove mil eventos aparece como 9312.

É deliberado. Os títulos, os nomes de eixo e as palavras de situação em volta desses números estão em inglês, então seguir o idioma do leitor produziria números em uma língua dentro de um cartão escrito em outra.