Oznámení se objevilo dvacet minut po připojení. Počítadlo pod ním běželo od předchozího rána, nebo od poslední autentizace účtu, a nic ve výstraze neříkalo které. To je symptom: připomínka vázaná na něco jiného než na spojení před vámi.

Řešení není lepší výstraha. Je to rozhodnutí, které hodiny požadavek míní, a potom připoutání časovače k objektu, který v těch hodinách existuje.

Co se spustilo a co počítalo

Tři pravděpodobné zdroje dávají stejnou zprávu. Kalendářní pravidlo běží v pevném místním čase a o tunelech neví nic. Počítadlo v klientovi se sčítá, dokud je jakékoli spojení nahoru, a přežívá opětovná připojení. Zásada brány ukončí relaci na straně serveru a nejprve pošle varování.

Jen poslední dva se týkají relace, a ani ty se neshodují. Počítadlo klienta měří, co pozoroval místní proces; brána měří, co autentizovala a zaúčtovala. Spánek, změna sítě nebo restart pozorovatele je mohou rozdělit o hodiny, a proto se výstraha a vynucené vypršení rozcházejí.

Tři hodiny za jedním požadavkem

Začněte tím, že napíšete větu, kterou skutečně chcete. Varovat předtím, než brána toto spojení ukončí, není stejný požadavek jako připomenout po dni připojeného času. Není to ani totéž jako hlásit, že tato relace běží 23 hodiny. Každá verze pojmenovává jinou událost a jiná komponenta na ni musí odpovědět.

Pak zkontrolujte, zda data existují. Místní počáteční časové razítko vám dá stáří relace bez závislosti na serveru. Zásada brány vám dá zbývající životnost, ale jen pokud ji brána vystavuje. Zpráva o využití vám dá dobu po faktu, a to nemůže řídit předběžné oznámení.

Připoutejte časovač k relaci, ne k účtu

Nejprve vyberte objekt. Účet může držet několik zařízení a několik souběžných relací, takže připomínka vázaná na uživatelské jméno nemůže říct, které spojení dosáhlo stáří. Připněte ji k profilu plus té aktivaci a zrušte čekající oznámení, když aktivace 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

Ta tabulka je smlouva pro váš vlastní oznamovatel, ne popis zpětného volání API jakéhokoli klienta. Co instalovaný produkt dokumentuje o stavu spojení, to je zdroj, ke kterému se máte připoutat; kde vystavuje jen události autentizace, řekněte to nahlas a přijměte hrubší chování místo odvozování relace.

Otestujte to krátkým prahem

Nikdy neladěte celodenní časovač celodenním čekáním. Přidejte konfigurovatelný práh, nastavte jej na třicet sekund a proveďte čtyři přechody v pořadí: připojit, počkat, odpojit, znovu připojit. Každý přechod má dát přesně jednu změnu stavu a opětovné připojení má naplánovat nový termín, ne zdědit 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á razítka, ne formulaci. Oznámení, které dorazí s počátečním časem předchozí relace, připoutalo špatný objekt, a oznámení, které dorazí dvakrát na jeden termín, znamená, že příznak odeslání nebyl nikdy uložen.

Spánek, opětovné připojení a zmeškané doručení

Spánek rozbíjí oba naivní návrhy. Monotónní odpočet se zastaví, dokud stroj spí, termín podle nástěnných hodin se dál posouvá a časovač, který se spustí během spánku, je doručen pozdě nebo vůbec. Rozhodněte, které chování požadavek potřebuje, pak stroj uspěte přes práh a potvrďte to.

Doručení si zaslouží stejnou péči. Pokud oznámení nelze zobrazit, zařaďte je do fronty a před konečným zobrazením znovu ověřte, že cílová relace stále existuje; jinak je uživatel varován před spojením, které už skončilo. Vynucené odpojení a obnova pověření zůstávají mimo tuto cestu, protože připomínka, která tiše mění osud spojení, je rozhodnutí zásady oblečené jako oznámení.

Související články