Дерево страниц
Перейти к концу метаданных
Переход к началу метаданных

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

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

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