BiTel

Форум BiTel
bgbilling.ru     docs.bitel.ru     wiki.bitel.ru     dbinfo.bitel.ru     bgcrm.ru     billing.bitel.ru     bitel.ru    
Текущее время: 20 июн 2025, 00:15

Часовой пояс: UTC + 5 часов [ Летнее время ]




Начать новую тему Ответить на тему  [ Сообщений: 7 ] 
Автор Сообщение
 Заголовок сообщения: а как связать inet_connection_{mid} и contract?
СообщениеДобавлено: 14 мар 2016, 13:16 
Не в сети
Клиент

Зарегистрирован: 10 ноя 2014, 18:38
Сообщения: 396
Карма: 0
а как связать inet_connection_{mid} и contract?

вообще
нужен список контрактов, у которых есть активные сессии pppoe с ip опеределённого диапазона.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: 14 мар 2016, 13:28 
Galkov писал(а):
а как связать inet_connection_{mid} и contract?

вообще
нужен список контрактов, у которых есть активные сессии pppoe с ip опеределённого диапазона.

Через servId в inet_connection_{mid}:
Код:
servId   int(11)   false      id сервиса
ipAddress   varbinary(24)   true      ip адрес

А servId описан в inet_serv_{mid}:
Код:
id   int(11)   false      id сервиса   
contractId   int(11)   false      id договора


Вернуться к началу
  
 
СообщениеДобавлено: 14 мар 2016, 17:21 
Не в сети
Клиент

Зарегистрирован: 10 ноя 2014, 18:38
Сообщения: 396
Карма: 0
Почему-то ниже приведённый код не сбрасывает сессии... я правильное значение подставляю как id сессии?

Код:
   Connection con = connectionSet2.getConnection();
      Statement stmt = con.createStatement();
      String SQL = "select 

                                         is1.id as sessionID

                                     from contract c
                                     left join contract_balance cb   on c.id=cb.cid
                                     left join inet_serv_1 is1       on is1.contractId = c.id
                                     left join inet_connection_1 ic1 on ic1.servId = is1.Id
                                     where ((cb.summa1+cb.summa2-cb.summa3-cb.summa4) >= 0) and (cb.yy = YEAR (NOW())) and (cb.mm=MONTH(NOW())) and (is1.id is not NULL) and (is1.deviceid=5) and (is1.dateFrom<NOW()) and (is1.dateTo>NOW() or (is1.dateTo is NULL)) and (ic1.deviceState=1) and (ic1.status IN (0,1,2)) and (ic1.acctSessionId is NOT NULL) and (INET_NTOA(CONV(HEX(ic1.ipAddress),16,10)) LIKE '10.225.%'      )";
   
      logger.debug(ARROW+SQL);
      ResultSet res = stmt.executeQuery(SQL);
      InetSessionDao ISD = new InetSessionDao(con,1);
      java.util.Date Dt = new java.util.Date();

      while (res.next())
         {
            long str =  Long.parseLong(res.getString("sessionID"));

            if (RUMPEL)
               { if (ISD.closeSession(str, Dt))                      {   logger.info(ARROW+": сессия закрыта!");   }                     
                  else   {   logger.info(ARROW+": какая-то ошибка с закрытием сессии");   } }
            else    
               {   
                  logger.info(ARROW+res.getString("ID")+" "+res.getString("sessionID")+" "+Dt);
                  logger.info(ARROW+": учебный режим!");   
               }
         }
         try { if (stmt != null) stmt.close(); } catch (SQLException e) { e.printStackTrace(); }   
   }


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: 14 мар 2016, 17:31 
Не в сети
Клиент
Аватара пользователя

Зарегистрирован: 29 мар 2010, 23:11
Сообщения: 5854
Карма: 472
ic1.id

_________________
Цитаты великих людей :umnik:
Напишите в helpdesk © stark
повторяю: => хелпдеск => доработка => профит © dimOn
свершилось... © skn
Мой код изящен, лёгок, оригинален, краток. Как прохладный весенний ветерок, как звонкий ручей! © dimOn
Вежливый разработчик © Artur
Эти баги тоже исправлены, как и те, которые еще не написаны © Artur
ну т.е. существует воркэраунд, ок © dimOn


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: 14 мар 2016, 17:36 
Не в сети
Клиент

Зарегистрирован: 10 ноя 2014, 18:38
Сообщения: 396
Карма: 0
Phricker писал(а):
ic1.id


так тоже идёт через
Код:
logger.info(ARROW+": какая-то ошибка с закрытием сессии");


и сессия не закрыта.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: 14 мар 2016, 18:50 
Не в сети
Клиент
Аватара пользователя

Зарегистрирован: 29 мар 2010, 23:11
Сообщения: 5854
Карма: 472
Я сбрасываю так.
Код:
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 модуля Inet
      
      @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 ipaddress BETWEEN UNHEX(CONV(INET_ATON('172.24.219.1'), 10, 16)) AND UNHEX(CONV(INET_ATON('172.24.255.255'), 10, 16)) AND STATUS = 1 ";
         String query =    " SELECT id FROM inet_connection_12 WHERE STATUS = 1 AND deviceid = 1714 ";
         //String query =    " SELECT * FROM inet_connection_12 WHERE STATUS = 1 AND accessCode > 0 ";
         PreparedStatement ps = con.prepareStatement( query );
         ResultSet rs = ps.executeQuery();
         while ( rs.next() )
         {
            count++;
            long sessionId = rs.getInt( 1 );
            //inetServ.connectionClose(sessionId);
            inetServ.connectionFinish(sessionId);
         }
         rs.close();
         ps.close();
         print("Сброшено " + count + " соединений");
         long timeEnd = System.currentTimeMillis();
         print( "Process time: " + (timeEnd - timeStart)/1000 + " s." );
      }
   }

_________________
Цитаты великих людей :umnik:
Напишите в helpdesk © stark
повторяю: => хелпдеск => доработка => профит © dimOn
свершилось... © skn
Мой код изящен, лёгок, оригинален, краток. Как прохладный весенний ветерок, как звонкий ручей! © dimOn
Вежливый разработчик © Artur
Эти баги тоже исправлены, как и те, которые еще не написаны © Artur
ну т.е. существует воркэраунд, ок © dimOn


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: 14 мар 2016, 19:28 
Не в сети
Клиент

Зарегистрирован: 10 ноя 2014, 18:38
Сообщения: 396
Карма: 0
спасибо!
Код:
 inetServ.connectionFinish(sessionId);


работает.


Вернуться к началу
 Профиль  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 7 ] 

Часовой пояс: UTC + 5 часов [ Летнее время ]


Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 1


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  
cron
POWERED_BY
Русская поддержка phpBB
[ Time : 0.101s | 29 Queries | GZIP : On ]