Blogue ·
Sem ligação ao lado de um título que diz ligado
Um valor por omissão prudente está certo sozinho e errado ao lado de um facto. Refazer uma página de agente em cartões mostrou duas dessas contradições.
Por Provibr
Se um agente está ligado não é uma coluna. É uma chave em Redis com um tempo de vida, refrescada pela ponte e empurrada para o navegador por uma ligação WebSocket. A coluna da base de dados ao lado guarda coisa muito diferente: se o agente está inscrito, pendente ou revogado, e isso é administração e não presença.
O componente que desenha o indicador de ligação começa por isso pessimista. Sem valor inicial desenha «sem ligação», e só fica verde quando chegou o instantâneo da ponte. É deliberado e é, por si só, o valor por omissão certo: dizer «ligado» antes de o saber é pior do que dizê-lo um segundo mais tarde.
Por si só é a parte importante.
Duas afirmações sobre um mesmo facto
Refazer a página de detalhe do agente como grelha de cartões juntou numa só vista várias coisas que viviam em separadores distintos, e é aí que um valor por omissão prudente deixa de ser prudente.
A faixa de saúde no topo da página lê a chave de presença no servidor e pinta-se de verde para um agente ligado. A marca ao lado do nome do agente desenha o mesmo facto do lado do navegador, e sem valor inicial dizia sem ligação. Mais abaixo, um painel sobre a máquina anfitriã dizia, por palavras suas, que nada estava a ser medido porque o agente estava sem ligação, sob um título que dizia que o agente estava ligado.
Nenhuma das três é falsa isoladamente. Duas delas leem a mesma chave de Redis, uma lê-a no navegador, e no primeiro instante depois do carregamento uma tem resposta e a outra ainda espera. Reparta-as por três separadores e ninguém repara. Ponha-as num só ecrã e a página contradiz-se em voz alta.
O mesmo já tinha acontecido uma vez na lista de agentes, onde uma faixa de estatísticas contava agentes ligados a partir dessas mesmas chaves e ficava por cima de cartões que diziam todos sem ligação até a ligação chegar. Foi a ronda em que o componente aprendeu a aceitar um valor inicial, e a lição ficou escrita nessa altura: de duas afirmações sobre o mesmo facto, da mesma fonte, na mesma vista, há sempre uma errada.
O aspeto da reparação é aborrecido. A chave de presença é lida uma vez, no servidor, e entregue como valor de partida à marca do cabeçalho, à faixa de saúde e ao painel do anfitrião. O armazém em direto continua a ganhar assim que chega alguma coisa. A regra por baixo não é «passe valores iniciais»; é que um valor por omissão prudente é uma afirmação sobre um componente isolado, e que no momento em que um segundo elemento da mesma vista conhece a resposta, esse valor passou a ser a mentira.
O que a página mostra, na ordem de que alguém precisa
O resto da ronda foi arrumação, o que é outro trabalho mas não menor. Seis filas, na ordem de quem abre esta página porque algo está mal.
- Se se passa alguma coisa, com os quatro factos que o decidem.
- Os números em direto: processador, memória, latência, tempo ativo.
- Que género de máquina é esta, o que o agente sabe fazer e para onde se vai depois.
- A última hora de utilização, em gráficos com as suas tabelas ao lado.
- O que aconteceu, o que foi medido e onde está o espaço em disco.
- Versão e licença, a administração por baixo.
Juízo, depois números, depois contexto, depois história, depois administração. A arrumação vive num ficheiro próprio, e o ficheiro da página continua a ser a camada de dados, com apenas a questão de que leitura pertence a que separador. Graças a essa separação, a ronda seguinte que acrescente um cartão toca exatamente um sítio, e a que acrescente uma consulta toca o outro.
O esboço pedia um mosaico de disco na segunda fila. Não há nenhum, porque o ponto de telemetria que o agente envia leva processador, memória, tempo ativo e tempo de ida e volta, e mais nada. Os únicos números de disco da página dizem respeito à cache de artefactos, e estão no cartão dessa cache. Pôr um número sob um rótulo a que não pertence é o modo como um painel de controlo começa devagar a mentir.
Seis coisas deixadas de fora, com razões
Entraram mais decisões no que não está nesta página do que no que lá está, e as razões pertencem todas à mesma família: um controlo que não pode cumprir a sua promessa é pior do que controlo nenhum.
Um seletor de intervalo nos gráficos. Os gráficos mostram a última hora, de uma janela em direto. Tudo o que for mais longo vem de agregados preparados, e lê-los numa página de resumo é precisamente o que as nossas próprias regras proíbem, porque um agregado não é a mesma medição noutra ampliação. Há em vez disso um caminho para uma página que o faz como deve ser.
Ping, reinício e arranque como botões. Correr um diagnóstico exige um alvo, e as regras sobre que ferramenta está bloqueada em que estado vivem de propósito juntas num só sítio em vez de serem repetidas por botão. As ações rápidas são portanto ligações para a página que tem ambas.
Botões de atualização, licença e token. O ficheiro de licença leva um segredo, e um segredo pertence a um ecrã e não a todos os que o mencionam.
Uma ligação ao registo de alterações da versão instalada. O manifesto que o agente comunica não leva endereço, e inventar um a partir do número de versão dá uma ligação que parte na primeira entrega com outro nome.
Uma ligação ao registo completo. A página de atividade não filtra por agente, portanto a ligação entregaria uma lista que o cliente teria depois de percorrer com o olho. É uma promessa que o destino não pode cumprir.
Nomes simpáticos para as capacidades do agente. Aparecem com as palavras que o protocolo usa, segundo uma decisão anterior. Um nome simpático tem de ser mantido em nove línguas e deixa de bater certo com a palavra dos registos no dia em que alguém renomeia uma capacidade.
Há também um vão reservado. Um cartão com o calendário das atualizações automáticas estava a ser construído em paralelo, e acabou no separador das definições, porque é um formulário, e o mesmo formulário em dois sítios de uma página é precisamente a segunda verdade que toda esta arrumação devia eliminar. O vão fica, com uma nota que diz que, se o cartão alguma vez se mudar para aqui, muda-se das definições e não se acrescenta ao lado.
O aviso que não pode existir no domínio próprio de um cliente
Um cartão mostra um convite quando faltam os dados de empresa necessários à faturação. Três coisas a seu respeito foram verificadas em vez de supostas.
Usa o predicado que já existe no painel principal para «os dados de faturação estão completos» e não um segundo escrito aqui. Dois predicados para uma pergunta divergem, e no dia em que discordarem o cliente vê o convite numa página e não na outra.
Aparece apenas para quem pode de facto agir, e isso significa o papel certo e a superfície certa.
E não pode existir de todo num domínio de conta, o anfitrião com marca própria onde entram os clientes do nosso cliente. Isso foi medido com uma sessão verdadeira em vez de deduzido: no domínio de conta a página dos agentes devolve 404, porque toda essa superfície ali está ausente por construção, e no anfitrião do painel devolve 200. Esse 404 não é um controlo de acesso a apanhar alguma coisa; a página não está lá.
Os três píxeis que se tornaram outra ronda
A arrumação foi medida em três larguras e, na mais estreita, nas nove línguas. A 390 e a 1440 não transbordava nada.
A 768, todas as páginas do painel no produto eram três píxeis mais largas do que a janela. Não esta página: todas. É uma única leitura, numa língua e numa notação de moeda; a ronda que desmontou o cabeçalho varreu nove línguas em duas e encontrou de oito a trinta e oito píxeis. A causa estava no cabeçalho partilhado, e o honesto foi anotá-lo como tarefa própria em vez de o reparar dentro de uma ronda sobre outro ecrã, porque um cabeçalho que transborda a uma largura numa língua nunca é um problema de três píxeis. Revelou-se um erro de categoria sobre que largura o cabeçalho estava a ler, e está em uma barra mais estreita que a janela.
O que registaríamos
- Um valor por omissão prudente é uma afirmação sobre um só componente. Ao lado de um segundo elemento que conhece a resposta, torna-se o falso.
- Dois elementos que desenham um facto têm de partilhar o valor de partida. Leia-o uma vez no servidor e passe-o adiante.
- A presença não é o estado. Uma é uma chave com tempo de vida, o outro é administração; uma coluna que diz «inscrito» nada diz sobre agora.
- Mantenha a arrumação fora da camada de dados. Um ficheiro para o que é lido, outro para onde vai, e cada ronda toca num deles.
- Não ponha um número sob um rótulo a que não pertence. Se o esboço pede um mosaico que a telemetria não consegue encher, a resposta é: nenhum mosaico.
- Um controlo cujo destino não pode cumprir a promessa é pior do que controlo nenhum. Uma ligação de registo que não sabe filtrar, uma ligação de alterações sem endereço.
- Meça a ausência com uma sessão verdadeira. «Esta página não existe naquele anfitrião» é uma afirmação que merece um pedido em vez de uma leitura do código.
Para que fique claro o que isto é: a página está construída e a funcionar, medida com uma passagem de acessibilidade e uma varredura de navegador em ambas as disposições de anfitrião. Só foi exercitada contra um servidor de desenvolvimento, portanto aqui nada se diz sobre deslocamento de composição numa compilação de produção, e a ligação em direto estava bloqueada durante a medição, portanto o caminho da presença está provado do lado do servidor e não de ponta a ponta.
Do trabalho de plataforma na Provibr. O defeito de cabeçalho que esta página destapou está em uma barra mais estreita que a janela, e como os agentes se mantêm atualizados sem ninguém carregar em nada está em atualizados às três da manhã.