Blog ·
Sin conexión junto a un título que dice conectado
Un valor por defecto prudente es correcto solo y falso junto a un hecho. Rehacer una página de agente como tarjetas mostró dos de esas contradicciones.
Por Provibr
Que un agente esté conectado no es una columna. Es una clave en Redis con un tiempo de vida, refrescada por la pasarela y enviada al navegador por un canal WebSocket. La columna de base de datos que hay al lado guarda algo muy distinto: si el agente está inscrito, pendiente o revocado, y eso es administración y no presencia.
El componente que dibuja el indicador de conexión empieza por eso pesimista. Sin valor inicial dibuja «sin conexión», y solo se pone verde cuando ha llegado la instantánea de la pasarela. Eso es deliberado y es, por sí solo, el valor por defecto correcto: decir «conectado» antes de saberlo es peor que decirlo un segundo tarde.
Por sí solo es la parte importante.
Dos afirmaciones sobre un mismo hecho
Rehacer la página de detalle del agente como una rejilla de tarjetas juntó en una sola vista varias cosas que estaban en pestañas separadas, y ahí es donde un valor por defecto prudente deja de ser prudente.
La banda de salud de la parte superior lee la clave de presencia en el servidor y se pinta de verde para un agente conectado. La marca junto al nombre del agente dibuja el mismo hecho desde el lado del navegador, y sin valor inicial decía sin conexión. Más abajo, un panel sobre la máquina anfitriona decía, con todas las letras, que no se estaba midiendo nada porque el agente estaba sin conexión, bajo un título que decía que el agente estaba conectado.
Ninguna de las tres es falsa por separado. Dos de ellas leen la misma clave de Redis, una la lee en el navegador, y en el primer instante tras la carga una tiene respuesta y la otra sigue esperando. Repártalas en tres pestañas y nadie lo nota. Póngalas en una pantalla y la página se contradice en voz alta.
Lo mismo ya había ocurrido una vez en la lista de agentes, donde una banda de estadísticas contaba agentes conectados a partir de esas mismas claves y estaba encima de tarjetas que decían todas sin conexión hasta que llegaba el WebSocket. Fue la ronda en la que el componente aprendió a aceptar un valor inicial, y la lección se dejó escrita entonces: de dos afirmaciones sobre el mismo hecho, de la misma fuente, en la misma vista, siempre hay una equivocada.
Cómo es el arreglo resulta aburrido. La clave de presencia se lee una vez, en el servidor, y se entrega como valor de partida a la marca de la cabecera, a la banda de salud y al panel del anfitrión. El almacén en vivo sigue ganando en cuanto llega algo. La regla de fondo no es «pase valores iniciales de un lado a otro»; es que un valor por defecto prudente es una afirmación sobre un componente aislado, y que en el momento en que un segundo elemento de la misma vista conoce la respuesta, ese valor se ha convertido en la mentira.
Lo que muestra la página, en el orden que alguien necesita
El resto de la ronda fue disposición, que es otro tipo de trabajo pero no uno menor. Seis filas, en el orden de quien abre esta página porque algo va mal.
- Si pasa algo, con los cuatro hechos que lo deciden.
- Los números en vivo: procesador, memoria, latencia, tiempo activo.
- Qué clase de máquina es, qué sabe hacer el agente y a dónde se va después.
- La última hora de uso, como gráficas con sus tablas al lado.
- Qué ha pasado, qué se ha medido y adónde se ha ido el espacio de disco.
- Versión y licencia, la administración de debajo.
Juicio, luego números, luego contexto, luego historia, luego administración. La disposición vive en su propio fichero, y el fichero de la página sigue siendo la capa de datos, con solo la cuestión de qué lectura corresponde a qué pestaña. Esa separación hace que la siguiente ronda que añada una tarjeta toque exactamente un sitio, y la ronda que añada una consulta toque el otro.
El boceto pedía una casilla de disco en la segunda fila. No la hay, porque el punto de telemetría que envía el agente lleva procesador, memoria, tiempo activo y tiempo de ida y vuelta, y nada más. Las únicas cifras de disco de la página son las de la caché de artefactos, y están en la tarjeta de la caché de artefactos. Poner un número bajo una etiqueta a la que no pertenece es la forma en que un cuadro de mando empieza a mentir despacio.
Seis cosas que quedaron fuera, con motivos
En lo que no está en esta página se han invertido más decisiones que en lo que sí está, y los motivos son todos de la misma familia: un control que no puede cumplir su promesa es peor que ningún control.
Un selector de rango en las gráficas. Las gráficas muestran la última hora, de una ventana en vivo. Todo lo más largo procede de agregados previos, y leerlos en una página de resumen es justo lo que prohíben nuestras propias reglas, porque un agregado no es la misma medición con otro nivel de acercamiento. En su lugar hay una ruta a una página que lo hace bien.
Ping, reinicio y rearranque como botones. Ejecutar un diagnóstico exige un destino, y las reglas sobre qué herramienta está bloqueada en qué estado viven a propósito juntas en un solo sitio en vez de repetirse por botón. Así que las acciones rápidas son enlaces a la página que tiene ambas cosas.
Botones de actualización, licencia y testigo. El fichero de licencia lleva un secreto, y un secreto corresponde a una pantalla y no a todas las que lo mencionan.
Un enlace al registro de cambios de la versión instalada. El manifiesto que informa el agente no lleva URL, e inventarla a partir del número de versión da un enlace que se rompe la primera vez que una versión se llame de otro modo.
Un enlace de «ver el registro completo». La página de actividad no filtra por agente, así que el enlace entregaría una lista que el cliente tendría luego que recorrer con la vista. Esa es una promesa que el destino no puede cumplir.
Nombres amables para las capacidades del agente. Aparecen como las palabras que usa el protocolo, según una decisión anterior. Un nombre amable hay que mantenerlo en nueve idiomas y deja de coincidir con la palabra de los registros el día en que alguien renombra una capacidad.
Hay además un hueco reservado. Una tarjeta con el calendario de actualizaciones automáticas se estaba construyendo en paralelo, y acabó en la pestaña de ajustes, porque es un formulario, y el mismo formulario en dos sitios de una página es justamente la segunda verdad que toda esta disposición debía eliminar. El hueco se queda, con una nota que dice que si la tarjeta se muda aquí alguna vez, se muda desde ajustes y no se añade al lado.
El aviso que no debe existir en el dominio propio de un cliente
Una tarjeta muestra un aviso cuando faltan los datos de empresa necesarios para facturar. Tres cosas de él se comprobaron en lugar de suponerse.
Usa el predicado que ya existe en el panel principal para «están completos los datos de facturación» y no un segundo escrito aquí. Dos predicados para una pregunta se separan, y el día en que discrepen el cliente verá el aviso en una página y no en la otra.
Aparece solo para quien puede actuar de verdad, y eso significa el rol correcto y la superficie correcta.
Y no debe existir en absoluto en un dominio de cuenta, el anfitrión con marca propia donde entran los clientes de nuestro cliente. Eso se midió con una sesión real en vez de razonarse: en el dominio de cuenta la página de agentes devuelve 404, porque toda esa superficie está ausente allí por construcción, y en el anfitrión del panel devuelve 200. Ese 404 no es un control de acceso atrapando algo; la página no está.
Los tres píxeles que se convirtieron en otra ronda
La disposición se midió en tres anchuras y, en la más estrecha, en los nueve idiomas. A 390 y a 1440 no se desbordó nada.
A 768, todas las páginas del panel del producto eran tres píxeles más anchas que la ventana. No esta página: todas. Es una sola lectura, en un idioma y una notación de moneda; la ronda que desmontó la cabecera barrió nueve idiomas en dos y encontró de ocho a treinta y ocho píxeles. La causa estaba en la cabecera compartida, y lo honesto fue anotarlo como tarea propia en lugar de arreglarlo dentro de una ronda sobre otra pantalla, porque una cabecera que se desborda a una anchura en un idioma nunca es un problema de tres píxeles. Resultó ser un error de categoría sobre qué anchura estaba leyendo la cabecera, y está en una barra más estrecha que su ventana.
Lo que dejaríamos por escrito
- Un valor por defecto prudente es una afirmación sobre un solo componente. Junto a un segundo elemento que conoce la respuesta, se convierte en el falso.
- Dos elementos que dibujan un hecho deben compartir el valor de partida. Léalo una vez en el servidor y páselo hacia abajo.
- La presencia no es el estado. Una es una clave con tiempo de vida, el otro es administración; una columna que dice «inscrito» no dice nada sobre ahora.
- Mantenga la disposición fuera de la capa de datos. Un fichero para lo que se lee, otro para dónde va, y cada ronda toca uno de los dos.
- No ponga un número bajo una etiqueta a la que no pertenece. Si el boceto pide una casilla que la telemetría no puede llenar, la respuesta es que no hay casilla.
- Un control cuyo destino no puede cumplir la promesa es peor que ningún control. Un enlace de registro que no puede filtrar, un enlace de cambios sin URL.
- Mida la ausencia con una sesión real. «Esta página no existe en ese anfitrión» es una afirmación que merece una petición y no una lectura del código.
Para que quede claro qué es esto: la página está construida y en funcionamiento, medida con una pasada de accesibilidad y un barrido de navegador en ambas disposiciones de anfitrión. Solo se ejecutó contra un servidor de desarrollo, así que aquí no se dice nada sobre desplazamiento de diseño en una compilación de producción, y la conexión en vivo estaba bloqueada durante la medición, así que el camino de la presencia está probado desde el lado del servidor y no de extremo a extremo.
Del trabajo de plataforma en Provibr. El defecto de cabecera que esta página destapó está en una barra más estrecha que su ventana, y cómo los agentes se mantienen al día sin que nadie pulse nada está en actualizado a las tres de la madrugada.