Die kennisgewing het twintig minute na die verbinding verskyn. Die teller daaronder het sedert die vorige oggend geloop, of sedert die rekening laas geauthentiseer het, en niks in die waarskuwing het gesê watter een nie. Dit is die simptoom: 'n herinnering wat aan iets anders as die verbinding voor jou gekoppel is.

Die oplossing is nie 'n beter waarskuwing nie. Dit is om te besluit watter klok die vereiste bedoel, en dan die tydhouer te bind aan 'n objek wat in daardie klok bestaan.

Wat afgegaan het, en wat dit getel het

Drie moontlike bronne lewer dieselfde boodskap. 'n Kalenderreel loop op 'n vaste plaaslike tyd en weet niks van tonnels nie. 'n Teller in die kliënt hoop op terwyl enige verbinding aktief is en oorleef herverbindings. 'n Gateway-beleid laat die sessie aan die bedienerkant verval en stuur eers 'n waarskuwing.

Net die laaste twee gaan oor 'n sessie, en selfs hulle stem nie saam nie. Die kliëntteller meet wat die plaaslike proses waargeneem het; die gateway meet wat dit geauthentiseer en verreken het. 'n Slaap, 'n netwerkverandering of 'n herbegin van die waarnemer kan die twee met ure skei, en daarom dryf die waarskuwing en die afgedwonge vervaldatum uitmekaar.

Drie klokke agter een vereiste

Begin deur die sin neer te skryf wat jy eintlik wil hê. Om te waarsku voordat die gateway hierdie verbinding beëindig, is nie dieselfde vereiste as om ná 'n dag se verbindingstyd te herinner nie. Dit is ook nie dieselfde as om te rapporteer dat hierdie sessie al 23 uur op is nie. Elke weergawe noem 'n ander gebeurtenis, en 'n ander komponent moet dit beantwoord.

Kyk dan of die data bestaan. 'n Plaaslike begintydstempel gee jou die ouderdom van die sessie sonder enige afhanklikheid van die bediener. 'n Gateway-beleid gee jou die oorblywende leeftyd, maar net as die gateway dit blootstel. 'n Gebruiksverslag gee jou die duur nadat dit gebeur het, wat nie 'n vooraf kennisgewing kan dryf nie.

Bind die tydhouer aan die sessie, nie die rekening nie

Kies eers die objek. 'n Rekening kan verskeie toestelle en verskeie gelyktydige sessies hê, so 'n herinnering wat op die gebruikersnaam gesleutel is, kan nie sê watter verbinding die ouderdom bereik het nie. Sleutel dit op die profiel plus daardie aktivering, en kanselleer die hangende kennisgewing wanneer die aktivering eindig.

Evidence you can readWhat it establishesWhere it misleads
Connection state changes to activeA session started nowDoes not carry the gateway's own session identifier
Duration reported at disconnectTotal service time for that sessionArrives too late for any advance notice
Interim usage updateTime accounted up to that updateStaleness equals the update interval
Local timestamp taken at activationAge of your observationResets whenever the observer restarts

Daardie tabel is 'n kontrak vir jou eie kennisgewer, nie 'n beskrywing van enige kliënt se callback-API nie. Wat die geïnstalleerde produk ook al vir verbindingstatus dokumenteer, is die bron waaraan jy moet bind; waar dit net authentiseringsgebeurtenisse blootstel, sê dit hardop en aanvaar die growwer gedrag eerder as om 'n sessie af te lei.

Toets dit met 'n kort drumpel

Moenie 'n tydhouer van 'n dag lank ontfout met 'n wag van 'n dag lank nie. Voeg 'n verstelbare drumpel by, stel dit op dertig sekondes, en voer vier oorgange in volgorde uit: verbind, wag, ontkoppel, herverbind. Elke oorgang moet presies een toestandsverandering lewer, en die herverbinding moet 'n nuwe spertyd skeduleer eerder as om die ou een te erf.

# current connection state and profile identity
nmcli -f GENERAL.STATE,GENERAL.CONNECTION connection show work

# the notifier unit you wrote: does it restart the deadline or resume it?
journalctl --user -u vpn-timer.service --since "-5 min" -o cat

Let op die tydstempels eerder as die bewoording. 'n Kennisgewing wat opdaag met die vorige sessie se begintyd het die verkeerde objek gebind, en 'n kennisgewing wat twee keer vir een spertyd opdaag, beteken die versendingvlag is nooit gestoor nie.

Slaap, herverbinding en gemiste aflewering

'n Slaapstand breek albei naïewe ontwerpe. 'n Monotoniese aftelling stop terwyl die masjien slaap, 'n muurklok-spertyd hou aan beweeg, en 'n tydhouer wat tydens die slaap afgaan, word laat of glad nie afgelewer nie. Besluit watter gedrag jou vereiste nodig het, en laat die masjien dan oor die drumpel slaap en bevestig dit.

Aflewering verdien dieselfde sorg. As die kennisgewing nie gewys kan word nie, stel dit in 'n tou, en kyk weer of die teikensessie nog bestaan voordat jy dit uiteindelik wys; anders word die gebruiker gewaarsku oor 'n verbinding wat al geëindig het. Gedwonge ontkoppeling en hernuwing van geloofsbriewe bly buite hierdie pad, want 'n herinnering wat die verbinding se lot stilweg verander, is 'n beleidsbesluit in 'n kennisgewing se klere.

Verwante artikels