Aller au contenu

Blog ·

Hors ligne à côté d’un titre disant en ligne

Une valeur par défaut prudente est juste seule et fausse à côté d’un fait. Refaire une page d’agent en cartes a rendu deux de ces contradictions visibles.

Par Provibr

Qu’un agent soit connecté n’est pas une colonne. C’est une clé dans Redis avec une durée de vie, rafraîchie par la passerelle et poussée vers le navigateur par une liaison WebSocket. La colonne de base de données voisine contient tout autre chose : si l’agent est inscrit, en attente ou révoqué, et cela relève de l’administration et non de la présence.

Le composant qui dessine l’indicateur de connexion démarre donc pessimiste. Sans valeur initiale, il dessine « hors ligne » et ne passe au vert qu’une fois l’instantané de la passerelle arrivé. C’est délibéré et c’est, en soi, la bonne valeur par défaut : dire « connecté » avant de le savoir est pire que le dire une seconde trop tard.

En soi, voilà la partie importante.

Deux affirmations sur un même fait

Refaire la page de détail de l’agent en grille de cartes a rassemblé dans une seule vue plusieurs choses qui vivaient sur des onglets séparés, et c’est là qu’une valeur par défaut prudente cesse d’être prudente.

Le bandeau de santé en haut de la page lit la clé de présence sur le serveur et se peint en vert pour un agent connecté. La pastille à côté du nom de l’agent dessine le même fait depuis le navigateur, et sans valeur initiale elle disait hors ligne. Plus bas, un panneau consacré à la machine hôte disait en toutes lettres que rien n’était mesuré parce que l’agent était hors ligne, sous un titre qui disait que l’agent était en ligne.

Aucune des trois n’est fausse isolément. Deux d’entre elles lisent la même clé Redis, une la lit dans le navigateur, et dans le premier instant après le chargement, l’une a une réponse et l’autre attend encore. Répartissez-les sur trois onglets et personne ne le remarque. Mettez-les dans un seul écran et la page se contredit à voix haute.

La même chose s’était déjà produite une fois sur la liste des agents, où un bandeau de statistiques comptait les agents en ligne à partir de ces mêmes clés et se trouvait au-dessus de cartes qui disaient toutes hors ligne jusqu’à l’arrivée de la liaison. C’est la ronde où le composant a appris à accepter une valeur initiale, et la leçon a été notée alors : de deux affirmations sur le même fait, issues de la même source, dans la même vue, il y en a toujours une de fausse.

À quoi ressemble la correction est ennuyeux. La clé de présence est lue une fois, sur le serveur, puis remise comme valeur de départ à la pastille d’en-tête, au bandeau de santé et au panneau de l’hôte. Le magasin en direct l’emporte toujours dès que quelque chose arrive. La règle sous-jacente n’est pas « faites circuler des valeurs initiales » ; c’est qu’une valeur par défaut prudente est une affirmation sur un composant isolé, et qu’au moment où un second élément de la même vue connaît la réponse, cette valeur est devenue le mensonge.

Ce que montre la page, dans l’ordre dont on a besoin

Le reste de la ronde a été de l’agencement, ce qui est un autre travail mais pas un moindre. Six rangées, dans l’ordre de celui qui ouvre cette page parce que quelque chose ne va pas.

  1. Y a-t-il un problème, avec les quatre faits qui en décident.
  2. Les chiffres en direct : processeur, mémoire, latence, temps de service.
  3. Quel genre de machine c’est, ce que l’agent sait faire, et où aller ensuite.
  4. La dernière heure d’utilisation, en graphiques avec leurs tableaux à côté.
  5. Ce qui s’est passé, ce qui a été mesuré, et où est passé l’espace disque.
  6. Version et licence, l’administration en dessous.

Jugement, puis chiffres, puis contexte, puis histoire, puis administration. L’agencement vit dans son propre fichier, et le fichier de la page reste la couche de données, avec pour seule question quelle lecture appartient à quel onglet. Grâce à cette séparation, la ronde suivante qui ajoute une carte touche exactement un endroit, et celle qui ajoute une requête touche l’autre.

L’esquisse demandait une tuile disque dans la deuxième rangée. Il n’y en a pas, car le point de télémétrie que l’agent envoie porte le processeur, la mémoire, le temps de service et le temps d’aller-retour, et rien d’autre. Les seuls chiffres de disque de la page concernent le cache d’artefacts, et ils sont sur la carte du cache d’artefacts. Mettre un nombre sous une étiquette à laquelle il n’appartient pas, c’est ainsi qu’un tableau de bord se met lentement à mentir.

Six choses laissées de côté, avec leurs raisons

Il est entré plus de décisions dans ce qui n’est pas sur cette page que dans ce qui y est, et les raisons appartiennent toutes à la même famille : une commande qui ne peut pas tenir sa promesse est pire que pas de commande du tout.

Un sélecteur de plage sur les graphiques. Les graphiques montrent la dernière heure, depuis une fenêtre en direct. Tout ce qui est plus long provient d’agrégats préparés, et les lire sur une page de synthèse est précisément ce que nos propres règles interdisent, car un agrégat n’est pas la même mesure à un autre grossissement. Il existe à la place un chemin vers une page qui le fait correctement.

Ping, redémarrage et amorçage comme boutons. Lancer un diagnostic demande une cible, et les règles disant quel outil est bloqué dans quel état vivent volontairement ensemble à un seul endroit plutôt que d’être répétées par bouton. Les actions rapides sont donc des liens vers la page qui possède les deux.

