Простейший информер на Automator

Automator

В первом своем посте на данном ресурсе хотел бы описать простейший пример создания информера, с помощью колоссально удобной утилиты Automator, идущей в комплекте с Mac Os X.

Буквально на днях, при радикальном снижении уличной температуры в Москве у меня внезапно появилась задача: визуально отслеживать температуру в серверном помещении (а точнее в стойке), с определенным интервалом, т.к. кондиционер, обслуживающий помещение, отказался работать при T < -15 ºC.


Для начала, сразу поясню, что сам по себе вопрос контроля температуры серверной комнаты, стойки, каждого сервера в ней, а также еще пары сотен иных параметров мною комплексно решен установкой системы мониторинга Zabbix. И надо сказать, она отлично с этим справляется, не только скрупулезно собирая все эти данные и храня логи всех изменений этих параметров, но также и выполняя информирование, в случае достижения контрольных или критических точек (триггеров). Однако, далеко не всегда, получение почтовых сообщений или СМС бывает удобно, особенно однотипных, как в моем случае, содержащим конкретную величину, незначительно меняющуюся со временем — в данном случае, температуру комнаты. И поэтому я решил визуализировать для себя эту информацию, благо процесс занимает 5 минут и с десяток кликов, а в итоге получаем удобно появляющиеся уведомления с нужным параметром, причем интервал их появления настраивается, а история — удобно хранится в списки сообщений центра уведомлений Mac Os X.

Источником информации я выбрал Ambient Sensor одного из серверов стойки. Это сервер Supermicro, оборудованный интерфейсом IPMI.
Для начала открываем интерфейс программы:

Выбираем создание нового процесса, а затем, в разделе «Действия» библиотеки выбираем подраздел утилиты — по сути мы будем пользоваться только ими.

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

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

ipmitool -H xxx.xxx.xxx.xxx -U LOGIN -P PASSOWRD sensor get 'Sensor Name' |grep 'Sensor Reading' |grep -o '[0-9][0-9]'

где xxx.xxx.xxx.xxx это IP-адрес интерфейса IPMI
LOGIN и PASSWORD — это логин и пароль доступа к интерфейсу.
Sensor Name — это название сенсора, с которого предполагается считывать данные. В моем случае это был «System Temp».
Утилита grep в данном контексте используется для возврата удобночитаемого двузначного цифрового значения температуры сенсора.

Чтобы процесс выполнял в shell данную команду, перетаскиваем соответствующее действие из библиотеки в поле процесса:



Заметьте — в правом верхнем углу есть флажок, позволяющий либо помещать результат исполнения скрипта в stdin, либо возвращать как аргумент для дальнейших действий. Так как мы планируем использовать результат в дальнейшем — то выбираем возвращать «как аргумент».
А поскольку мы хотим использовать полученное значение в других операциях, есть смысл создать переменную, которой и будет присвоено полученное выше значение, для этого выбираем действие «Установить значение переменной»:


Кликнув на поле «новая переменная» можно задать ей удобночитаемое название, например «Температруа». Заметьте также, что между двумя действиями стоят стрелки, указывающие направление последовательности действий.



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

Также, для удобства, рекомендую добавить дополнительные переменные из библиотеки, я взял оттуда точное время. А вообще там есть очень много чего…
Вкладка библиотеки системных переменных находится справа от вкладки «Действия»:


Ну и далее остается заполнить само тело сообщения.

Кроме того, у нас есть задача зациклить этот процесс, с тем, чтобы запрос осуществлялся с неким интервалом. Для этого из библиотеки действия есть смысл перетащить действие «приостановить», в котором можно указать время приостановки процесса. Замечу (и это важно) что изначально пытался вместо 30 минут выставить 1800 секунд, однако процесс отрабатывал некорректно, собственно поэтому в действии можно выставить размерность задержки в секундах, минутах или часах. Насколько я понял мануал, счетчик ограничен 1000-ю единиц.

