Обработчик активации сервисов
Обработчик активации сервисов синхронизирует состояние сервиса и сессии на устройстве - именно он производит открытие/закрытие доступа, изменение скорости или других параметров.
Обработчик привязывается к типу устройства и вызывается поочередно от корня дерева устройств до затронутого устройства (при необходимости синхронизировать сервис, привязанный к устройству данного типа или же сессию, начатую на устройстве данного типа).
В поставку модуля Inet входят стандартные реализации для Cisco, Redback, MPD и т.п., производящие интеграцию с соответствующими устройствами. Исходные коды находятся в Управлении динамическим кодом, в пакете ru.bitel.bgbilling.modules.inet.dyn. Данные классы перетираются при обновлении, поэтому для изменения логики класса необходимо расширить его или создать копию, но не изменять его напрямую.
/** * Интерфейс обработчика активации сервисов.<br/> * <pre>Жизненный цикл: * init * * connect * serviceModify * serviceModify * serviceCancel * disconnect * * connect * serviceCreate * serviceModify * connectionModify * serviceModify * connectionClose * disconnect * destroy</pre> */public interface ServiceActivator{ /** * Инициализация обработчика. Вызывается после создания объекта. * @param setup * @param moduleId * @param device * @param deviceType * @param config * @return * @throws Exception */ public Object init( Setup setup, int moduleId, InetDevice device, InetDeviceType deviceType, ParameterMap config ) throws Exception; /** * Утилизация обработчика. Вызывается перед уничтожением объекта. * @return * @throws Exception */ public Object destroy() throws Exception; /** * Подключение к устройству для работы с ним. * @return * @throws Exception */ public Object connect() throws Exception; /** * Отключение от устройства. * @return * @throws Exception */ public Object disconnect() throws Exception; /** * Создание сервиса (по событию добавления или началу периода действия) * @param e * @return * @throws Exception */ public Object serviceCreate( ServiceActivatorEvent e ) throws Exception; /** * Изменение сервиса (подключение/отключение/изменение скорости). * Вызывается при изменении набора опций или изменении состояния сервиса * @see ServiceActivatorEvent * @see {@link ServiceActivatorEvent#getNewState()} * @param e * @return * @throws Exception */ public Object serviceModify( ServiceActivatorEvent e ) throws Exception; /** * Удаление сервиса (по событию удаления или окончания периода действия). * @param e * @return * @throws Exception */ public Object serviceCancel( ServiceActivatorEvent e ) throws Exception; /** * Изменение соединения. * Вызывается при изменении набора опции на соединении или при изменении состояния.<br/> * Обычно, при {@link ServiceActivatorEvent#getNewState()} == {@link InetServ#STATE_DISABLE} из этого метода происходит вызов метода {@link #connectionClose(ServiceActivatorEvent)} * @param e * @return * @throws Exception */ public Object connectionModify( ServiceActivatorEvent e ) throws Exception; /** * Закрытие (принудительное) соединения.<br/> * Обычно вызывается при {@link AccessCodes#TOO_MANY_SESSIONS_ERROR} или из метода {@link #connectionModify(ServiceActivatorEvent)} * @param e * @return * @throws Exception */ public Object connectionClose( ServiceActivatorEvent e ) throws Exception; /** * Обработка старта соединения. * @param event * @return * @throws Exception */ public Object onAccountingStart( ServiceActivatorEvent event ) throws Exception; /** * Обработка стопа соединения. * @param event * @return * @throws Exception */ public Object onAccountingStop( ServiceActivatorEvent event ) throws Exception;}Описание интерфейса ru.bitel.bgbilling.modules.inet.access.sa.ServiceActivator доступно в документации по API.
Параметры работы обработчика активации сервисов (прописываются в конфиге типа устройства или конфиге устройства):
# кол-во задач выполняющихся одним блоком#sa.batch.size=20# время паузы между блоком задач#sa.batch.pause.millis=0# время ожидания завершения асинхронных задачsa.batch.wait.millis=5000# время ожидания новой задачи, до того как отключиться от устройства (вызвать disconnect у ServiceActivator)sa.batch.waitNext.millis=5000# пауза при ошибке синхронизацииsa.error.pause.millis=60000# кол-во ошибок, возникающих подряд, для отправки оповещения (alarm)sa.error.alarm.count=20# кол-во ошибок, возникающих подряд, для отправки задачи в конец очередиsa.error.redelivery.count=100# таймаут задачи, которая не может выполниться из-за ошибок синхронизацииsa.error.redelivery.timeout=86400 sa.device.sync.allPath=Параметры пересинхронизации устройства (например, по определению перезагрузки устройства по uptime, который опрашивает обработчик управления устройством):
# при полной синхронизации устройства - синхронизировать все связанные устройства или только данное#sa.device.sync.allPath=1# при полной синхронизации устройства нужно ли вызывать onAccountingStart для активных сессий#sa.device.sync.onAccountingStart=0# нужно ли при полной синхронизации устройства вызывать сначала serviceCancel и только потом serviceCreate#sa.device.sync.cancelBeforeCreate=1# вызов всегда connectionModify вместо connectionClose#sa.connection.modifyInsteadClose=0# вызов всегда connectionClose вместо connectionModify#sa.connection.closeInsteadModify=0По умолчанию onAccountingStart/onAccountingStop не вызываются для сессий по трафику. Но может быть ситуация, что Вам необходимо выполнять какие-то команды при появлении трафика от абонента или при его долгом отсутсвии (когда сессия в биллинге закроется по таймауту); или же Вы хотите генерировать RADIUS-Accounting биллингом для старта и стопа сессии - тогда укажите в конфигурации устройства/типа устройства:
# включить onAccountingStart/onAccountingStop для сессий по трафикуsa.connection.auto.accountingEvent=1