- PVSM.RU - https://www.pvsm.ru -
На прошлой работе часто были ситуации, когда есть требовательная задача, которая выполняется долго, но желательно быстро отреагировать по окончанию, что делать? Конечно, написать программу...
Первая версия просто использовала notify-send, но время показало некоторое неудобство процесса. Поскольку операции были очень требовательные к машине, то машина становилась на этот момент неюзабельной и хотелось отойти и выпить кофе. Но вернуться, когда процесс завершится. Поэтому появилась идея программы, которая чейнится в консольный пайплайн или оборачивает как sudo программу и по окончании присылает тебе нотификацию в чатик. Таким образом, ты увидишь нотификацию как на десктопе, так и на телефоне.
Для тех кто не хочет читать, а хочется попробовать. (Linux only)
wget https://ice2heart.com/snitch
chmod +x snitch
SNITCH_USER_ID=<here_is_your_uuid> ./snitch sleep 10
Идея была простая, нам нужен простой сервер, который примет сообщение и перешлет его пользователю.
И так как мне не хотелось заморачиваться с регистрацией, хранением и управлением учетных записей, я решил сделать как мне казалось просто (и сейчас кажется, но я не уверен, что это хорошо).
Используя бота, человек получает уникальный uuid v4, с которым потом и ходит на сервер. Авторизация на стороне чат клиента, я же храню только пару uuid-внутренний айди.
Поэтому взяв node.js в качестве сервера и добавив немного koa, nedb, node-telegram-bot-api, я собрал серверную часть, архитектура изначально подразумевала больше gateway в чаты, но не было кейсов и поэтому остался один телеграмм.
Также мне не хотелось выставлять js приложение в интернет напрямую, поэтому используя магию докера, я добавил прокси сервер caddy. Почему он? Потому что мне нравится формат конфигурационных файлов.
Сервер получился простой, но достаточный для работы.
Поэтому получился вот такой несложный docker-compose файлик, также нам необходим ключ для бота, который мы положим в .env файлик, чтобы не сохранять наши ключи в github, что не есть хорошо.
Так что для запуска нам необходимы docker, docker-compose и ключик для телегам бота, чтобы получить свой, вам придется обратиться к botfather [2].
После этого docker-compose up и наш сервер готов к работе.
Для клиента я решил взять go по простой причине того, что он собирается в 1 бинарный файл, который потом легко можно распространять.
Основных идей по поводу клиента было две.
В ходе реализации не нашлось простого способа узнать код возврата предыдущей программы в пайплайне, это к сожалению уменьшает радость от использования программы в пайплайне.
Для конфигурации я выбрал переменные окружения, ибо они позволяют легко копировать настройки с машины на машину, плюс легко заменяются.
В итоге установка становится максимально простой.
Теперь можно запускать долгие команды в виде snitch make и по окончании мы получим сообщение о том, что приложение завершилось и даже будем знать, удачно или не очень.
Для сборки я сделал маленький скрипт, который назвал просто r. Он соберет go приложение и пропустит его через upx. И на выходе получаем красивый статически слинкованный бинарник.
Исходный код вы можете найти вот тут [3]
И когда все готово, можно обратиться к боту с командой /config
И он создаст запись о нашем пользователе и вернет uuid.
Также всегда можно удалится из базы, для этого есть команда /delete
Таким образом, мы получили достаточно простое, но эффективное приложение, которое уведомит нас о завершившимся задании, легко и непринужденно, даже когда мы пьём кофе.
Автор: ice2heart
Источник [4]
Сайт-источник PVSM.RU: https://www.pvsm.ru
Путь до страницы источника: https://www.pvsm.ru/linux/296288
Ссылки в тексте:
[1] у бота: https://telegram.me/Terminal_snitch_bot
[2] botfather: https://telegram.me/BotFather
[3] Исходный код вы можете найти вот тут : https://github.com/ice2heart/terminal_snitch
[4] Источник: https://habr.com/post/425707/?utm_campaign=425707
Нажмите здесь для печати.