Доп. действие сброса активных соединений

Материал из BiTel WiKi

Перейти к: навигация, поиск

Версия биллинга - 5.1.

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

import bitel.billing.server.util.*;
 
public void onEvent( event, setup, con, conSlave )
{
	event.addAction( 100, "Сброс всех VPN сессий" );
}

Вторая функция, обрабатывает событие Обработка доп. действий для договора.

import bitel.billing.server.util.*;
import ru.bitel.bgbilling.server.util.*;
import java.util.*;
import java.sql.*;
import bitel.billing.server.admin.eventbus.*;
import bitel.billing.server.dialup.bean.busevent.*;
 
int VPN_MID = 8;
 
public void onEvent( event, setup, con, conSlave )
{
	int actionId = event.getActionId();
	int contractId = event.getContractId();
 
	// сброс VPN сессий
	if( actionId == 100 )
	{
		int count = 0;
 
		String tableName = ServerUtils.getModuleMonthTableName( "log_session", new java.util.Date(), VPN_MID );
		if( ServerUtils.tableExists( con, tableName ) )
		{
			String query = 
				"SELECT session.id FROM " + tableName + " AS session " +
				"INNER JOIN user_login_" + VPN_MID + " AS login ON session.lid=login.id AND login.cid=? " +
				"WHERE session.status=0";
			PreparedStatement ps = con.prepareStatement( query );
			ps.setInt( 1, contractId );
			ResultSet rs = ps.executeQuery();
			while( rs.next() )
			{
				int recordId = rs.getInt( 1 );
				count++;
 
				print( "Killing " + recordId );
 
				BillingEventBus.publish( new DialupSessionBreakEvent( VPN_MID, recordId ) );								
			}
		}
 
		event.addReport( "Сброшено " + count + " сессий." );		
	}
}
Личные инструменты