Ну и последнее, необходимое нам действие — это цикл, ибо нам необходимо зациклить процесс. Для этого ставим в конец процесса действие «Петля».
В этом действии есть несколько настраиваемых параметров, а именно: обязательный запрос пользователя для продолжения действия, который можно заменить полностью автоматическим циклом (собственно он нам и нужен). Второй параметр — это точка возвращения петли, нам нужно вернуться к самому началу процесса, поэтому выбираем «Использовать начальный вход». Ну и третий, довольно важный параметр — «остановить после». Этот параметр определяет, в какой момент заканчивается действие петли. Вариантов здесь два, либо после некоего интервала времени, либо после некоего количества циклов. К сожалению, сделать бесконечный цикл нельзя, установка этого параметра в «ноль» как для минут, так и для «раз» не приводит к этому (цикл выполнится лишь раз), поэтому проще выбрать то, что Вам по душе. Максимально значение счетчика также 1000 единиц. Для себя я лично выбрал 1000 раз, это 1000 циклов. Замечу, что если этого не достаточно, ставьте следующую петлю сразу после первой, это будет исполнять цикл в цикле, а это 1 млн. итераций, и т.д.

В итоге, финальная версия процесса выглядит вот так:



А выдаваемые сообщения, во первых, удобно визуализируются на рабочем столе — выскакивая с нужной частотой, при этом вы всегда можете посмотреть их историю, которая выглядит примерно вот так:


Теперь остается лишь запустить процесс. И он начнет выполняться автоматором, а чтобы он не мешал в Dock — правый клик на иконке Automator в Dock и далее «Скрыть».

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

Похожие публикации

AdBlock похитил этот баннер, но баннеры не зубы — отрастут

Подробнее
Реклама

Комментарии 14

    +1
    Пишите ещё! Очень интересно. Если будет возможность, то именно такие, практические вещи.

    Кстати, а можно написать на AppleScript что-то типа бота для Skype?
      0
      > Кстати, а можно написать на AppleScript что-то типа бота для Skype?

      все зависит от скайпа — поддерживает ли он внешнее управление через AppleScript или нет. Скорее всего он его не поддерживает.
      0
      Спасибо, я очень рад, что понравился мой дебютный пост. По поводу ботов и Скайпа, честно говоря, не готов ответить, Не изучал этот вопрос… но какие-то практические вопросы обязательно еще постараюсь рассмотреть.
        0
        Не в ту ветку, но не суть. :)

        Да про Skype это просто первое что пришло в голову на тему практичности. Не столько бот нужен, сколько реакция на какие-то сообщения.
          0
          Чуть выше — очень верный ответ, все зависит от того, насколько он поддерживаетм внешнее управление. Управление автоответам в нативный Messages вполне возможно. В редакторе скриптов даже есть пример:

          using terms from application "Messages"
             on message received this_message from this_buddy for this_chat
          		(*EXAMPLE: this routine automatically sends a random response to messages from specified buddies
          		set this_name to the name of this_buddy
          		if the name of this_buddy is in {"Johnny Appleseed"} then
          			set canned_responses to {"Oh, I know!", "I was just thinking about that.", "Maybe tomorrow.", "Seems logical."}
          			set this_response to some item of the canned_responses
          			send this_response to this_chat
          		end if
          		*)
          	end message received
          end using terms from
          


          Из примера, что если пришло сообщение от контакта Johnny Appleseed то ему будет случайным образом отправлено одно из сообщений из списка: "Oh, I know!", «I was just thinking about that.», «Maybe tomorrow.», «Seems logical.»

          Но реализовывать это нужно уже через AppleScript, который, правда, никто не мешает использовать и в связке с Automator.
            0
            Поддерживает. Там в Automator или в AppleScript (не помню, так как давно вообще всем этим пользовался) есть библиотеки или что-то типа того. В общем можно посмотреть команды, которые принимает то или иное приложение. И скайп показывал, что да, чего-то там он может, но возможно только звонить.

            Плюс есть ещё developer.skype.com, где возможно описано детальнее (я не подписан там).
        0
        Сравнение с предидущим показанием и уведомление только в случае изменений?
          +1
          Тоже пользуюсь Automator, очень удобная вещь. А есть ли аналог для Windows? С похожим интерфейсом
          • НЛО прилетело и опубликовало эту надпись здесь
              0
              Скорее всего я не прав, возможно я неверно истолковываю общий смсыл хаба, но поскольку хаба AppleScript нет, решил указать и Action Script.
              • НЛО прилетело и опубликовало эту надпись здесь
                  +1
                  Уберите пост из ActionScript (это язык, на котором програмиируются Flash-приложения).
                    +1
                    Сделано!
                –1
                Я так понял это чтото вроде эпловского гуи для cronjob с симпатичными попапами..?

                Только полноправные пользователи могут оставлять комментарии. Войдите, пожалуйста.

                Самое читаемое