@less_junior
За удобство для пользователя

Какой язык выбрать для написания desktop приложения для Linux(Ubuntu)?

Мне требуется приложения для опроса и конфигурирования сетевых интерфейсов ОС Linux(Ubuntu). Снятия статистики о загрузке CPU и т.п. в реалтайме.Работы с терминальными утилитами типа iperf3, tcpdump, speedtest(парсинг терминала в реалтайме и выводе данных в приложение). Все это выводится в поля в одном окне, со своим дизайном, и обменом данными между всеми модулями.

Нарисовал gui, в vmware поднял ubuntu поигрался с командами, начал писать ТЗ которое выглядит ~ так - "В терминале выполни команду - спарси значение X - вставь значение X в поле Y / цикл"

По хорошему я хочу получить:
front-end - страницу/ы на html/css/js(который я могу написать сам. На большее не хватает навыков).
back-end - node.js(Electron) или Python(Django или т.п.). Это только те, про которые я успел почитать.
В дальнейшем планирую самостоятельно добавлять новые фичи и допиливать уже имеющиеся(прежде покопаюсь в коде + одним из требованием к разработчику будет его комментирование), но не хочется проводить часы за мануалами/курсами чтобы "добавить к команде пинг количество повторений". Функционал приложения фактически не сложен.

Так же большую роль играет производительность приложения. Чем меньше требует ресурсов тем лучше.

Для лучшего понимания того что мне требуется приложил один из модулей и ТЗ к нему.

Картинка - Модуль статистики интерфейса
62c347bf8a18a316666746.jpeg


ТЗ - Модуль статистики интерфейса

Модуль выбора интерфейса и его статистики------------///Период выполнения команды 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 секунда---
Выполняется предыдущий шаг.

  • Вопрос задан
  • 109 просмотров
Пригласить эксперта
Ответы на вопрос 1
В посте указано что нужно отобразить и как эти данные можно получить. Мой вопрос касается выбора лучшего языка программирования под эту задачу.

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

Планирую своими силами.

Составляешь список из языков, которые готов поддерживать.

Планирую отдать на фриланс.

Указываешь эти языки в тз для того, кто будет это разрабатывать как допустимые.

Выбор конкретного набора технологий под задачу - это работа, за которую обычно люди деньги берут.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы