Перейти до вмісту

Блог ·

Не в мережі поруч із заголовком про мережу

Обережне усталене значення слушне саме по собі і хибне поруч із фактом. Перебудова сторінки агента на картки показала дві такі суперечності відразу.

Автор: Provibr

Чи агент приєднаний, не є стовпцем. Це ключ у Redis із часом життя, який оновлює шлюз і який потрапляє до браузера через звʼязок WebSocket. Сусідній стовпець бази даних тримає зовсім інше: чи агент зареєстрований, очікує або відкликаний, і це є адмініструванням, а не присутністю.

Складова, що малює позначку звʼязку, тому починає песимістично. Без початкового значення вона малює «не в мережі» і стає зеленою лише тоді, коли надійшов знімок від шлюзу. Це зроблено навмисно і саме по собі є слушним усталеним значенням: сказати «приєднаний» до того, як ви це знаєте, гірше, ніж сказати це на секунду пізніше.

Саме по собі і є важливою частиною.

Два твердження про один факт

Перебудова сторінки подробиць агента на сітку карток звела в один вигляд кілька речей, що жили на окремих вкладках, і саме там обережне усталене значення перестає бути обережним.

Смуга стану вгорі сторінки читає ключ присутності на сервері й фарбує себе зеленим для приєднаного агента. Позначка поруч із назвою агента малює той самий факт з боку браузера, і без початкового значення вона казала, що агента немає в мережі. Нижче панель про машину-господаря казала прямими словами, що нічого не міряється, бо агента немає в мережі, під заголовком, який казав, що агент у мережі.

Жодне з цих трьох не є хибним окремо. Два з них читають той самий ключ Redis, одне читає його в браузері, і в першу мить після завантаження одне має відповідь, а друге ще чекає. Розкладіть їх на три вкладки, і ніхто не помітить. Складіть їх в один екран, і сторінка суперечить собі вголос.

Те саме вже сталося одного разу в переліку агентів, де смуга статистики рахувала агентів у мережі з тих самих ключів і стояла над картками, які всі казали «не в мережі», доки не приходив звʼязок. То був раунд, у якому складова навчилася приймати початкове значення, і урок записали тоді ж: із двох тверджень про той самий факт, з того самого джерела, в тому самому вигляді, одне завжди хибне.

Вигляд полагодки нудний. Ключ присутності читається один раз, на сервері, і передається як початкове значення позначці заголовка, смузі стану і панелі господаря. Живе сховище й далі перемагає, щойно щось надходить. Правило під цим не звучить як «передавайте початкові значення»; воно звучить так, що обережне усталене значення є твердженням про складову в самоті, і що тієї миті, коли другий елемент у тому самому вигляді знає відповідь, це значення стало неправдою.

Що показує сторінка, у потрібному порядку

Решта раунду була впорядкуванням, а це інша робота, але не менша. Шість рядів, у порядку того, хто відкрив цю сторінку, бо щось негаразд.

  1. Чи щось сталося, із чотирма фактами, які це вирішують.
  2. Живі числа: процесор, памʼять, затримка, час роботи.
  3. Що це за машина, що вміє агент і куди йти далі.
  4. Остання година споживання, як графіки з таблицями поруч.
  5. Що сталося, що зміряно і де подівся простір на диску.
  6. Версія і ліцензія, керування під цим.

Судження, потім числа, потім контекст, потім історія, потім керування. Впорядкування живе у власному файлі, а файл сторінки лишається шаром даних, де стоїть тільки питання, яке читання належить якій вкладці. Завдяки цьому поділу наступний раунд, що додає одну картку, торкається рівно одного місця, а той, що додає один запит, торкається іншого.

Ескіз просив плитку диска в другому ряді. Її немає, бо точка телеметрії, яку надсилає агент, несе процесор, памʼять, час роботи і час обігу, і більше нічого. Єдині дискові числа на сторінці стосуються сховища артефактів, і вони стоять на картці того сховища. Поставити число під підписом, якому воно не належить, є способом, у який панель починає поволі брехати.

Шість речей, що лишилися осторонь, із причинами

У те, чого на цій сторінці немає, вкладено більше рішень, ніж у те, що на ній є, і причини всі належать до однієї родини: елемент керування, який не може справдити свою обіцянку, гірший за відсутність такого елемента.

Вибір діапазону на графіках. Графіки показують останню годину з живого вікна. Усе довше походить із заздалегідь згорнутих зведень, а читати їх на оглядовій сторінці забороняють наші власні правила, бо зведення не є тим самим вимірюванням в іншому наближенні. Натомість є шлях до сторінки, яка робить це як слід.

Ping, перезапуск і перезавантаження як кнопки. Запуск діагностики потребує цілі, а правила про те, який інструмент заблокований у якому стані, навмисно живуть разом в одному місці, а не повторюються біля кожної кнопки. Тож швидкі дії є посиланнями на сторінку, що має і те, і те.