Des boutons de mise à jour, de licence et de jeton. Le fichier de licence porte un secret, et un secret appartient à un écran et non à tous ceux qui le mentionnent.

Un lien vers le journal des changements de la version installée. Le manifeste que l’agent rapporte ne porte pas d’adresse, et en inventer une à partir du numéro de version donne un lien qui casse dès qu’une livraison est nommée autrement.

Un lien vers le journal complet. La page d’activité ne filtre pas par agent : le lien livrerait donc une liste que le client devrait ensuite parcourir des yeux. C’est une promesse que la destination ne peut pas tenir.

Des noms conviviaux pour les capacités de l’agent. Elles figurent sous la forme des mots qu’emploie le protocole, suivant une décision antérieure. Un nom convivial doit être entretenu dans neuf langues et cesse de correspondre au mot des journaux le jour où quelqu’un renomme une capacité.

Il y a aussi un vide réservé. Une carte portant le calendrier des mises à jour automatiques était construite en parallèle, et elle a atterri sur l’onglet des réglages, car c’est un formulaire, et le même formulaire à deux endroits d’une page est précisément la seconde source de vérité que tout cet agencement devait supprimer. Le vide reste, avec une note disant que si la carte déménage un jour ici, elle déménage depuis les réglages et ne vient pas à côté.

L’avis qui ne doit pas exister sur le domaine propre d’un client

Une carte affiche une invitation lorsque les données d’entreprise nécessaires à la facturation manquent. Trois points la concernant ont été vérifiés plutôt que supposés.

Elle utilise le prédicat déjà présent sur le tableau de bord pour « les données de facturation sont-elles complètes » et non un second écrit ici. Deux prédicats pour une question divergent, et le jour où ils ne s’accordent plus, le client voit l’invitation sur une page et pas sur l’autre.

Elle n’apparaît que pour quelqu’un qui peut réellement agir, ce qui suppose le bon rôle et la bonne surface.

Et elle ne doit pas exister du tout sur un domaine de compte, l’hôte en marque blanche où se connectent les clients de notre client. Cela a été mesuré avec une vraie session plutôt que déduit : sur le domaine de compte, la page des agents renvoie 404, car toute cette surface y est absente par construction, et sur l’hôte du panneau elle renvoie 200. Ce 404 n’est pas un contrôle d’accès qui attrape quelque chose ; la page n’est pas là.

Les trois pixels devenus une autre ronde

L’agencement a été mesuré à trois largeurs et, à la plus étroite, dans les neuf langues. À 390 et à 1440, rien ne débordait.

À 768, chaque page du panneau dans le produit était trois pixels plus large que la fenêtre. Pas cette page : chaque page. C’est une seule lecture, dans une langue et une notation monétaire ; la ronde qui a démonté l’en-tête a balayé neuf langues dans deux et a trouvé de huit à trente-huit pixels. La cause se trouvait dans l’en-tête partagé, et la chose honnête était de l’inscrire comme une tâche à part plutôt que de le corriger à l’intérieur d’une ronde consacrée à un autre écran, car un en-tête qui déborde à une largeur dans une langue n’est jamais un problème de trois pixels. Il s’est révélé être une erreur de catégorie sur la largeur que l’en-tête lisait, et cela figure dans une barre plus étroite que sa fenêtre.

Ce que nous noterions

  1. Une valeur par défaut prudente est une affirmation sur un seul composant. À côté d’un second élément qui connaît la réponse, elle devient la fausse.
  2. Deux éléments qui dessinent un fait doivent partager la valeur de départ. Lisez-la une fois sur le serveur et transmettez-la.
  3. La présence n’est pas le statut. L’une est une clé avec une durée de vie, l’autre est de l’administration ; une colonne qui dit « inscrit » ne dit rien sur maintenant.
  4. Gardez l’agencement hors de la couche de données. Un fichier pour ce qui est lu, un pour l’endroit où cela va, et chaque ronde en touche un.
  5. Ne mettez pas un nombre sous une étiquette à laquelle il n’appartient pas. Si l’esquisse demande une tuile que la télémétrie ne peut pas remplir, la réponse est : pas de tuile.
  6. Une commande dont la destination ne peut pas tenir la promesse est pire que rien. Un lien de journal qui ne sait pas filtrer, un lien de journal des changements sans adresse.
  7. Mesurez l’absence avec une vraie session. « Cette page n’existe pas sur cet hôte » est une affirmation qui mérite une requête plutôt qu’une lecture du code.

Pour être clair : la page est construite et fonctionne, mesurée avec un passage d’accessibilité et un balayage de navigateur dans les deux dispositions d’hôte. Elle n’a été exercée que contre un serveur de développement, rien ici ne dit donc quoi que ce soit sur le décalage de mise en page d’une compilation de production, et la liaison en direct était bloquée pendant la mesure : le chemin de la présence est donc prouvé du côté serveur et non de bout en bout.

Issu du travail de plateforme sur Provibr. Le défaut d’en-tête que cette page a mis au jour figure dans une barre plus étroite que sa fenêtre, et comment les agents se tiennent à jour sans que personne n’appuie sur quoi que ce soit dans mis à jour à trois heures du matin.

Commencez avec un hôte et un agent

Créez un compte, installez l’agent avec une seule commande et connectez votre premier hôte Proxmox. La période d’essai dure 14 jours et ne demande aucune coordonnée de paiement.