Руководство для разработчиков

Обработчики


Все обработчики плагинов имеют ряд общих черт:

  • это исполняемые файлы (должны иметь права на исполнение для пользователя и группы root), находящиеся в папке /usr/local/mgr5/addon;
  • ispmanager выполняет обработчики от пользователя root;
  • они выводят в stdout XML, который интерпретируется UI-подсистемой ispmanager;
  • описание страниц разных видов и их элементов вместе с отображаемой информацией - элементами списков, значениями полей форм и т.п;
  • ошибки, которые должны быть отображены;
  • результаты успешного выполнения действий, которые приводят к переходу на другую страницу и т.п.
  • у них есть доступ к ряду переменных окружения, которые предоставляет им при выполнении ispmanager.

Так как обработчик - это просто исполняемый файл, который выводит XML, несложно реализовать его практически на любом языке программирования.

Несколько примеров можно найти здесь: Примеры обработчиков на PHP, Python, Node.

Отладка обработчиков

Часто при разработке плагинов при обращении к соответствующему func плагина (например, при переходе на созданный пункт меню) появляется такое уведомление:

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

Поскольку обработчик - исполняемый файл, то один из возможных способов отладки - просто выполнить его из командной строки, например, для плагина с Hello, world!:

/usr/local/mgr5/addon/helloworld.sh

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

export PARAM_name=Вася

/usr/local/mgr5/addon/helloworld.sh

Для отладки может помочь утилита mgrctl, о которой можно прочесть подробнее здесь.

Преимущества использования mgrctl

  • можно задавать разные форматы вывода (опцией -o, для отладки подойдут варианты -o devel и -o json); 
  • можно передавать значения полей формы;
  • можно выполнять запрос от лица другого пользователя, добавляя в качестве параметра su=user_name.

Недостаток mgctl

mgrctl выводит результат обработки XML, полученного ispmanager от обработчика, и в случае, если обработчик отработал с ошибкой или вернул невалидный XML, мы получим XML ошибки вместо вывода обработчика, и это мало поможет понять, что пошло не так.

Пример вызова mgrctl для плагина Hello, World! с передачей значения поля формы от лица пользователя vasya:

mgrctl -o devel helloworld name=Вася su=vasya