Status vier activeert een melding op de ene API en betekent iets anders op een andere, en de code laat helemaal geen verschil zien. Elke statuswaarde in NetworkManager hoort bij een benoemde opsomming, en de opsommingen zijn het er niet over eens wat een bepaald getal betekent. Een geheel getal uit een werkend fragment naar een andere callback kopiëren is dus geen overdracht van gedrag; het is een toeval dat wacht om te breken. Zoek eerst het type, dan wordt het getal leesbaar.

Een getal zonder type is een gerucht

Twee opsommingen zijn hier belangrijk. De ene beschrijft een actieve verbinding in het algemeen: onbekend, activerend, geactiveerd, deactiverend, gedeactiveerd. De andere beschrijft specifiek een VPN-verbinding, en die heeft meer haltes onderweg, waaronder voorbereiding, het opzetten van de verbinding, IP-configuratie en een authenticatieverzoek voordat er iets wordt geactiveerd. Hun nummering begint in beide gevallen bij nul en loopt daarna uiteen, dus de waarde die in de algemene opsomming gedeactiveerd betekent, belandt ergens midden in de VPN-reeks. Geen van beide headers is fout; ze beantwoorden verschillende vragen.

Gebruik de symbolische constante uit de geïnstalleerde header of binding in plaats van een literal. De naam overleeft een hernummering; het gehele getal niet.

Let op één verbinding, niet op de machine

Begin bij de profiel-UUID die je aangaat en het object van de actieve verbinding dat die activering heeft gemaakt. Een apparaatstatus, of de status van een andere tunnel, is geen vervanging, zelfs wanneer beide op hetzelfde moment veranderen. Houd de identiteit van het object bij de waarneming, zodat een later rapport kan zeggen welk profiel het heeft voortgebracht. De machine heeft veel statussen; de melding gaat over één daarvan.

Bepaal daarna wat de melding moet betekenen. Een verbinding die nooit de activering bereikte is een configuratiefout, en een sessie die actief was en daarna verdween is een verlies. Die verdienen verschillende woorden.

Zeg welke overgang je meldt

Bewaar de vorige status en vergelijk die met de nieuwe, in plaats van de nieuwe waarde los te testen. Een overgang naar een mislukte status en een overgang uit een geactiveerde status zijn verschillende gebeurtenissen, zelfs wanneer beide eindigen zonder iets verbondens. Noteer de reden-string ernaast, want die is vaak het enige deel waarop een gebruiker kan handelen.

Een bewuste verbreking is geen storing. Als de melding het verschil niet kan zien, leert ze mensen hem te negeren.

Houd de waarnemer in leven

Herhaald pollen mag geen extra waarschuwing opwerpen voor een status die niet is veranderd. Die ene regel verwijdert het grootste deel van de ruis die deze notifiers produceren.

Behandel ook het geval waarin de beheerder opnieuw start of het waargenomen object wordt vervangen. Een waarnemer die aan een verouderde identiteit is gebonden, valt stil precies op het moment dat er iets interessants gebeurt, en stilte ziet eruit als gezondheid. Ontdek het huidige object opnieuw na een verandering in de aanwezigheid van de beheerder, en noteer wanneer de herontdekking plaatsvond. Anders toont het logboek een tunnel die gewoon stopte met rapporteren.

Bezorg de melding waar de gebruiker is

Een bevoorrechte systeem-callback erft niet de meldingsdienst van een desktopsessie. Een bericht dat vanuit een handler op root-niveau wordt verzonden, kan zonder fout verdwijnen, wat een notifier oplevert die werkt bij handmatige tests en nooit in de praktijk. Bezorg in de sessie die het bureaublad bezit, of laat de eigen client van het bureaublad de melding opwerpen.

Geef de voorkeur aan de bestaande melding van de client als die het geval al dekt, want twee notifiers voor één gebeurtenis is een supportprobleem en geen redundantie. Bewaar de gebeurtenistijd, het profiel en de reden in het supportrecord, en laat wachtwoorden en volledige profielen erbuiten. Onthoud wat de melding is: een rapport over een waargenomen status, geen handhavingsmechanisme, want verkeer blokkeren terwijl de tunnel ontbreekt is een apart beleid met een eigen implementatie.

Gerelateerde artikelen