Обработчик активации сервисов

Обработчик активации сервисов синхронизирует состояние сервиса и сессии на устройстве - именно он производит открытие/закрытие доступа, изменение скорости или других параметров.

Обработчик привязывается к типу устройства и вызывается поочередно от корня дерева устройств до затронутого устройства (при необходимости синхронизировать сервис, привязанный к устройству данного типа или же сессию, начатую на устройстве данного типа).

В поставку модуля 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