Блог ·
Не в мережі поруч із заголовком про мережу
Обережне усталене значення слушне саме по собі і хибне поруч із фактом. Перебудова сторінки агента на картки показала дві такі суперечності відразу.
Автор: Provibr
Чи агент приєднаний, не є стовпцем. Це ключ у Redis із часом життя, який оновлює шлюз і який потрапляє до браузера через звʼязок WebSocket. Сусідній стовпець бази даних тримає зовсім інше: чи агент зареєстрований, очікує або відкликаний, і це є адмініструванням, а не присутністю.
Складова, що малює позначку звʼязку, тому починає песимістично. Без початкового значення вона малює «не в мережі» і стає зеленою лише тоді, коли надійшов знімок від шлюзу. Це зроблено навмисно і саме по собі є слушним усталеним значенням: сказати «приєднаний» до того, як ви це знаєте, гірше, ніж сказати це на секунду пізніше.
Саме по собі і є важливою частиною.
Два твердження про один факт
Перебудова сторінки подробиць агента на сітку карток звела в один вигляд кілька речей, що жили на окремих вкладках, і саме там обережне усталене значення перестає бути обережним.
Смуга стану вгорі сторінки читає ключ присутності на сервері й фарбує себе зеленим для приєднаного агента. Позначка поруч із назвою агента малює той самий факт з боку браузера, і без початкового значення вона казала, що агента немає в мережі. Нижче панель про машину-господаря казала прямими словами, що нічого не міряється, бо агента немає в мережі, під заголовком, який казав, що агент у мережі.
Жодне з цих трьох не є хибним окремо. Два з них читають той самий ключ Redis, одне читає його в браузері, і в першу мить після завантаження одне має відповідь, а друге ще чекає. Розкладіть їх на три вкладки, і ніхто не помітить. Складіть їх в один екран, і сторінка суперечить собі вголос.
Те саме вже сталося одного разу в переліку агентів, де смуга статистики рахувала агентів у мережі з тих самих ключів і стояла над картками, які всі казали «не в мережі», доки не приходив звʼязок. То був раунд, у якому складова навчилася приймати початкове значення, і урок записали тоді ж: із двох тверджень про той самий факт, з того самого джерела, в тому самому вигляді, одне завжди хибне.
Вигляд полагодки нудний. Ключ присутності читається один раз, на сервері, і передається як початкове значення позначці заголовка, смузі стану і панелі господаря. Живе сховище й далі перемагає, щойно щось надходить. Правило під цим не звучить як «передавайте початкові значення»; воно звучить так, що обережне усталене значення є твердженням про складову в самоті, і що тієї миті, коли другий елемент у тому самому вигляді знає відповідь, це значення стало неправдою.
Що показує сторінка, у потрібному порядку
Решта раунду була впорядкуванням, а це інша робота, але не менша. Шість рядів, у порядку того, хто відкрив цю сторінку, бо щось негаразд.
- Чи щось сталося, із чотирма фактами, які це вирішують.
- Живі числа: процесор, памʼять, затримка, час роботи.
- Що це за машина, що вміє агент і куди йти далі.
- Остання година споживання, як графіки з таблицями поруч.
- Що сталося, що зміряно і де подівся простір на диску.
- Версія і ліцензія, керування під цим.
Судження, потім числа, потім контекст, потім історія, потім керування. Впорядкування живе у власному файлі, а файл сторінки лишається шаром даних, де стоїть тільки питання, яке читання належить якій вкладці. Завдяки цьому поділу наступний раунд, що додає одну картку, торкається рівно одного місця, а той, що додає один запит, торкається іншого.
Ескіз просив плитку диска в другому ряді. Її немає, бо точка телеметрії, яку надсилає агент, несе процесор, памʼять, час роботи і час обігу, і більше нічого. Єдині дискові числа на сторінці стосуються сховища артефактів, і вони стоять на картці того сховища. Поставити число під підписом, якому воно не належить, є способом, у який панель починає поволі брехати.
Шість речей, що лишилися осторонь, із причинами
У те, чого на цій сторінці немає, вкладено більше рішень, ніж у те, що на ній є, і причини всі належать до однієї родини: елемент керування, який не може справдити свою обіцянку, гірший за відсутність такого елемента.
Вибір діапазону на графіках. Графіки показують останню годину з живого вікна. Усе довше походить із заздалегідь згорнутих зведень, а читати їх на оглядовій сторінці забороняють наші власні правила, бо зведення не є тим самим вимірюванням в іншому наближенні. Натомість є шлях до сторінки, яка робить це як слід.
Ping, перезапуск і перезавантаження як кнопки. Запуск діагностики потребує цілі, а правила про те, який інструмент заблокований у якому стані, навмисно живуть разом в одному місці, а не повторюються біля кожної кнопки. Тож швидкі дії є посиланнями на сторінку, що має і те, і те.
Кнопки оновлення, ліцензії та токена. Файл ліцензії несе секрет, а секрет належить одному екрану, а не кожному, що його згадує.
Посилання на перелік змін встановленої версії. Маніфест, який повідомляє агент, адреси не несе, а вигадати її з номера версії означає посилання, що зламається на першому випуску, названому інакше.
Посилання на повний журнал. Сторінка діяльності не фільтрує за агентом, тож посилання видало б перелік, який клієнтові довелося б потім переглядати очима. Це є обіцянкою, якої призначення справдити не може.
Приязні назви для можливостей агента. Вони стоять тими словами, якими користується протокол, згідно з давнішим рішенням. Приязну назву доводиться доглядати девʼятьма мовами, і вона перестає сходитися зі словом у журналах того дня, коли хтось перейменує можливість.
Є також відведена прогалина. Картку з розкладом самооновлень будували паралельно, і вона опинилася на вкладці налаштувань, бо вона є формою, а та сама форма у двох місцях однієї сторінки і є тією другою правдою, яку все це впорядкування мало прибрати. Прогалина лишається із приміткою, що коли картка колись переїде сюди, вона переїде з налаштувань, а не додасться поруч.
Сповіщення, якого не має бути на власному домені клієнта
Одна картка показує спонуку, коли бракує даних компанії, потрібних для виставлення рахунків. Три речі про неї перевірено, а не припущено.
Вона вживає наявний предикат панелі для питання, чи повні платіжні дані, а не другий, написаний тут. Два предикати на одне питання розходяться, і того дня, коли вони не збігаються, клієнт бачить спонуку на одній сторінці і не бачить на іншій.
Вона зʼявляється лише для того, хто справді може діяти, а це означає слушну роль і слушну поверхню.
І її не має бути зовсім на домені облікового запису, тобто на господарі з власною маркою, куди входять клієнти нашого клієнта. Це зміряно справжньою сесією, а не виведено міркуванням: на домені облікового запису сторінка агентів повертає 404, бо вся та поверхня там відсутня за побудовою, а на господарі панелі повертає 200. Той 404 не є контролем доступу, що когось ловить; сторінки просто немає.
Три пікселі, що стали наступним раундом
Впорядкування зміряно на трьох ширинах, а на найвужчій і всіма девʼятьма мовами. На 390 і на 1440 не переповнювалося ніщо.
На 768 кожна сторінка панелі в продукті була на три пікселі ширша за вікно. Не ця сторінка: кожна сторінка. Це одне зчитування, однією мовою й в одному записі валюти; раунд, що розібрав смугу, пройшов девʼятьма мовами у двох і знайшов від восьми до тридцяти восьми пікселів. Причина лежала у спільній заголовковій смузі, і чесним було записати це окремим завданням, а не лагодити всередині раунду про інший екран, бо смуга, що переповнюється на одній ширині однією мовою, ніколи не є проблемою трьох пікселів. Виявилося, що то помилка категорії щодо того, яку ширину смуга читала, і про це є смуга, вужча за власне вікно.
Що ми б записали
- Обережне усталене значення є твердженням про одну складову на самоті. Поруч із другим елементом, що знає відповідь, воно стає хибним.
- Два елементи, що малюють один факт, мусять ділити початкове значення. Прочитайте його один раз на сервері й передайте вниз.
- Присутність не є станом. Одне є ключем із часом життя, друге є адмініструванням; стовпець, що каже «зареєстрований», про тепер не каже нічого.
- Тримайте впорядкування поза шаром даних. Один файл для того, що читається, один для того, куди воно йде, і кожен раунд торкається одного з них.
- Не ставте число під підписом, якому воно не належить. Якщо ескіз просить плитку, яку телеметрія наповнити не може, відповіддю є відсутність плитки.
- Елемент керування, чиє призначення обіцянки справдити не може, гірший за його відсутність. Посилання на журнал, що не вміє фільтрувати, посилання на зміни без адреси.
- Міряйте відсутність справжньою сесією. «Цієї сторінки на тому господарі немає» є твердженням, що заслуговує на запит, а не на читання коду.
Для ясності про те, чим це є: сторінку побудовано і вона працює, її зміряно проходом доступності та браузерною пробою в обох станах господаря. Її випробувано лише проти сервера розробки, тож тут не сказано нічого про зсув розкладки на виробничій збірці, а живий звʼязок під час вимірювання було заблоковано, тож шлях присутності доведено з боку сервера, а не від краю до краю.
Із платформної роботи над Provibr. Дефект заголовкової смуги, який ця сторінка виявила, описано в смуга, вужча за власне вікно, а як агенти тримають себе в актуальному стані без чийогось натискання, описано в оновлено о третій ночі.