Săriți la conținut

Blog ·

Deconectat lângă un titlu care spune conectat

O valoare implicită prudentă este corectă singură și falsă lângă un fapt. Refacerea unei pagini de agent ca fișe a arătat două astfel de contraziceri.

De Provibr

Dacă un agent este conectat nu este o coloană. Este o cheie în Redis cu o durată de viață, împrospătată de punte și împinsă în browser printr-o legătură WebSocket. Coloana din baza de date de alături conține cu totul altceva: dacă agentul este înscris, în așteptare sau revocat, iar aceasta este administrare și nu prezență.

Componenta care desenează indicatorul de conexiune pornește de aceea pesimist. Fără valoare inițială desenează „deconectat” și devine verde abia atunci când a sosit instantaneul punții. Este intenționat și este, în sine, valoarea implicită corectă: a spune „conectat” înainte de a o ști este mai rău decât a o spune cu o secundă întârziere.

În sine este partea importantă.

Două afirmații despre un singur fapt

Refacerea paginii de detaliu a agentului ca grilă de fișe a adunat într-o singură vedere mai multe lucruri care stăteau pe file separate, și tocmai acolo o valoare implicită prudentă încetează să fie prudentă.

Banda de sănătate din capul paginii citește cheia de prezență pe server și se vopsește verde pentru un agent conectat. Însemnul de lângă numele agentului desenează același fapt dinspre browser, iar fără valoare inițială spunea deconectat. Mai jos, un panou despre mașina gazdă spunea, în cuvinte limpezi, că nu se măsoară nimic fiindcă agentul este deconectat, sub un titlu care spunea că agentul este conectat.

Niciuna dintre cele trei nu este falsă luată separat. Două dintre ele citesc aceeași cheie din Redis, una o citește în browser, iar în prima clipă după încărcare una are un răspuns și cealaltă încă așteaptă. Împrăștiați-le pe trei file și nimeni nu observă. Puneți-le într-un singur ecran și pagina se contrazice cu voce tare.

Același lucru se mai întâmplase o dată în lista agenților, unde o bandă de statistici număra agenți conectați din aceleași chei și stătea deasupra unor fișe care spuneau toate deconectat până sosea legătura. A fost runda în care componenta a învățat să primească o valoare inițială, iar lecția a fost consemnată atunci: din două afirmații despre același fapt, din aceeași sursă, în aceeași vedere, una este întotdeauna greșită.

Cum arată reparația este plictisitor. Cheia de prezență se citește o dată, pe server, și se dă ca valoare de pornire însemnului din antet, benzii de sănătate și panoului gazdei. Depozitul în direct câștigă în continuare de îndată ce sosește ceva. Regula de dedesubt nu este „plimbați valori inițiale”; este că o valoare implicită prudentă este o afirmație despre o componentă izolată, și că în clipa în care un al doilea element din aceeași vedere știe răspunsul, acea valoare a devenit minciuna.

Ce arată pagina, în ordinea de care are cineva nevoie

Restul rundei a fost așezare, ceea ce este altă muncă, dar nu una mai mică. Șase rânduri, în ordinea celui care deschide această pagină fiindcă ceva nu este în regulă.

  1. Dacă este ceva în neregulă, cu cele patru fapte care hotărăsc asta.
  2. Cifrele în direct: procesor, memorie, întârziere, timp de funcționare.
  3. Ce fel de mașină este aceasta, ce știe agentul să facă și încotro se merge apoi.
  4. Ultima oră de consum, ca grafice cu tabelele lor alături.
  5. Ce s-a întâmplat, ce s-a măsurat și unde s-a dus spațiul de pe disc.
  6. Versiune și licență, administrarea de dedesubt.

Judecată, apoi cifre, apoi context, apoi istorie, apoi administrare. Așezarea trăiește într-un fișier propriu, iar fișierul paginii rămâne stratul de date, cu singura întrebare care citire aparține cărei file. Datorită acestei despărțiri, runda următoare care adaugă o fișă atinge exact un loc, iar cea care adaugă o interogare îl atinge pe celălalt.

Schița cerea o plăcuță de disc pe rândul al doilea. Nu există niciuna, fiindcă punctul de telemetrie pe care agentul îl trimite poartă procesor, memorie, timp de funcționare și timp de dus-întors, și nimic altceva. Singurele cifre de disc din pagină privesc cache-ul de artefacte, și stau pe fișa acelui cache. A pune un număr sub o etichetă căreia nu îi aparține este felul în care un tablou de bord începe încet să mintă.

Șase lucruri lăsate deoparte, cu motive

În ceea ce nu stă pe această pagină au intrat mai multe hotărâri decât în ceea ce stă, iar motivele aparțin toate aceleiași familii: o comandă care nu își poate ține promisiunea este mai rea decât nicio comandă.

Un selector de interval pe grafice. Graficele arată ultima oră, dintr-o fereastră în direct. Tot ce este mai lung vine din agregate pregătite, iar citirea lor pe o pagină de sinteză este tocmai ceea ce regulile noastre interzic, fiindcă un agregat nu este aceeași măsurătoare la altă mărire. Există în schimb un drum către o pagină care o face cum trebuie.

Ping, repornire și reboot ca butoane. Rularea unui diagnostic cere o țintă, iar regulile despre ce unealtă este blocată în ce stare stau dinadins împreună într-un singur loc în loc să fie repetate pe fiecare buton. Așa că acțiunile rapide sunt legături către pagina care le are pe amândouă.

