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

You are viewing an old version of this page. View the current version.

Compare with Current View Page History

« Previous Version 11 Next »

Предварительная подготовка

Необходимо создать пользователя в mongodb (при установке из deb пакета это делается автоматически)

root@server:~# mongo --eval "db.addUser({ user: \"hard\", pwd: \"hard\", roles: [ \"userAdminAnyDatabase\" ] })" hard_cache || exit 0

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

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

2. Пакеты обрабатываются по URL вида /plugin/name, где plugin - один из плагинов hard, name - произвольное название объекта плагина. Одновременно может использоваться несколько объектов одного плагина. Каждый объект плагин имеет собственные настройки (определенные в 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. При обработке аккаунтинг-update пакетов, данные помещаются в кэш mongo db в коллекцию 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