Obavijest se pojavila dvadeset minuta poslije uspostavljanja veze. Brojač pod njom je išao još od prethodnog jutra, ili od trenutka kada je račun posljednji put potvrđen, a nijedna riječ u upozorenju nije kazala koja je od te dvije stvari. To je simptom: podsjetnik privezan za nešto drugo umjesto za vezu pred vama.

Rješenje nije bolje upozorenje. Rješenje je odluka o tome na koji sat zahtjev misli, a potom privezivanje tajmera za objekat koji na tom satu postoji.

Šta se aktiviralo i šta je brojalo

Tri vjerovatna izvora daju istu poruku. Kalendarsko pravilo radi u nepromjenljivom lokalnom vremenu i ništa ne zna o tunelima. Brojač u klijentu raste dok god je bilo kakva veza uspostavljena i preživljava ponovna povezivanja. Politika pristupnika gasi sesiju na strani servera i najprije pošalje upozorenje.

Samo se posljednja dva tiču sesije, a ni ona nisu saglasna. Brojač klijenta mjeri ono što je lokalni proces zapazio; pristupnik mjeri ono što je potvrdio i obračunao. Spavanje, promjena mreže ili restart posmatrača mogu ih razdvojiti satima, i zato se upozorenje i nametnuti istek sve više razilaze.

Tri sata iza jednog zahtjeva

Počnite tako što ćete napisati rečenicu koja vam je zaista potrebna. Upozoriti prije nego pristupnik prekine ovu vezu nije isti zahtjev kao podsjetiti poslije dana provedenog povezan. Nije isto ni kao izvijestiti da ova sesija traje već 23 sata. Svaka varijanta imenuje drugačiji događaj, i različita komponenta mora na njega odgovoriti.

Zatim provjerite postoje li podaci. Lokalni početni vremenski pečat daje starost sesije bez oslonca na server. Politika pristupnika daje preostali vijek, ali samo ako ga pristupnik izlaže. Izvještaj o potrošnji daje trajanje naknadno, a to ne može pokretati unaprijed poslano obavještenje.

Vežite tajmer za sesiju, ne za račun

Najprije izaberite objekat. Jedan račun može držati više uređaja i više istovremenih sesija, pa podsjetnik vezan za korisničko ime ne može kazati koja je veza dostigla taj staž. Privežite ga za profil i to aktiviranje, a kada aktiviranje istekne, poništite obavještenje koje čeka.

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 tabela je ugovor za vaš vlastiti obavještavač, a ne opis povratnog API-ja bilo kojeg klijenta. Ono što instalirani proizvod dokumentuje o stanju veze jest izvor za koji se treba vezati; gdje izlaže samo događaje potvrde, recite to glasno 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 podesiv prag, postavite ga na trideset sekundi i provedite četiri prelaza redom: poveži, čekaj, prekini, ponovo poveži. Svaki prelaz treba dati tačno jednu promjenu stanja, a ponovno povezivanje 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 pečate, a ne formulaciju. Obavještenje koje stigne s početnim vremenom prethodne sesije privezalo je pogrešan objekat, a obavještenje koje stigne dvaput za jedan rok znači da oznaka poslano nikada nije bila sačuvana.

Spavanje, ponovno povezivanje i propuštena dostava

Spavanje razbija oba naivna rješenja. Monotono odbrojavanje stane dok mašina spava, rok po zidnom satu nastavlja se kretati, a tajmer koji se aktivira tokom spavanja biva dostavljen kasno ili nikako. Odlučite koje ponašanje vaš zahtjev traži, pa uspavajte mašinu preko praga i potvrdite.

Dostava zaslužuje istu pažnju. Ako se obavještenje ne može prikazati, stavite ga u red i ponovo provjerite postoji li ciljna sesija prije nego što ga konačno prikažete; inače korisnik biva upozoren na vezu koja je već završila. Prisilno prekidanje i obnavljanje akreditiva ostaju izvan ove staze, jer podsjetnik koji tiho mijenja sudbinu veze jeste politička odluka obučena u obavještenje.

Povezani članci