Документация COREmanager
Документация — ваш лучший друг?
Поделитесь мнением и пройдите небольшой опрос
Пройти опрос

Фоновые плагины

Работа фоновых плагинов поддерживается для продуктов версии COREmanager 5.377 и выше. Чтобы проверить версию COREmanager, выполните:

/usr/local/mgr5/bin/core -V

Описание

Во всех программных продуктах ISPsystem на базе COREmanager существует возможность выполнения определённых действий при наступлении событий. Например, при успешной авторизации пользователю может быть отправлено уведомление в Telegram.

В отличии от системы Event'ов, которая работает синхронно с наступлением событий и может повлиять на поведение системы, описанный в статье механизм запускается асинхронно с событием и не влияет на поведение системы.

Чтобы обрабатывать события панели управления, необходимо:

  1. Написать скрипт-обработчик события.
  2. Зарегистрировать свой скрипт-обработчик, связав его с обрабатываемыми событиями.

Формат общения

Скрипту-обработчику передаётся информация:

  • в виде переменных окружения (env):
    • параметры запроса c префиксом PARAM_;
    • заголовки запроса;
    • остальное;
  • на вход stdin с результатами обработки события в формате xml, если событие зарегистрировано с атрибутом sessiondata. Без указания sessiondata переданы будут только переменные окружения.

Пример

Ниже приведен пример на простой задаче — отправка сотруднику в Telegram информации о зачислении платежа больше 5000 рублей.

Создание скрипта-обработчика

  1. Создайте в директории /usr/local/mgr5/addon/ файл send_notify.sh со следующим содержимым:

    #!/usr/bin/sh
    
    #env >> var/send_notify.sh.log
    
    PAYMENT=$(sbin/mysql-billmgr <<< "SELECT id FROM payment WHERE id = '${PARAM_elid}' AND paymethodamount > 5000" | tail -1)
    
    if [ -n "${PAYMENT}" ]; then
            BOT_TOKEN="{TOKEN}" # Replace {TOKEN} with your bot token
            CHAT_ID="{CHAT_ID}" # Replace {CHAT_ID} with your channel id
    
            curl "https://api.telegram.org/bot${BOT_TOKEN}/sendMessage?chat_id=${CHAT_ID}&text=Payment №${PARAM_elid} is above 5000"
    fi
  2. Установите скрипту права на исполнения:

    chmod +x /usr/local/mgr5/addon/send_notify.sh

Регистрация скрипта-обработчика

Чтобы зарегистрировать скрипт-обработчик, создайте файл /usr/local/mgr5/etc/xml/billmgr_mod_send_notification.xml со следующим содержимым:

<?xml version="1.0" encoding="UTF-8"?>
<mgrdata>
        <handler name="send_notify.sh" type="xml">
              <task name="payment.setpaid"  get="yes" setvalues="yes" submit="yes" sessiondata="yes"/>
        </handler>
</mgrdata>

Пояснения к плагину

Блок, отвечающий за регистрацию обработчика:

<handler name="send_notify.sh" type="xml">
	<task name="payment.setpaid"  get="yes" setvalues="yes" submit="yes" sessiondata="yes"/>
</handler>

Свойство name узла handler указывает файл, который выполняет обработку события. Этот файл разместите в директории /usr/local/mgr5/addon/, имя файла должно полностью совпадать с указанным в свойстве name.

Узел task специализирует событие для отслеживания и имеет следующие атрибуты:

  • name — событие, которое нужно отслеживать. Событиями выступают запросы к системе по протоколам http/https или CLI (/usr/local/mgr5/sbin/mgrctl). Чтобы посмотреть список всех событий, выполните:

    /usr/local/mgr5/sbin/mgrctl -m billmgr actionlist
  • get — нужно отслеживать событие без параметров sv_field={param} и sok=ok в запросе;
  • setvalues — нужно отслеживать события с параметром sv_field={param} в запросе;
  • submit — нужно отслеживать события с параметром sok=ok в запросе;
  • sessiondata — в скрипт будет передан результат обработки события в формате xml.