Доп. действие сброса активных соединений
Материал из 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 + " сессий." ); } }