Обработчики
Все обработчики плагинов имеют ряд общих черт:
- это исполняемые файлы (должны иметь права на исполнение для пользователя и группы 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
- можно задавать разные форматы вывода (опцией -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