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

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

Šta se aktiviralo i šta je brojalo

Tri vjerovatna izvora daju istu poruku. Kalendarsko pravilo radi u fiksnom lokalnom vremenu i ne zna ništa o tunelima. Brojač u klijentu se akumulira dok je bilo koja veza aktivna i preživljava ponovna povezivanja. Politika pristupnika ističe sesiju na strani servera i prvo šalje upozorenje.

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

Tri sata iza jednog zahtjeva

Počnite tako što ćete zapisati rečenicu koju zaista želite. Upozorenje prije nego što pristupnik prekine ovu vezu nije isti zahtjev kao podsjećanje nakon dana povezanog vremena. Nije isto ni kao izvještaj da je ova sesija aktivna 23 sata. Svaka verzija 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 zavisnosti od servera. Politika pristupnika daje vam preostali vijek, ali samo ako ga pristupnik izlaže. Izvještaj o korištenju daje vam trajanje nakon činjenice, a to ne može pokrenuti unaprijed obavijest.

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

Prvo odaberite objekat. Račun može držati nekoliko uređaja i nekoliko istovremenih sesija, pa podsjetnik vezan za korisničko ime ne može reći koja je veza dostigla starost. Vežite ga za profil plus 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 tabela je ugovor za vaš vlastiti obavještavač, a ne opis API-ja za povratne pozive bilo kojeg klijenta. Šta god instalirani proizvod dokumentuje o stanju veze, to je izvor za koji se treba vezati; gdje izlaže samo događaje autentifikacije, recite to naglas i prihvatite grublje ponašanje umjesto da izvodite sesiju.

Testirajte ga kratkim pragom

Nikada ne tražite grešku u cjelodnevnom tajmeru cjelodnevnim čekanjem. Dodajte konfigurabilni prag, postavite ga na trideset sekundi i izvedite četiri prelaza po redu: poveži, čekaj, prekini, ponovo poveži. Svaki prelaz treba proizvesti 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 oznake, a ne formulaciju. Obavijest koja stigne s vremenom početka prethodne sesije vezala je pogrešan objekat, a obavijest koja stigne dvaput za jedan rok znači da zastavica slanja nikada nije sačuvana.

Spavanje, ponovno povezivanje i propuštena dostava

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

Dostava zaslužuje istu pažnju. Ako se obavijest ne može prikazati, stavite je u red čekanja i ponovo 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 akreditiva ostaju izvan ovog puta, jer podsjetnik koji tiho mijenja sudbinu veze je politička odluka odjevena u obavijest.

Povezani članci