Butoane de actualizare, licență și jeton. Fișierul de licență poartă un secret, iar un secret aparține unui ecran și nu tuturor celor care îl pomenesc.

O legătură către jurnalul de schimbări al versiunii instalate. Manifestul pe care agentul îl raportează nu poartă o adresă, iar inventarea uneia din numărul de versiune dă o legătură care se rupe la prima livrare numită altfel.

O legătură către jurnalul complet. Pagina de activitate nu filtrează după agent, deci legătura ar livra o listă pe care clientul ar trebui apoi să o parcurgă cu ochiul. Aceasta este o promisiune pe care destinația nu o poate ține.

Nume prietenoase pentru capacitățile agentului. Ele apar ca acele cuvinte pe care le folosește protocolul, potrivit unei hotărâri anterioare. Un nume prietenos trebuie întreținut în nouă limbi și încetează să se potrivească cuvântului din jurnale în ziua în care cineva redenumește o capacitate.

Mai există și un gol rezervat. O fișă cu programul actualizărilor automate se construia în paralel și a ajuns pe fila setărilor, fiindcă este un formular, iar același formular în două locuri ale unei pagini este tocmai a doua sursă de adevăr pe care toată această așezare trebuia să o înlăture. Golul rămâne, cu o notă care spune că, dacă fișa se mută vreodată aici, se mută de la setări și nu se adaugă alături.

Anunțul care nu are voie să existe pe domeniul propriu al unui client

O fișă arată un îndemn atunci când lipsesc datele de firmă necesare facturării. Trei lucruri despre el au fost verificate în loc să fie presupuse.

Folosește predicatul care există deja pe tabloul de bord pentru „sunt complete datele de facturare” și nu un al doilea scris aici. Două predicate pentru o întrebare se despart, iar în ziua în care nu mai sunt de acord clientul vede îndemnul pe o pagină și pe cealaltă nu.

Apare numai pentru cineva care poate cu adevărat să acționeze, iar asta înseamnă rolul potrivit și suprafața potrivită.

Și nu are voie să existe deloc pe un domeniu de cont, gazda cu marcă proprie unde intră clienții clientului nostru. Asta s-a măsurat cu o sesiune adevărată în loc să fie dedusă: pe domeniul de cont pagina agenților întoarce 404, fiindcă toată acea suprafață este acolo absentă prin construcție, iar pe gazda panoului întoarce 200. Acel 404 nu este un control de acces care prinde ceva; pagina nu este acolo.

Cei trei pixeli care au devenit altă rundă

Așezarea a fost măsurată pe trei lățimi și, pe cea mai îngustă, în toate cele nouă limbi. La 390 și la 1440 nu se revărsa nimic.

La 768, fiecare pagină de panou din produs era cu trei pixeli mai lată decât fereastra. Nu această pagină: fiecare pagină. Este o singură citire, într-o limbă și o notație de monedă; runda care a desfăcut antetul a baleiat nouă limbi în două și a găsit între opt și treizeci și opt de pixeli. Cauza stătea în antetul comun, iar lucrul cinstit a fost să fie consemnat ca sarcină proprie în loc să fie reparat înăuntrul unei runde despre alt ecran, fiindcă un antet care se revarsă la o lățime într-o limbă nu este niciodată o problemă de trei pixeli. S-a dovedit a fi o eroare de categorie despre ce lățime citea antetul, iar asta stă în o bară mai îngustă decât fereastra.

Ce am consemna

  1. O valoare implicită prudentă este o afirmație despre o singură componentă. Lângă un al doilea element care știe răspunsul, ea devine cea falsă.
  2. Două elemente care desenează un fapt trebuie să împartă valoarea de pornire. Citiți-o o dată pe server și trimiteți-o mai departe.
  3. Prezența nu este starea. Una este o cheie cu durată de viață, cealaltă este administrare; o coloană care spune „înscris” nu spune nimic despre acum.
  4. Țineți așezarea în afara stratului de date. Un fișier pentru ce se citește, unul pentru unde ajunge, iar fiecare rundă atinge unul dintre ele.
  5. Nu puneți un număr sub o etichetă căreia nu îi aparține. Dacă schița cere o plăcuță pe care telemetria nu o poate umple, răspunsul este: nicio plăcuță.
  6. O comandă a cărei destinație nu poate ține promisiunea este mai rea decât nicio comandă. O legătură de jurnal care nu știe să filtreze, o legătură de schimbări fără adresă.
  7. Măsurați absența cu o sesiune adevărată. „Această pagină nu există pe acea gazdă” este o afirmație care merită o cerere și nu o citire a codului.

Ca să fie limpede ce este aceasta: pagina este construită și funcționează, măsurată cu o trecere de accesibilitate și un baleiaj de browser în ambele așezări de gazdă. A fost rulată doar față de un server de dezvoltare, deci aici nu se spune nimic despre deplasarea așezării pe o compilare de producție, iar legătura în direct a fost blocată în timpul măsurării, deci drumul prezenței este dovedit dinspre server și nu de la un capăt la altul.

Din munca de platformă la Provibr. Defectul de antet pe care această pagină l-a scos la iveală se află în o bară mai îngustă decât fereastra, iar cum se mențin agenții la zi fără ca cineva să apese ceva se află în actualizați la trei dimineața.

Începeți cu o gazdă și un agent

Creați un cont, instalați agentul cu o singură comandă și conectați primul dumneavoastră host Proxmox. Perioada de probă durează 14 zile și nu cere date de plată.