Получение уведомлений о завершении задач

Как программистам, нам часто приходится запускать длительные задачи и сценарии. Это может включать:

  • Перенос или копирование больших файлов
  • Обработка больших наборов данных
  • Длительные процессы компиляции

Для любого трудоемкого сценария удобно, если не обязательно, знать, когда сценарий завершается. Мы также хотим знать, был ли процесс успешным или неудачным.

Некоторое программное обеспечение включает такие встроенные уведомления, в то время как большинство инструментов командной строки этого не делают. Кроме того, в идеале мы хотим получать уведомления, где бы мы ни находились, а не только на устройстве, на котором запущен скрипт.

Использование IFTTT

Отправка push-уведомлений на любое мобильное устройство легко осуществляется с помощью веб-сервиса IFTTT. Это можно использовать для подключения веб-запроса, отправленного по заданному URL-адресу, к сопутствующему приложению, установленному на мобильном устройстве.

Вот шаги для этого:

  1. Посетите http://ifttt.com и зарегистрируйтесь.
  2. Нажмите на значок своей учетной записи (вверху справа), а затем нажмите «Создать» .
  3. Щелкните значок If + и введите «Webhooks» в поле поиска.
  4. Выберите Webhooks → Получить веб-запрос и введите «уведомить» в качестве названия события.
  5. Затем щелкните значок + That и введите «Уведомления» в поле поиска.
  6. Выберите «Отправить уведомление из приложения IFTTT».
  7. Введите следующий текст в поле сообщения:
Notification: {{Value1}}

8. Нажмите «Создать действие» и дайте своему действию имя, например "Отправить уведомление." Затем нажмите «Готово».

Поздравляю! Вы создали действие IFTTT.

Тестирование уведомления

Чтобы проверить уведомление, вам необходимо загрузить приложение IFTTT на свое мобильное устройство и войти в свою учетную запись. Он должен спросить, хотите ли вы получать уведомления - выберите «Да».

Предполагая, что приложение правильно установлено на вашем устройстве, теперь мы можем вернуться в веб-браузер, чтобы найти URL-адрес нашего апплета.

Для этого зайдите на https://ifttt.com, а затем:

  1. Щелкните значок своей учетной записи (вверху справа), а затем щелкните «Мои службы».
  2. Выберите Webhooks из списка, а затем щелкните Documentation.

Должен отобразиться экран, показывающий ваш URL-адрес API, а также некоторые поля для передачи значений через запрос POST.

  1. Напечатайте «уведомить» (название нашего события) в поле события.
  2. Введите «тест» в поле «Значение 1».

Результирующая команда внизу должна выглядеть примерно так:

curl -X POST -H "Content-Type: application/json" -d '{"value1":"test"}' https://maker.ifttt.com/trigger/notify/with/key/123jhkjh3k4h24j343

Если вы нажмете «Проверить», вы вскоре получите уведомление на свой мобильный телефон.

Если вы не получите уведомление в течение 60 секунд, попробуйте перезапустить устройство, чтобы приложение запрашивало авторизацию уведомления.

Если что-то по-прежнему не работает, я рекомендую разместить сообщение на IFTTT Reddit.

Отправка уведомлений из скрипта

Итак, у нас работает IFTTT. А теперь самое интересное! Мы собираемся написать простой сценарий bash, который позволит нам отправлять уведомления на наш мобильный телефон из командной строки. Эта часть будет работать в любой Unix-подобной системе, такой как Linux, macOS или Cygwin в Windows.

Откройте терминал, а затем создайте новый текстовый файл с именем notify. Вставьте следующее, заменив <your key> ключом из документации Webhook:

#!/bin/bash
arg=$(echo $1 | sed 's/ /%20/g')
curl -s -o /dev/null "https://maker.ifttt.com/trigger/notify/with/key/<your key>?value1=$arg"

Теперь сохраните сценарий и сделайте его исполняемым. Обычно это можно сделать с помощью:

$ chmod +x notify

Теперь мы можем протестировать наш скрипт из командной строки:

$ ./notify "important stuff"

Если все хорошо, вы должны вскоре получить на свое мобильное устройство текст «Уведомление: важные сведения».

Практика

Теперь, когда у нас есть скрипт, который может легко публиковать уведомления, нам сначала нужно поместить его в то место, откуда система может легко его запустить. Обычно я использую /usr/local/bin для такого рода вещей, поэтому:

$ sudo mv notify /usr/local/bin

Предполагая, что /usr/local/bin находится в вашем PATH, теперь вы можете просто ввести notify "blah" из любого каталога, и он будет работать.

Что с этим делать? Любая команда Unix может быть выполнена после завершения другой команды с помощью оператора оболочки &&. Это объясняется в 6 операторах связывания командной строки оболочки Bash в Linux.

Так, например, мы можем написать:

cp my_big_file /some/folder && notify "File copied successfully"

Or:

make && notify "Code compiled"

Однако мы часто хотим знать не только, удалось ли что-то, но и не удалось ли. Здесь мы можем использовать оператор ||, например:

make && notify "Compile successful" || notify "Compile failed"

Использование из кода

В дополнение к уведомлениям командной строки из оболочки мы также можем отправлять уведомления из кода. Большинство языков поддерживают отправку запросов к веб-службам либо в самой языковой стандартной библиотеке, либо через сторонние фреймворки.

Например, с Python мы можем использовать модуль urllib.request следующим образом:

from urllib import request
key = "<your key>"
message = "something"
request.urlopen("https://maker.ifttt.com/trigger/notify/with/key/%s?value1=%s" % (key,message))

В конце концов, мы просто отправляем запрос GET на URL-адрес.

Если у вас есть идеи для полезных приложений сценариев уведомлений, я хотел бы услышать их в комментариях.