forum.bitel.ru
http://forum.bitel.ru/

групповой сброс сессий
http://forum.bitel.ru/viewtopic.php?f=44&t=10547
Страница 1 из 1

Автор:  survivor [ 25 май 2015, 14:05 ]
Заголовок сообщения:  групповой сброс сессий

Доброго дня,

Нужно для группы пользователей сбросить сессии в мониторе модуля inet. Можно это как-то сделать? Если бы еще через sql - вообще супер было бы... Можно сброс типа "завершить (зависшиее) соединение".

Почему нужно - меняем абонентам диапазон ip и параллельно переезжаем на другой L3 брас. Сам переход прошел на ура без даун-таймов (через "переопределение" в устройствах и новый пул адресов), но проблема в том, что те абоненты для кого уже есть dhcp сессия настырно переполучают все-тот же старый адрес и сессия продлевается (я уже и стоп датой старый пул закрыл и из списка dhcp.ipCategories его удалил). Единственное что помогает - сбросить dhcp сессию и через lease time абонент получает новый ip. Если на ночь запланировать тех работы - это не проблема. Но как сбросить сотни сессий разных юзеров? Замучаюсь мышкой тыкать...

Автор:  vkulakov [ 25 май 2015, 14:09 ]
Заголовок сообщения:  Re: групповой сброс сессий

У меня для этих целей скрипт в дин. коде: через SQL выбираешь нужных абонентов и делаешь с ними что захочешь потом. Не только для сброса полезно.

Автор:  Phricker [ 25 май 2015, 14:10 ]
Заголовок сообщения:  Re: групповой сброс сессий

Код:
package ru.ellcom.bgbilling.scripts.inet;

import ru.bitel.bgbilling.kernel.container.managed.ServerContext;
import ru.bitel.bgbilling.kernel.script.server.dev.GlobalScriptBase;
import ru.bitel.bgbilling.modules.inet.api.common.service.InetServService;
import ru.bitel.bgbilling.modules.inet.api.common.service.InetSessionService;
import ru.bitel.bgbilling.server.util.Setup;
import ru.bitel.common.sql.ConnectionSet;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;

public class breakSessions
   extends GlobalScriptBase
   {
      static int INET_MID = 12; //ID модуля DialUp
      
      @Override
      public void execute( Setup setup, ConnectionSet connectionSet )
         throws Exception
      {
         Connection con  = connectionSet.getConnection();
         ServerContext context = ServerContext.get();
         InetSessionService inetServ = context.getService(InetSessionService.class, INET_MID);
         
         int count = 0;
         
         print("Start");
         long timeStart = System.currentTimeMillis();
         String query =    " SELECT id FROM inet_connection_12 WHERE INET_NTOA(CONV(HEX(ipAddress), 16, 10)) BETWEEN '77.232.165.1' AND '77.232.165.255' ";
         PreparedStatement ps = con.prepareStatement( query );
         ResultSet rs = ps.executeQuery();
         while ( rs.next() )
         {
            count++;
            long sessionId = rs.getInt( 1 );
            inetServ.connectionClose(sessionId);
         }
         rs.close();
         ps.close();
         print("Сброшено " + count + " соединений");
         long timeEnd = System.currentTimeMillis();
         print( "Process time: " + (timeEnd - timeStart)/1000 + " s." );
      }
   }

Автор:  survivor [ 25 май 2015, 14:38 ]
Заголовок сообщения:  Re: групповой сброс сессий

Спасибо! Попробую

Автор:  survivor [ 25 май 2015, 14:57 ]
Заголовок сообщения:  Re: групповой сброс сессий

Один такой ламерский вопрос (я в джаве вообще никак) - этот код куда подцепить? ))
Здесь нет функции main, как вызвать объект класса breakSessions?
Я вообще правильно понимаю что этот код нужно вставить в Сервис/Автоматизация/Глобальные скрипты поведения/Скрипты BGBS?

Автор:  survivor [ 25 май 2015, 15:07 ]
Заголовок сообщения:  Re: групповой сброс сессий

