Мне требуется приложения для опроса и конфигурирования сетевых интерфейсов ОС Linux(Ubuntu). Снятия статистики о загрузке CPU и т.п. в реалтайме.Работы с терминальными утилитами типа iperf3, tcpdump, speedtest(парсинг терминала в реалтайме и выводе данных в приложение). Все это выводится в поля в одном окне, со своим дизайном, и обменом данными между всеми модулями.
Нарисовал gui, в vmware поднял ubuntu поигрался с командами, начал писать ТЗ которое выглядит ~ так -
"В терминале выполни команду - спарси значение X - вставь значение X в поле Y / цикл"
По хорошему я хочу получить:
front-end - страницу/ы на html/css/js(который я могу написать сам. На большее не хватает навыков).
back-end - node.js(Electron) или Python(Django или т.п.). Это только те, про которые я успел почитать.
В дальнейшем планирую самостоятельно добавлять новые фичи и допиливать уже имеющиеся(прежде покопаюсь в коде + одним из требованием к разработчику будет его комментирование), но не хочется проводить часы за мануалами/курсами чтобы "добавить к команде пинг количество повторений". Функционал приложения фактически не сложен.
Так же большую роль играет производительность приложения. Чем меньше требует ресурсов тем лучше.
Для лучшего понимания того что мне требуется приложил один из модулей и ТЗ к нему.
Картинка - Модуль статистики интерфейса
ТЗ - Модуль статистики интерфейса
Модуль выбора интерфейса и его статистики------------///Период выполнения команды 1 сек
В выпадающем списке необходимо выбрать интерфейс. По умолчанию значения нет.
Список интерфейсов получаем из значения ifname командой: ip -j a
После выбора интерфейса выполняется команда: ip -j -s link show *выбранный интерфейс. т.е. его ifname*
Если значение operstate "UP", поле с названием интерфейса заливается зеленым, если "DOWM" красным.
Выводится значение address *stat_mac*
Выводится значение txqlen *stat_speed*
Выводится значение mtu *stat_mtu*
Блок Rx
Выводится значение [stats64 - rx - packets] в поле *rx_pct*
Выводится значение [stats64 - rx - errors] в поле *rx_err*
Выводится значение [stats64 - rx - dropped] в поле *rx_drp*
Выводится значение [stats64 - rx - over_errors] в поле *rx_o_err*
Выводится значение [stats64 - rx - multicast] в поле *rx_mcst*
Блок Tx
Выводится значение [stats64 - tx - packets] в поле *tx_pct*
Выводится значение [stats64 - tx - errors] в поле *tx_err*
Выводится значение [stats64 - tx - dropped] в поле *tx_drp*
Выводится значение [stats64 - tx - carrier_errors] в поле *tx_c_err*
Выводится значение [stats64 - tx - collisions] в поле *tx_cl*
Реалтайм скорость
Запоминается значение [stats64 - bytes - rx] в поле *bt_rx1*
Запоминается значение [stats64 - bytes - tx] в поле *bt_tx1*
--прошла 1 секунда---
Выполняется команда: ip -j -s link show *выбранный интерфейс*
Обновляются все значения.
Запоминается значение stats64 - bytes - rx *bt_rx2*
Запоминается значение stats64 - bytes - tx *bt_tx2*
Из *bt_rx2* вычитаем *bt_rx1*, получившиеся число делим на 1000000(млн), округляем до трех знаков после запятой, выводим значение *real_bw_rx*
Из *bt_tx2* вычитаем *bt_tx1*, получившиеся число делим на 1000000(млн), округляем до трех знаков после запятой, выводим значение *real_bw_tx*
Значение *bt_rx2* заменяет *bt_rx1*
Значение *bt_tx2* заменяет *bt_tx1*
--прошла 1 секунда---
Выполняется команда: ip -j -s link show *выбранный интерфейс*
Обновляются все значения.
Запоминается значение stats64 - bytes - rx *bt_rx2*
Запоминается значение stats64 - bytes - tx *bt_tx2*
Из *bt_rx2* вычитаем *bt_rx1*, получившиеся число делим на 1000000(млн), округляем до трех знаков после запятой, выводим значение *real_bw_rx*
Из *bt_tx2* вычитаем *bt_tx1*, получившиеся число делим на 1000000(млн), округляем до трех знаков после запятой, выводим значение *real_bw_tx*
Значение *bt_rx2* заменяет *bt_rx1*
Значение *bt_tx2* заменяет *bt_tx1*
--прошла 1 секунда---
Выполняется команда: ip -j -s link show *выбранный интерфейс*
Обновляются все значения.
Запоминается значение stats64 - bytes - rx *bt_rx2*
Запоминается значение stats64 - bytes - tx *bt_tx2*
Из *bt_rx2* вычитаем *bt_rx1*, получившиеся число делим на 1000000(млн), округляем до трех знаков после запятой, выводим значение *real_bw_rx*
Из *bt_tx2* вычитаем *bt_tx1*, получившиеся число делим на 1000000(млн), округляем до трех знаков после запятой, выводим значение *real_bw_tx*
Значение *bt_rx2* заменяет *bt_rx1*
Значение *bt_tx2* заменяет *bt_tx1*
--прошла 1 секунда---
Выполняется предыдущий шаг.