Кнопки оновлення, ліцензії та токена. Файл ліцензії несе секрет, а секрет належить одному екрану, а не кожному, що його згадує.

Посилання на перелік змін встановленої версії. Маніфест, який повідомляє агент, адреси не несе, а вигадати її з номера версії означає посилання, що зламається на першому випуску, названому інакше.

Посилання на повний журнал. Сторінка діяльності не фільтрує за агентом, тож посилання видало б перелік, який клієнтові довелося б потім переглядати очима. Це є обіцянкою, якої призначення справдити не може.

Приязні назви для можливостей агента. Вони стоять тими словами, якими користується протокол, згідно з давнішим рішенням. Приязну назву доводиться доглядати девʼятьма мовами, і вона перестає сходитися зі словом у журналах того дня, коли хтось перейменує можливість.

Є також відведена прогалина. Картку з розкладом самооновлень будували паралельно, і вона опинилася на вкладці налаштувань, бо вона є формою, а та сама форма у двох місцях однієї сторінки і є тією другою правдою, яку все це впорядкування мало прибрати. Прогалина лишається із приміткою, що коли картка колись переїде сюди, вона переїде з налаштувань, а не додасться поруч.

Сповіщення, якого не має бути на власному домені клієнта

Одна картка показує спонуку, коли бракує даних компанії, потрібних для виставлення рахунків. Три речі про неї перевірено, а не припущено.

Вона вживає наявний предикат панелі для питання, чи повні платіжні дані, а не другий, написаний тут. Два предикати на одне питання розходяться, і того дня, коли вони не збігаються, клієнт бачить спонуку на одній сторінці і не бачить на іншій.

Вона зʼявляється лише для того, хто справді може діяти, а це означає слушну роль і слушну поверхню.

І її не має бути зовсім на домені облікового запису, тобто на господарі з власною маркою, куди входять клієнти нашого клієнта. Це зміряно справжньою сесією, а не виведено міркуванням: на домені облікового запису сторінка агентів повертає 404, бо вся та поверхня там відсутня за побудовою, а на господарі панелі повертає 200. Той 404 не є контролем доступу, що когось ловить; сторінки просто немає.

Три пікселі, що стали наступним раундом

Впорядкування зміряно на трьох ширинах, а на найвужчій і всіма девʼятьма мовами. На 390 і на 1440 не переповнювалося ніщо.

На 768 кожна сторінка панелі в продукті була на три пікселі ширша за вікно. Не ця сторінка: кожна сторінка. Це одне зчитування, однією мовою й в одному записі валюти; раунд, що розібрав смугу, пройшов девʼятьма мовами у двох і знайшов від восьми до тридцяти восьми пікселів. Причина лежала у спільній заголовковій смузі, і чесним було записати це окремим завданням, а не лагодити всередині раунду про інший екран, бо смуга, що переповнюється на одній ширині однією мовою, ніколи не є проблемою трьох пікселів. Виявилося, що то помилка категорії щодо того, яку ширину смуга читала, і про це є смуга, вужча за власне вікно.

Що ми б записали

  1. Обережне усталене значення є твердженням про одну складову на самоті. Поруч із другим елементом, що знає відповідь, воно стає хибним.
  2. Два елементи, що малюють один факт, мусять ділити початкове значення. Прочитайте його один раз на сервері й передайте вниз.
  3. Присутність не є станом. Одне є ключем із часом життя, друге є адмініструванням; стовпець, що каже «зареєстрований», про тепер не каже нічого.
  4. Тримайте впорядкування поза шаром даних. Один файл для того, що читається, один для того, куди воно йде, і кожен раунд торкається одного з них.
  5. Не ставте число під підписом, якому воно не належить. Якщо ескіз просить плитку, яку телеметрія наповнити не може, відповіддю є відсутність плитки.
  6. Елемент керування, чиє призначення обіцянки справдити не може, гірший за його відсутність. Посилання на журнал, що не вміє фільтрувати, посилання на зміни без адреси.
  7. Міряйте відсутність справжньою сесією. «Цієї сторінки на тому господарі немає» є твердженням, що заслуговує на запит, а не на читання коду.

Для ясності про те, чим це є: сторінку побудовано і вона працює, її зміряно проходом доступності та браузерною пробою в обох станах господаря. Її випробувано лише проти сервера розробки, тож тут не сказано нічого про зсув розкладки на виробничій збірці, а живий звʼязок під час вимірювання було заблоковано, тож шлях присутності доведено з боку сервера, а не від краю до краю.

Із платформної роботи над Provibr. Дефект заголовкової смуги, який ця сторінка виявила, описано в смуга, вужча за власне вікно, а як агенти тримають себе в актуальному стані без чийогось натискання, описано в оновлено о третій ночі.

Читати далі

Почніть з одного хоста й одного агента

Створіть обліковий запис, встановіть агента однією командою та підключіть свій перший хост Proxmox. Пробний період триває 14 днів і не потребує платіжних даних.