Документация COREmanager

Изменение поведения системы при определенных действиях пользователей, события

Продукты ISPsystem на базе COREmanager используют механизм обработки событий, позволяющий:

  • добавлять дополнительные проверки (валидация, доступ);
  • модифицировать стандартное поведение;
  • интегрировать внешние сервисы.

Для реализации нужно:

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

Рассмотрим данные действия на задаче — во время создания/удаления пользователя BILLmanager создавать или удалять для него учётную запись в samba.

Пример скрипта

Чтобы реализовать интеграцию Samba с BILLmanager: 

  1. Если в системе не установлена библиотека CGI, установите её с помощью команды:

    Установка на AlmaLinux
    dnf install perl-CGI
  2. Создайте файл обработчик /usr/local/mgr5/addon/samba.pl со следующим содержимым:

    Пример скрипта
    #!/usr/bin/perl
    use CGI;
    my $Q = new CGI;
    $func = $Q->param("func");
    $elid = $Q->param("elid");
    if ($func eq "user.add") {  
        if ($Q->param("sok") && $elid eq "") {
        # происходит создание пользователя    
            $name = $Q->param("name");    
            $password = $Q->param("passwd");
            system("(echo \"$password\"; echo \"$password\") | smbpasswd -a $name");  
        }
    } elsif ($func eq "user.delete") {
         # происходит удаление пользователей
         @all_users = split(", ", $elid);
         for (@all_users) {
           system("smbpasswd -x $_");
         }
    }
    print "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<doc/>\n";
  3. Настройте права на файл обработчик:
    chmod 750 /usr/local/mgr5/addon/samba.pl
    chown 0:0 /usr/local/mgr5/addon/samba.pl
  4. Создайте конфигурационный XML-файл /usr/local/mgr5/etc/xml/billmgr_mod_samba.xml с описанием плагина:

    <mgrdata>
     <handler name="samba.pl" type="cgi">
       <event after="yes" name="user.add" postdata="yes"/>
       <event after="yes" name="user.delete" postdata="yes"/>
     </handler>
    </mgrdata>
  5. Перезапустите BILLmanager:

    /usr/local/mgr5/sbin/mgrctl -m billmgr exit

    Если конфигурация выполнена правильно, в логе /usr/local/mgr5/var/billmgr.log появятся записи о регистрации обработчика для указанных событий:

    Пример вывода
    action EXTINFO Register event 'samba.pl' for action 'user.edit'
    action EXTINFO Register event 'samba.pl' for action 'user.delete'

Если что-то пошло не так, для отладки внешних скриптов:

  1. Включите максимальное логирование. Для этого в файл /usr/local/mgr5/etc/debug.conf добавьте строку:

    *.external 9
  2. Перезапустите BILLmanager. После перезапуска в логе появятся строки с префиксом external. Например:

    Пример вывода
    external WARNING Addon 'addon/samba.pl' is not executable

Далее более подробно описаны проделанные шаги.

Описание плагина

Пример показывает запуск скрипта при выполнении функций платформы. Рассмотрим конфигурационный блок:

<handler name="samba.pl" type="cgi">
  <event after="yes" name="user.edit" postdata="yes"/>
  <event after="yes" name="user.delete" postdata="yes"/>
</handler>

Компоненты конфигурации блока:

  • handler — тег, описывает обработчик события (скрипт);
  • samba.pl — имя скрипта. Все скрипты должны быть расположены в директории /usr/local/mgr5/addon;
  • type="cgi" — метод передачи данных через CGI-интерфейс;
  • event — тег, регистрирует событие для вызова скрипта обработчика;
  • after="yes" — атрибут. Запускает скрипт после основной функции. Подробнее о внутренних именах функций см. в статье Список функций и параметров.

Обработчик

Обработчик определяет тип операции по параметру func . Чтобы определить, какая функция инициировала запуск обработчика, получите значение параметра:

$func = $Q->param("func");

В зависимости от значения func выполните инструкции одного из подразделов:

  • Обработка user.edit;
  • Обработка user.delete.

Обработка user.edit

Событие user.edit возникает при:

  • получении данных о пользователе;
  • сохранении изменений;
  • создании пользователя.

Для определения типа операции проверьте параметры:

  • параметр sok пустой или отсутствует — запрос данных пользователя. Имя пользователя передаётся в параметре elid;   
  • параметр sok не пустой (обычно yes или ok) и параметр elid не пустой — изменение данных пользователя. Имя пользователя передаётся в параметре elid;
  • параметр sok не пустой, а параметр elid пустой — создание пользователя.
Пример проверки для создания пользователя:
if ($Q->param("sok") && $elid eq "") {

Описанная логика параметров sok и elid справедлива для функций создания или редактирования других объектов.

Обработка user.delete

Событие user.delete возникает при удалении пользователя. Операция удаления поддерживает групповое выполнение. Чтобы за один вызов  удалить несколько пользователей, укажите в параметре elid несколько имён, разделённых символами ", " (запятая и пробел):

  1. Создайте массив имён:
    @all_users = split(", ", $elid);
  2. Удалите каждого из пользователей из базы паролей Samba с помощью внешней команды.

После выполнения операций обработчик должен вернуть в стандартный вывод XML-документ с результатами своей работы. Если результат не требуется, достаточно вернуть пустой, но валидный XML-документ:

Пример команды
print "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<doc/>\n";

Расширенное управление событиями

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

  • атрибут before="yes" — выполнение до основного действия;
  • тег — блокировка стандартной функции;
  • атрибут after="yes" — выполнение дополнительных действий после обработки. Не срабатывает, если используется тег .

Чтобы настроить конфигурацию:

  1. Создайте XML-конфигурацию обработчика:
    Пример файла
        <mgrdata>
    		<handler name="test.py" type="xml">
    			<event name="register.activationsend" before="yes"/>
    		</handler>
    	</mgrdata>
    Подробнее
  2. Создайте исполняемый файл /usr/local/mgr5/addon/test.py:
    Пример файла
    #!/usr/bin/env python3
    
    print("<doc>");
    print("<skipaction/>");
    print("</doc>");
    
    Подробнее
  3. Настройте права:
    chmod 750 /usr/local/mgr5/addon/test.py
    chown root:root /usr/local/mgr5/addon/test.py
  4. Перезапустите BILLmanager:

    /usr/local/mgr5/sbin/mgrctl -m billmgr exit

При вызове функции register.activationsend:

  1. Стандартное действие платформы выполнено не будет. 
  2. Будет выполнено содержимое скрипта /usr/local/mgr5/addon/test.py, поскольку функция register.activationsend в обработчике заменена на этот файл.
  3. В логах появится запись:
Пример вывода
[INFO] external: Executing: /usr/local/mgr5/addon/test.py

Пример показывает корректный XML-вывод в stdout в исполняемом файле. Он:

  • не содержит конкретных команд;
  • показывает, как заменить действие в биллинге на действие в исполняемом файле.

Вы должны самостоятельно обеспечить:

  • обработку входных параметров (func, elid, sok и др.);
  • корректный XML-вывод в stdout;
  • выполнение всех необходимых операций вместо системы.

Зависимые функции будут использовать данные, сформированные вашим скриптом.
Обязательно проверяйте целостность данных в БД после замены действий.

Может быть полезно

Связанные статьи:

Дата последнего обновления статьи: 14.07.2025. Статья подготовлена техническими писателями ISPsystem