:(
Ругается на @Override

Код:
EXCEPTIONS:
Sourced file: clear_dhcp_sessions Token Parsing Error: Lexical error at line 20, column 8.  Encountered: "O" (79), after : "@"
Sourced file: clear_dhcp_sessions Token Parsing Error: Lexical error at line 20, column 8.  Encountered: "O" (79), after : "@": <at unknown location>

   at bsh.Interpreter.eval(Interpreter.java:707)
   at ru.bitel.bgbilling.kernel.script.server.bean.ScriptInstance.eval(ScriptInstance.java:327)
   at bitel.billing.server.script.global.bean.GlobalScriptMachine.runScriptImpl(GlobalScriptMachine.java:120)
   at bitel.billing.server.script.global.bean.GlobalScriptMachine.runScript(GlobalScriptMachine.java:73)
   at bitel.billing.server.script.global.bean.GlobalScriptManager.executeGlobalScript(GlobalScriptManager.java:40)
   at bitel.billing.server.script.global.action.ActionExecuteScript$1.run(ActionExecuteScript.java:48)
   at java.lang.Thread.run(Thread.java:745)

Автор:  Phricker [ 25 май 2015, 15:10 ]
Заголовок сообщения:  Re: групповой сброс сессий

Это в динамический код надо вставлять.

Автор:  survivor [ 25 май 2015, 15:18 ]
Заголовок сообщения:  Re: групповой сброс сессий

Ааа.. вот как.. а куда? в какую ветку? там у меня огромное количество вложенностей открыватся

Автор:  survivor [ 25 май 2015, 15:29 ]
Заголовок сообщения:  Re: групповой сброс сессий

Опять ругается:

Автор:  Phricker [ 25 май 2015, 15:31 ]
Заголовок сообщения:  Re: групповой сброс сессий

у вас файл называется inet а в самом коде написано public class breakSession
Либо одно либо другое переименуйте

Автор:  survivor [ 25 май 2015, 15:50 ]
Заголовок сообщения:  Re: групповой сброс сессий

Получилось! Большое спасибо!
Один ньюанс -
inetServ.connectionClose(sessionId);
отрабатывает "Закрыть соединение (отключить)", а мне надо "Завершить (зависшее) соединение". Это можно?

Автор:  Phricker [ 25 май 2015, 15:56 ]
Заголовок сообщения:  Re: групповой сброс сессий

http://bgbilling.ru/v6.2/javadoc/ru/bit ... rvice.html
заменить connectionClose на connectionFinish

Автор:  survivor [ 25 май 2015, 16:05 ]
Заголовок сообщения:  Re: групповой сброс сессий

то что надо! тема закрыта ))

Автор:  PavelGloba [ 02 июн 2015, 00:30 ]
Заголовок сообщения:  Re: групповой сброс сессий

Изображение

Мне тоже нужно было одному клиенту ip поменять, но что-то пошло не так. Завершить зависшее соединение теперь уже не получается. Пишет "соединение не найдено". Лишний сервис до сих пор висит на договоре и его не удалить, т.к. эта сессия считается активной. Кто-нибудь знает как её удалить?

Автор:  Amir [ 02 июн 2015, 21:20 ]
Заголовок сообщения:  Re: групповой сброс сессий

В логах ошибок нет? Устройство к которому привязана сессия в ветке Access+Accounting?

Можно через БД в inet_connection.

Автор:  PavelGloba [ 03 июн 2015, 00:22 ]
Заголовок сообщения:  Re: групповой сброс сессий

Ошибок нет
Amir писал(а):
Можно через БД в inet_connection.

А как?

Автор:  Amir [ 03 июн 2015, 11:41 ]
Заголовок сообщения:  Re: групповой сброс сессий

DELETE FROM inet_connection_<mid> WHERE id=2002

Автор:  PavelGloba [ 04 июн 2015, 16:33 ]
Заголовок сообщения:  Re: групповой сброс сессий

Помогло. Спасибо

Страница 1 из 1 Часовой пояс: UTC + 5 часов [ Летнее время ]
Powered by phpBB® Forum Software © phpBB Group
http://www.phpbb.com/