Oznámenie sa objavilo dvadsať minút po pripojení. Počítadlo pod ním bežalo od predchádzajúceho rána, alebo od poslednej autentizácie účtu, a nič vo výstrahe nehovorilo ktoré. To je symptóm: pripomenutie pripnuté k niečomu inému než k spojeniu pred vami.

Riešením nie je lepšia výstraha. Je to rozhodnutie, ktoré hodiny požiadavka myslí, a potom pripnutie časovača k objektu, ktorý v tých hodinách existuje.

Čo sa spustilo a čo počítalo

Tri pravdepodobné zdroje dávajú rovnakú správu. Kalendárové pravidlo beží v pevnom miestnom čase a o tuneloch nevie nič. Počítadlo v klientovi sa kumuluje, kým je hore akékoľvek spojenie, a prežíva opätovné pripojenia. Politika brány ukončí reláciu na strane servera a najprv pošle varovanie.

Len posledné dve sa týkajú relácie, a ani tie sa nezhodujú. Počítadlo klienta meria, čo pozoroval miestny proces; brána meria, čo autentizovala a vyúčtovala. Spánok, zmena siete alebo reštart pozorovateľa ich môžu rozdeliť o hodiny, a preto sa výstraha a vynútené vypršanie rozchádzajú.

Tri hodiny za jednou požiadavkou

Začnite tým, že napíšete vetu, ktorú skutočne chcete. Varovať predtým, než brána ukončí toto spojenie, nie je tá istá požiadavka ako pripomenúť po dni pripojeného času. Nie je to ani to isté ako hlásiť, že táto relácia beží 23 hodín. Každá verzia pomenúva inú udalosť a iná komponenta na ňu musí odpovedať.

Potom skontrolujte, či dáta existujú. Miestna počiatočná časová pečiatka vám dá vek relácie bez závislosti od servera. Politika brány vám dá zostávajúcu životnosť, ale len ak ju brána vystavuje. Správa o používaní vám dá trvanie po fakte, a to nemôže riadiť predbežné oznámenie.

Pripnite časovač k relácii, nie k účtu

Najprv vyberte objekt. Účet môže držať niekoľko zariadení a niekoľko súbežných relácií, takže pripomenutie viazané na používateľské meno nemôže povedať, ktoré spojenie dosiahlo vek. Pripnite ho k profilu plus tej aktivácii a zrušte čakajúce oznámenie, keď aktivácia skončí.

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

Tá tabuľka je zmluva pre váš vlastný oznamovač, nie opis API spätného volania akéhokoľvek klienta. Čokoľvek inštalovaný produkt dokumentuje o stave spojenia, je zdroj, ku ktorému sa treba pripútať; kde vystavuje len udalosti autentizácie, povedzte to nahlas a prijmite hrubšie správanie namiesto odvodzovania relácie.

Otestujte to krátkym prahom

Nikdy neladte celodenný časovač celodenným čakaním. Pridajte konfigurovateľný prah, nastavte ho na tridsať sekúnd a vykonajte štyri prechody v poradí: pripojiť, počkať, odpojiť, znovu pripojiť. Každý prechod by mal dať presne jednu zmenu stavu a opätovné pripojenie by malo naplánovať nový termín, nie zdediť starý.

# 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

Sledujte časové pečiatky, nie formuláciu. Oznámenie, ktoré prichádza s časom začiatku predchádzajúcej relácie, pripnuté nesprávny objekt, a oznámenie, ktoré prichádza dvakrát na jeden termín, znamená, že príznak odoslania nebol nikdy uložený.

Spánok, opätovné pripojenie a zmeškané doručenie

Spánok rozbíja oba naivné návrhy. Monotónne odpočítavanie sa zastaví, kým stroj spí, termín podľa nástenných hodín sa stále posúva a časovač, ktorý sa spustí počas spánku, je doručený neskoro alebo vôbec. Rozhodnite, aké správanie požiadavka potrebuje, potom stroj uspäte cez prah a potvrďte to.

Doručenie si zaslúži rovnakú starostlivosť. Ak oznámenie nemožno zobraziť, zaraďte ho do frontu a pred konečným zobrazením znova overte, či cieľová relácia ešte existuje; inak je používateľ varovaný pred spojením, ktoré sa už skončilo. Vynútené odpojenie a obnova prihlasovacích údajov zostávajú mimo tejto cesty, pretože pripomenutie, ktoré potichu mení osud spojenia, je rozhodnutie politiky oblečené ako oznámenie.

Súvisiace články