Page tree
Skip to end of metadata
Go to start of metadata

Особенности работы

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

2. Пакеты обрабатываются по URL вида /plugin/name, где plugin - один из плагинов hard, name - произвольное название объекта плагина (instance). Одновременно может использоваться несколько объектов одного плагина. Каждый объект плагина имеет собственные настройки, определяемые в plugins.plugin.name. Активные объекты плагинов определяются в конфигурационном файле default.yml, в ключе enabled_plugins. Например:

Активны объекты main и test плагина base и main плагина dhcp
enabled_plugins: [base/main, base/test, dhcp/main]

3. Перед обработкой запроса непосредственно объектом плагина, выполняется последовательность фильтров, определённых в plugins.plugin.name.call_stack в прямом порядке. После завершения действий объекта плагина, выполняются те же фильтры из call_stack, но в обратном порядке. Таким образом, с помощью добавления пользовательского фильтра можно изменять данные как запроса, так и ответа приложения.

4. При обработке пакетов аккаунтинга, данные помещаются в кэш MongoDB, в коллекцию accounting_data. Загрузка данных аккаунтинга (cdr и трафика) в биллинг выполняется отдельным скриптом, который запускается командой ./init/hard.sh batch (в опции -f можно указать директорию с пользовательскими настройками). Данный скрипт должен периодически запускаться через cron.

Принцип обработки запроса

  1. Поступает запрос на url вида plugin/name
  2. Проверяется наличие существования плагина в приложении и объекта плагина в enabled_plugins
  3. Поиск цепочки вызова в plugins.plugin.name.call_stack, если такая цепочка не найдена, используется plugins.plugin.default.call_stack
  4. Последовательно выполняются фильтры цепочки вызова в прямом порядке
  5. Выполняются обработка запроса (возможно предварительно измененного фильтрами) объектом плагина
  6. Последовательно выполняются фильтры цепочки вызова в обратном порядке
  7. Возвращается результат обработки

Некоторые фильтры выполняют обработку только при прямом или только при обратном вызове (например, before и after фильтры).

  • No labels