правильний підрахунок uptime


отже, що не так з uptime? а те, що програма намагається говорити «людською» мовою, через що формат виводу міняється: може бути опущено дні та години (знайдіть години на знятку екрана).

забагато мороки пробувати різати той вивід регулярними виразами, простіше застосувати трішки арифметики до вмісту /proc/uptime.

не виспався, але байдуже. на bashтані буде спекотно сьогодні: зараз навчимося розбирати вивід команди uptime на лексеми і зберігати дані не в жорстко кодованих змінних, а в загальному масиві з мітками.

дилетант запитає: з розбором зрозуміло, але навіщо ці складнощі з масивами?! а припустімо, мій простенький монітор збиратиме й показуватиме сто параметрів, і зненацька знадобилося додати ще десять. за примітивного підходу для цього довелося б:
  • розібрати вивід ще кількох команд на кшталт uptime і скласти дані в десять нових змінних;
  • додати десять нових міток до шаблонів виводу;
  • додати десять нових замін до функції підстановки даних в шаблони.
перший етап — цікава задачка. другий — просто питання дизайну виводу. а третій етап — це дурна робота, і її можна повністю уникнути, якщо складати дані як іменовані поля до одного архіву. тоді функція підстановки даних за шаблоном перетворюється з величезного переліку міток і замін… на один короткий (в коді) і читабельний цикл (про це — згодом).

важливо! цей код — лише ілюстрація принципу; вивід uptime надто волатильний, щоби його так розбирати для реальної задачі — краще обчислювати з даних у /proc/uptime.

код на pastebin:
на годиннику 00:42, але щось не спиться. отже, вивід за шаблонами і в кольорах — це дуже, дуже просто. взірець коду bash на pastebin, результат — на знятку екрана.

є нюанси:
  • проста табуляція тексту в інвертованих кольорах (tput rev) — не функциклює;
  • якусь складнішу табуляцію, яку досить просто зробити за допомогою printf — зовсім не так просто зробити, якщо форматувати весь рядок для printf завчасу;
  • перемикання кольору — це escape-послідовності по 4 байти… відповідно визначення довжини рядка для, скажімо, центрування — не працюватиме як слід;
  • може ще через щось ще не перечепився…



лінійка для консолі

якщо комусь колись виникала потреба поміряти ширину консолі — то він, певно, накидав на колінці якийсь простенький скрипт для того…

…от і мені знадобилося =)

p.s. тут є досвічені баштанники? що можна спростити чи оптимізувати? зайвість SCREEN_WIDTH бачу, що ще?



накидав у bash’і дуже грубий макет того, що хочеться бачити в моніторі статусу сервера (як на мої примітивні потреби).

тут ще бракує деталей (використання процесора, для прикладу), і виглядає зовсім не так, як треба (зі знятку має бути очевидно, що я ще не робираю як слід дані, це майже просто вивід df, free, docker ps тощо). але на макеті я трохи краще зрозумів, що хочеться мати перед очима:
  • викинути к бісу «простирадло» процесів (top, htop, atop тощо) — воно заважає; потрібна лише інформація про найжадібніші до процесора/пам’яті та зомбі;
  • читати всі потрібні дані за один захід, за потреби — дистанційно по ssh, потім повністю розпарсити їх, щоби довільно форматувати вивід і накладати кольори;
  • використати колір для кодування попереджень та тривог, псевдографіку та spark-подібні графіки для більшої наглядности (підняти з архівів свій напівзавершений gauge);
  • ущільнити вивід, додавши деталей — але не жертвуючи читабельністю (дивлюся на atop і ридаю); можливо — використати шаблони, щоби можна було складати довільні виводи «під себе».
p.s. код макету не показую, бо воно страшне, на коліні зліплене. вже коли та якщо зроблю щось путнє — ділитимуся.

оновлено (17 липня 2019). хороше нагадування від товариша: почитати, нарешті, про zabbix та спробувати.
шукав консольний монітор системи, щоби можна було налаштувати під себе і бачити основні показники (пам’ять, диски, найжадібніші процеси тощо) на одному екрані — знайшов glances, і на словах воно гарне…

…а на практиці — це python, роздутий різними функціями до сферичної форми. в переліку залежностей — навіть якісь шрифти (wft!), javascript та… сервер іксів, заради всього святого!

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

і друге питання, важливіше (точніше, перше на знятку екрана): декілька пакунків apt вважає сиротами і пропонує їх прибрати (за допомогою autoremove), але! ці пакунки, якщо я не помиляюся, було встановлено разом з docker-compose, який я згодом замінив завантаженим вручну (бо версія від debian така стара, що не пітримує docker-compose.yml версії 2.x). отже, питання: to autoremove or not to autoremove?

поновлено (15 липня 2019). гаразд, але ж ми маємо docker? отже, що ми бачимо?
  • найбільша проблема — python? контейнер «розкручує» процесор до 80% (див. зняток), без нього — процесор «відпочиває» на 0,6% в середньому;
  • є великі проблеми з форматуванням виводу;
  • показує казна що в розділі про файлові системи file sys (контейнер?)
коротше кажучи, glances гарненьке, але для використання на мінімалістичному сервері — непридатне. в топку!