Blog ·
Offline neben einer Überschrift, die online sagt
Eine sichere Vorgabe stimmt für sich allein und ist neben einer Tatsache falsch. Eine Agentseite als Karten neu zu bauen zeigte zwei dieser Widersprüche.
Von Provibr
Ob ein Agent verbunden ist, ist keine Spalte. Es ist ein Schlüssel in Redis mit einer Lebensdauer, vom Gateway aufgefrischt und über einen WebSocket in den Browser geschoben. Die Datenbankspalte daneben enthält etwas ganz anderes: ob der Agent eingeschrieben, ausstehend oder widerrufen ist, und das ist Verwaltung und keine Anwesenheit.
Die Komponente, die die Verbindungsanzeige zeichnet, beginnt deshalb pessimistisch. Ohne Anfangswert zeichnet sie „offline“ und wird erst grün, sobald die Momentaufnahme des Gateways eingetroffen ist. Das ist Absicht und für sich allein die richtige Vorgabe: „verbunden“ zu sagen, bevor man es weiß, ist schlimmer, als es eine Sekunde zu spät zu sagen.
Für sich allein ist dabei der wichtige Teil.
Zwei Aussagen über eine Tatsache
Die Agentdetailseite als Kartenraster neu zu bauen brachte mehrere Dinge, die auf getrennten Reitern lagen, in ein Bild, und genau dort hört eine sichere Vorgabe auf, sicher zu sein.
Das Gesundheitsband oben auf der Seite liest den Anwesenheitsschlüssel auf dem Server und färbt sich für einen verbundenen Agenten grün. Der Chip neben dem Agentnamen zeichnet dieselbe Tatsache von der Browserseite, und ohne Anfangswert sagte er offline. Weiter unten sagte ein Feld über die Hostmaschine mit dürren Worten, es werde nichts gemessen, weil der Agent offline sei, unter einer Überschrift, die sagte, der Agent sei online.
Keines der drei ist für sich falsch. Zwei davon lesen denselben Redis-Schlüssel, eines liest ihn im Browser, und im ersten Moment nach dem Laden hat das eine eine Antwort und das andere wartet noch. Verteilen Sie sie auf drei Reiter, und niemand bemerkt es. Setzen Sie sie in ein Bild, und die Seite widerspricht sich laut.
Dasselbe war schon einmal in der Agentliste geschehen, wo ein Statistikband Online-Agenten aus genau diesen Schlüsseln zählte und über Karten stand, die alle offline sagten, bis die Verbindung stand. Das war die Runde, in der die Komponente lernte, einen Anfangswert anzunehmen, und die Lehre wurde damals aufgeschrieben: von zwei Aussagen über dieselbe Tatsache, aus derselben Quelle, im selben Bild, ist immer eine falsch.
Wie die Reparatur aussieht, ist langweilig. Der Anwesenheitsschlüssel wird einmal gelesen, auf dem Server, und dem Kopfchip, dem Gesundheitsband und dem Hostfeld als Startwert übergeben. Der Live-Speicher gewinnt weiterhin, sobald etwas eintrifft. Die Regel darunter lautet nicht „Anfangswerte herumreichen“; sie lautet, dass eine sichere Vorgabe eine Aussage über eine Komponente in Isolation ist, und dass sie in dem Moment, in dem ein zweites Element im selben Sichtfeld die Antwort kennt, zur Lüge geworden ist.
Was die Seite zeigt, in der Reihenfolge, die jemand braucht
Der Rest der Runde war Anordnung, was andere Arbeit ist, aber keine geringere. Sechs Reihen, in der Reihenfolge dessen, der diese Seite geöffnet hat, weil etwas nicht stimmt.
- Ist etwas los, mit den vier Tatsachen, die darüber entscheiden.
- Die Live-Zahlen: Prozessor, Speicher, Verzögerung, Betriebszeit.
- Was für eine Maschine das ist, was der Agent kann und wohin es weitergeht.
- Die letzte Stunde Verbrauch, als Diagramme mit ihren Tabellen daneben.
- Was geschehen ist, was gemessen wurde und wo der Plattenplatz steckt.
- Version und Lizenz, die Verwaltung darunter.
Urteil, dann Zahlen, dann Zusammenhang, dann Geschichte, dann Verwaltung. Die Anordnung steht in einer eigenen Datei, und die Seitendatei bleibt die Datenschicht und hält nur fest, welcher Lesevorgang zu welchem Reiter gehört. Durch diese Trennung berührt die nächste Runde, die eine Karte hinzufügt, genau eine Stelle, und die Runde, die eine Abfrage hinzufügt, die andere.
Der Entwurf verlangte eine Plattenkachel in der zweiten Reihe. Es gibt keine, denn der Telemetriepunkt, den der Agent sendet, trägt Prozessor, Speicher, Betriebszeit und Umlaufzeit und sonst nichts. Die einzigen Plattenzahlen auf der Seite betreffen den Artefaktzwischenspeicher, und die stehen auf dessen Karte. Eine Zahl unter eine Beschriftung zu setzen, zu der sie nicht gehört, ist der Weg, auf dem ein Dashboard langsam zu lügen beginnt.
Sechs Dinge, die weggelassen wurden, mit Gründen
In das, was nicht auf dieser Seite steht, sind mehr Entscheidungen geflossen als in das, was daraufsteht, und die Gründe gehören alle zur selben Familie: ein Bedienelement, das sein Versprechen nicht halten kann, ist schlimmer als keines.
Eine Bereichsauswahl an den Diagrammen. Die Diagramme zeigen die letzte Stunde aus einem Live-Fenster. Alles Längere kommt aus vorverdichteten Aufrollungen, und die auf einer Übersichtsseite zu lesen, verbieten unsere eigenen Regeln, denn eine Aufrollung ist nicht dieselbe Messung in einer anderen Vergrößerung. Stattdessen gibt es einen Weg zu einer Seite, die es sauber macht.
Ping, Neustart und Reboot als Schaltflächen. Eine Diagnose zu fahren verlangt ein Ziel, und die Regeln darüber, welches Werkzeug in welchem Zustand gesperrt ist, stehen bewusst zusammen an einer Stelle, statt je Schaltfläche wiederholt zu werden. Die Schnellaktionen sind deshalb Verweise auf die Seite, die beides hat.
Schaltflächen für Aktualisierung, Lizenz und Token. Die Lizenzdatei trägt ein Geheimnis, und ein Geheimnis gehört auf einen Bildschirm und nicht auf jeden, der es erwähnt.
Ein Verweis auf die Änderungsliste der installierten Version. Das Manifest, das der Agent meldet, trägt keine Adresse, und eine aus der Versionsnummer zu erfinden ergibt einen Verweis, der beim ersten anders benannten Release bricht.
Ein Verweis auf das vollständige Protokoll. Die Aktivitätsseite filtert nicht nach Agent, der Verweis lieferte also eine Liste, die der Kunde danach mit dem Auge durchsuchen müsste. Das ist ein Versprechen, das das Ziel nicht halten kann.
Freundliche Namen für die Fähigkeiten des Agenten. Sie stehen als die Wörter da, die das Protokoll verwendet, gemäß einer früheren Entscheidung. Ein freundlicher Name muss in neun Sprachen gepflegt werden und passt an dem Tag nicht mehr zum Wort in den Protokollen, an dem jemand eine Fähigkeit umbenennt.
Es gibt außerdem eine reservierte Lücke. Eine Karte mit dem Zeitplan für automatische Aktualisierungen wurde parallel gebaut und ist stattdessen auf dem Einstellungsreiter gelandet, denn sie ist ein Formular, und dasselbe Formular an zwei Stellen einer Seite ist genau die zweite Wahrheit, die diese Anordnung beseitigen sollte. Die Lücke bleibt, mit einer Notiz, die sagt: zieht die Karte je hierher, dann zieht sie von den Einstellungen weg und kommt nicht daneben.
Die Meldung, die es auf einer Kundendomain nicht geben darf
Eine Karte zeigt eine Aufforderung, wenn die für die Abrechnung nötigen Firmendaten fehlen. Drei Dinge daran wurden geprüft statt angenommen.
Sie benutzt das vorhandene Prädikat des Dashboards für „sind die Rechnungsdaten vollständig“ und kein zweites, hier geschriebenes. Zwei Prädikate für eine Frage laufen auseinander, und an dem Tag, an dem sie sich uneins sind, sieht der Kunde die Aufforderung auf der einen Seite und auf der anderen nicht.
Sie erscheint nur für jemanden, der tatsächlich handeln kann, und das heißt: die richtige Rolle und die richtige Oberfläche.
Und auf einer Kontodomain, dem White-Label-Host, auf dem die Kunden unseres Kunden sich anmelden, darf es sie überhaupt nicht geben. Das wurde mit einer echten Sitzung gemessen statt erschlossen: auf der Kontodomain liefert die Agentseite eine 404, denn diese ganze Oberfläche ist dort bauartbedingt abwesend, und auf dem Panelhost liefert sie 200. Diese 404 ist keine Zugriffskontrolle, die etwas abfängt; die Seite ist nicht da.
Die drei Pixel, aus denen eine weitere Runde wurde
Die Anordnung wurde auf drei Breiten gemessen und auf der schmalsten in allen neun Sprachen. Bei 390 und bei 1440 lief nichts über.
Bei 768 war jede Panelseite im Produkt drei Pixel breiter als das Fenster. Nicht diese Seite: jede Seite. Das ist eine Messung, in einer Sprache und einer Währungsschreibweise; die Runde, die die Kopfleiste auseinandernahm, durchlief neun Sprachen in zweien und fand acht bis achtunddreißig Pixel. Die Ursache lag in der gemeinsamen Kopfleiste, und das Ehrliche war, das als eigene Aufgabe aufzuschreiben, statt es innerhalb einer Runde über einen anderen Bildschirm zu beheben, denn eine Kopfleiste, die bei einer Breite in einer Sprache überläuft, ist nie ein Drei-Pixel-Problem. Es stellte sich als Kategorienfehler darüber heraus, welche Breite die Kopfleiste las, und das steht in eine Leiste schmaler als ihr Fenster.
Was wir aufschreiben würden
- Eine sichere Vorgabe ist eine Aussage über eine Komponente allein. Neben einem zweiten Element, das die Antwort kennt, wird sie zur falschen.
- Zwei Elemente, die eine Tatsache zeichnen, brauchen denselben Startwert. Lesen Sie ihn einmal auf dem Server und reichen Sie ihn weiter.
- Anwesenheit ist kein Status. Das eine ist ein Schlüssel mit Lebensdauer, das andere Verwaltung; eine Spalte, die „eingeschrieben“ sagt, sagt nichts über jetzt.
- Halten Sie die Anordnung aus der Datenschicht heraus. Eine Datei dafür, was gelesen wird, eine dafür, wohin es geht, und jede Runde berührt eine davon.
- Setzen Sie keine Zahl unter eine Beschriftung, zu der sie nicht gehört. Verlangt der Entwurf eine Kachel, die die Telemetrie nicht füllen kann, lautet die Antwort: keine Kachel.
- Ein Bedienelement, dessen Ziel das Versprechen nicht halten kann, ist schlimmer als keines. Ein Protokollverweis, der nicht filtern kann, ein Änderungslistenverweis ohne Adresse.
- Messen Sie Abwesenheit mit einer echten Sitzung. „Diese Seite gibt es auf jenem Host nicht“ ist eine Behauptung, die eine Anfrage verdient statt eines Blicks in den Code.
Zur Klarheit: die Seite ist gebaut und läuft, gemessen mit einem Zugänglichkeitsdurchgang und einem Browserdurchlauf in beiden Hostlagen. Sie wurde nur gegen einen Entwicklungsserver ausgeführt, hier steht also nichts über Layoutverschiebung auf einem Produktionsbuild, und die Live-Verbindung war während der Messung blockiert, der Anwesenheitspfad ist also von der Serverseite bewiesen und nicht durchgängig.
Aus der Plattformarbeit an Provibr. Der Kopfleistendefekt, den diese Seite aufdeckte, steht in eine Leiste schmaler als ihr Fenster, und wie Agenten sich selbst aktuell halten, ohne dass jemand etwas drückt, steht in um drei Uhr nachts aktualisiert.