Які ж стан NetworkManager фактычна атрымаў ваш апавяшчальнік?
Адзін і той жа цэлы лік азначае дэактывавана ў адным пераліку і сярэдзіну наладкі ў іншым. Супастаўце тып стану з аб’ектам, перш чым капіяваць умову.
Стан чатыры запускае апавяшчэнне ў адным API і азначае нешта іншае ў другім, а код зусім не паказвае розніцы. Кожнае значэнне стану ў NetworkManager належыць іменнаму пераліку, і пералікі не згаджаюцца, што азначае дадзены лік. Таму капіяванне цэлага ліку з працоўнага фрагмента ў іншы зваротны выклік — гэта не перадача паводзін; гэта выпадак, які чакае, каб зламацца. Спачатку знайдзіце тып, і лік стане чытэльным.
Лік без тыпу — гэта чутка
Тут важныя два пералікі. Адзін апісвае актыўнае злучэнне ў цэлым: невядома, актывацыя, актыўнае, дэактывацыя, дэактывавана. Другі апісвае менавіта VPN-злучэнне, і ў ім больш прыпынкаў на шляху, уключаючы падрыхтоўку, наладжванне злучэння, канфігурацыю IP і запыт аўтэнтыфікацыі перш чым што-небудзь стане актыўным. Іх нумарацыя пачынаецца з нуля ў абодвух выпадках, а потым разыходзіцца, таму значэнне, якое азначае дэактывавана ў агульным пераліку, трапляе недзе ў сярэдзіну паслядоўнасці VPN. Ні адзін загаловак не памылковы; яны адказваюць на розныя пытанні.
Выкарыстоўвайце сімвалічную канстанту з усталяванага загалоўка або прывязкі, а не літарал. Імя перажывае перанумарацыю; цэлы лік — не.
Сачыце за адным злучэннем, а не за машынай
Пачніце з UUID профілю, які вас цікавіць, і аб’екта актыўнага злучэння, створанага гэтай актывацыяй. Стан прылады або стан іншага тунеля не з’яўляецца заменай, нават калі абодва змяняюцца ў адзін і той жа момант. Захоўвайце ідэнтычнасць аб’екта разам з назіраннем, каб пазнейшая справаздача магла сказаць, які профіль яго спарадзіў. У машыны шмат станаў; апавяшчэнне пра адзін з іх.
Затым вырашыце, што павінна азначаць апавяшчэнне. Злучэнне, якое так і не дасягнула актывацыі, — гэта збой наладкі, а сеанс, які быў актыўным і потым знік, — гэта страта. Яны заслугоўваюць розных слоў.
Скажыце, які пераход вы паведамляеце
Захавайце папярэдні стан і параўнайце яго з новым, замест таго каб правяраць новае значэнне ў ізаляцыі. Пераход у стан збою і пераход з актыўнага стану — розныя падзеі, нават калі абедзве сканчаюцца тым, што нішто не падключана. Запішыце радок прычыны побач, бо часта гэта адзіная частка, на якую карыстальнік можа паўплываць.
Наўмыснае адключэнне — не няспраўнасць. Калі апавяшчэнне не можа адрозніць, яно прывучыць людзей ігнараваць яго.
Трымайце назіральнік жывым
Паўторны апыт не павінен узнімаць чарговае папярэджанне для стану, які не змяніўся. Гэта адно правіла прыбірае большую частку шуму, які ствараюць гэтыя апавяшчальнікі.
Таксама апрацуйце выпадак, калі менеджар перазапускаецца або назіраны аб’ект замяняецца. Назіральнік, прывязаны да састарэлай ідэнтычнасці, змаўкае менавіта ў той момант, калі адбываецца нешта цікавае, а цішыня выглядае як здароўе. Пераадкрыйце бягучы аб’ект пасля змены прысутнасці менеджара і запішыце, калі адбылося пераадкрыццё. Інакш журнал пакажа тунель, які проста перастаў паведамляць.
Дастаўце апавяшчэнне туды, дзе карыстальнік
Прывілеяваны сістэмны зваротны выклік не атрымлівае службу апавяшчэнняў сеанса працоўнага стала. Паведамленне, адпраўленае з апрацоўшчыка ўзроўню root, можа знікнуць без памылкі, што дае апавяшчальнік, які працуе пры ручной праверцы і ніколі на практыцы. Дастаўляйце ў сеанс, які валодае працоўным сталом, або дазвольце ўласнаму кліенту працоўнага стала падняць апавяшчэнне.
Аддавайце перавагу існуючаму апавяшчэнню кліента, калі яно ўжо пакрывае гэты выпадак, бо два апавяшчальнікі для адной падзеі — гэта праблема падтрымкі, а не залішнасць. Захоўвайце час падзеі, профіль і прычыну ў запісе падтрымкі, а паролі і поўныя профілі трымайце па-за ім. Памятайце, што такое апавяшчэнне: справаздача пра назіраны стан, а не механізм прымусу, бо блакаванне трафіку пры адсутнасці тунеля — гэта асобная палітыка з уласнай рэалізацыяй.