Всегда хотелось написать какой-нибудь дашборд для мониторинга доступности удалённых устройств. Но я даже не подозревал, что когда столкнусь с сабжем, эти устройства могут быть настолько удалены… В прямом, географическом, смысле слова.
Разумеется, в этой связи можно вспомнить и уже готовые программные продукты, которые отлично умеют в мониторинг. Причем умеют намного качественней, наглядней и красивей. Но речь сегодня вовсе не про изобретение колеса. Речь про старый-добрый бытовой азарт. Ну, а сейчас…

Приближение I: Zabbix нельзя, помиловать.
Итак, по карте щедро разбросали роутеры и соединили их в единую сеть. Основной мониторинг железа выполняется с помощью Zabbix. Только за жизнедеятельностью этой коллекции помимо кого-то из ИТ должны были ещё следить коллеги из других подразделений, которых вовсе не интересовало время отклика, TTL или хроника доступности. Их вообще интересовал только факт доступности железяк на текущий момент. Желательно наглядно и сразу по всем устройствам.
Конечно, меня сразу же посетила простая и очевидная мысль: создать отдельную панель в Zabbix и предоставить пользовательский доступ всем заинтересованным. Однако по ходу реализации замысла стало понятно, что этот метод избыточен. Более того, внезапно выяснилось, что если пускать в Zabbix неподготовленного человека, конторе потребуется ставка штатного психолога. Мысль пришлось отправить восвояси.
Где-то на полях этого поста и мягким карандашом я всё же помечу, что даже вот такая штуковина проблему не решала. Настала очередь для…
Приближение II: Сам проблему придумал, сам её решил.
Именно так и было решено заняться созданием отдельной странички мониторинга железа без избыточной информации. По большому счёту, что сложного в том, чтобы нарисовать страничку с перечнем хостов до которых будет стучаться серверная составляющая? Только важно учесть асинхронность пинга. Поэтому сердцем и душой проекта стал асинхронный веб-фреймворк Quart.
Добавив щепотку JS и взаимодействие с API-шкой серверной части, в индексную страничку удалось уместить и поиск, и обновление статуса хостов, и… Вообще всё!
Изначально PingDashboard выглядел, как табличка с перечнем ip-адресов и их статусом без какого-либо форматирования. Постепенно я начал создавать какое-то подобие плиточного дизайна из того, что смог найти в дебрях своих прошлых проектов. Кстати, основной и отличительной особенностью всего сабжа является бардачный и кривой CSS. В общем, есть чем гордиться…

Минуя 100500+ версий и после пары часов в вайбсфере для отладки css (тётя Вика знает), приложение стало выглядеть примерно так:
Каждая плитка содержит название узла, его ip-адрес и примечание. В примечании чаще всего вписывался адрес географического расположения пингуемого (ну, и слово) устройства. Также реализована сортировка девайсов по их категориям.
В составе приложения уже присутствует набор распространенных категорий, но для гибкости добавлена функция управления. Кстати, у приложения всего один администратор, а режим пользователя — это режим дашборда.
Приближение III. Доступность портов.
Самая интересная штуковина в PingDashboard — это, пожалуй, сканер портов для каждого узла. В список сканера я поставил только три порта и так и не предусмотрел функционал смены порта для каждого конкретного протокола. Например, по умолчанию сканер проверяет доступность http, https и ssh. Соответственно, это 80, 443 и 22 порты. Номера портов прибиты гвоздями к коду серверной части проекта — app.py.

В идеале на этапе добавления хоста в базу данных проекта можно было бы предусмотреть создание списка портов и сопоставления им определённого протокола. Возможно, когда-нибудь у меня дойдут руки до переделки всего этого безобразия.
Основной плюс фичи с портами — кликабельность. Ссылка на http (да и на https) откроет новую вкладку со страничкой доступного ресурса. Если сканер портов не нащупал указанных портов, плитка не отрисует пиктограммы протоколов.
Приближение IV. Эпатаж в тумане.
На сегодня (читать как — на момент публикации поста) внешний вид PingDashboard практически не изменился. Именно в таком виде я и передал приложение коллегам. Хочется надеяться, что мой дашборд живёт и здравствует, крутится себе пластинкой и радует людей.
Я же пользуюсь им в основном в тестовом контуре из виртуальных машин для мониторинга серверов в закрытой сети.
P.S.: В проекте используется SQLite, Font Awesome и шрифт Inter.
