Obavijest se pojavila dvadeset minuta nakon spajanja. Brojač ispod nje radio je od prethodnoga jutra, ili od posljednje autentikacije računa, i ništa u upozorenju nije reklo koji od toga. To je simptom: podsjetnik vezan uz nešto drugo, a ne uz vezu koja je pred vama.

Rješenje nije bolje upozorenje. Rješenje je odlučiti koji sat zahtjev podrazumijeva, a zatim vezati tajmer uz objekt koji postoji na tom satu.

Što se aktiviralo i što je brojilo

Tri vjerojatna izvora daju istu poruku. Kalendarsko pravilo radi u fiksnom lokalnom vremenu i ne zna ništa o tunelima. Brojač u klijentu nakuplja se dok je bilo koja veza aktivna i preživljava ponovna spajanja. Politika pristupnika istječe sesiju na strani poslužitelja i prvo pošalje upozorenje.

Samo se posljednja dva odnose na sesiju, a ni ona se ne slažu. Brojač klijenta mjeri što je lokalni proces primijetio; pristupnik mjeri što je autentificirao i obračunao. Spavanje, promjena mreže ili ponovno pokretanje promatrača mogu ih razdvojiti na sate, i zato se upozorenje i prisilni istek razilaze.

Tri sata iza jednog zahtjeva

Počnite tako da zapišete rečenicu koju doista želite. Upozoriti prije nego pristupnik prekine ovu vezu nije isti zahtjev kao podsjetiti nakon dana povezanog vremena. Nije isto ni kao izvijestiti da je ova sesija aktivna 23 sata. Svaka inačica imenuje drugi događaj, a druga komponenta mora odgovoriti na njega.

Zatim provjerite postoje li podaci. Lokalna početna vremenska oznaka daje vam starost sesije bez ovisnosti o poslužitelju. Politika pristupnika daje vam preostali životni vijek, ali samo ako ga pristupnik izlaže. Izvješće o korištenju daje vam trajanje nakon činjenice, a to ne može pokretati unaprijed obavijest.

Privežite timer uz sesiju, a ne uz račun

Prvo odaberite objekt. Račun može držati nekoliko uređaja i nekoliko istodobnih sesija, pa podsjetnik vezan uz korisničko ime ne može reći koja je veza dosegnula starost. Vežite ga uz profil i to aktiviranje, i otkažite obavijest na čekanju kada aktiviranje završi.

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

Ta je tablica ugovor za vaš vlastiti obavještavač, a ne opis API-ja za povratne pozive bilo kojeg klijenta. Što god instalirani proizvod dokumentira o stanju veze, to je izvor za koji se treba vezati; gdje izlaže samo događaje autentikacije, recite to naglas i prihvatite grublje ponašanje umjesto da zaključujete o sesiji.

Testirajte ga kratkim pragom

Nikada ne tražite grešku u cjelodnevnom tajmeru cjelodnevnim čekanjem. Dodajte konfigurabilni prag, postavite ga na trideset sekundi i provedite četiri prijelaza redom: spoji, čekaj, prekini, ponovno spoji. Svaki prijelaz treba dati točno jednu promjenu stanja, a ponovno spajanje treba zakazati novi rok umjesto da naslijedi stari.

# 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

Gledajte vremenske oznake, a ne formulaciju. Obavijest koja stigne s vremenom početka prethodne sesije vezala je pogrešan objekt, a obavijest koja stigne dvaput za jedan rok znači da zastavica slanja nikada nije spremljena.

Spavanje, ponovno povezivanje i propuštena dostava

Spavanje razbija oba naivna dizajna. Monotono odbrojavanje stane dok stroj spava, rok po zidnom satu nastavlja se kretati, a tajmer koji se aktivira tijekom spavanja dostavlja se kasno ili nikako. Odlučite koje ponašanje vaš zahtjev traži, zatim uspavajte stroj preko praga i potvrdite.

Dostava zaslužuje istu pažnju. Ako se obavijest ne može prikazati, stavite je u red čekanja i ponovno provjerite postoji li ciljna sesija prije nego što je konačno prikažete; inače je korisnik upozoren na vezu koja je već završila. Prisilno prekidanje i obnavljanje vjerodajnica ostaju izvan ovog puta, jer podsjetnik koji tiho mijenja sudbinu veze jest politička odluka odjevena u obavijest.

Povezani članci