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

Синхронизация сессий в биллинге и МПД насах
http://forum.bitel.ru/viewtopic.php?f=25&t=8664
Страница 1 из 1

Автор:  Akhmat [ 06 ноя 2013, 16:19 ]
Заголовок сообщения:  Синхронизация сессий в биллинге и МПД насах

случается иногда, что сессия не сбросилась на мпд, либо сбой какой. в результате, сессия работает, а в биллинге ее нет. не хорошо.
Код:
import bitel.billing.server.util.*;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.net.HttpURLConnection;
import java.net.MalformedURLException;
import java.net.ProtocolException;
import java.net.URL;
import java.sql.*;

public void main( setup, con, conSlave )
{
   int MID = 1 ;
   String[][] mpdnases = {//урлки мпд насов, и их логин/пароль
      {"http://10.11.1.1:5006", "user:password"},
      {"http://10.11.1.2:5006", "user:password"},
      {"http://10.11.1.3:5006", "user:password"},
      {"http://10.11.1.4:5006", "user:password"},
      {"http://10.11.1.5:5006", "user:password"}
   };

   GregorianCalendar cal = new GregorianCalendar();
   int yy = cal.get(Calendar.YEAR);
   int _mm = cal.get(Calendar.MONTH)+1;
   String mm = Integer.toString(_mm);
   if (_mm >= 1 && _mm <= 9)
      mm = "0"+_mm;   

   String SQL = "SELECT id FROM log_session_"+MID+"_"+yy+mm+" WHERE login_name=? AND status=0";
   PreparedStatement ps = con.prepareStatement( SQL );


   for (int i = 0; i < mpdnases.length; i++ ){
      print("LOOKING MPD " + mpdnases[i][0] + "\n") ;
      String encoded = new sun.misc.BASE64Encoder().encode (mpdnases[i][1].getBytes());
      String line = null;
      String login = null;
      URL serverAddress = new URL( mpdnases[i][0] + "/bincmd?show%20sessions");
      HttpURLConnection connection = (HttpURLConnection)serverAddress.openConnection();
      connection.setReadTimeout(10000);
      connection.setRequestProperty ("Authorization", "Basic " + encoded);
      connection.connect();
      BufferedReader rd = new BufferedReader(new InputStreamReader(connection.getInputStream()));
      String[] tmp = null ;

      while ((line = rd.readLine()) != null)
      {
         tmp = line.split("\\t");
         if (tmp.length > 7 ){
            if ( !( tmp[1].startsWith("10.") || tmp[1].startsWith("192.168.") ) ){
               login = tmp[7].trim() ;
               ps.setString(1,login) ;
               ResultSet rs = ps.executeQuery();
               if ( !rs.next() ) //в биллинге нет сессии, сбрасываем
               {
                  String urlclose = mpdnases[i][0] + "/bincmd?link%20"+tmp[4] + "&close" ;
                  print("closing session for " + login + "..." ) ;
                  HttpURLConnection connClose = (HttpURLConnection)new URL(urlclose).openConnection();
                  connClose.setReadTimeout(10000);
                  connClose.setRequestProperty ("Authorization", "Basic " + encoded);
                  connClose.connect();
                  if (connClose.getResponseCode() == HttpURLConnection.HTTP_OK ){
                     print ("CLOSED!");
                  }else{
                     print ("WARNING. Session not closed" + connClose.getResponseCode());
                  }

               }
            }
         }
      }
   }
}

Глобальный скрипт в помощь. Можно в планировщик сунуть, раз в сутки, ночью чтобы подчищал хвосты.

Автор:  skyb [ 06 ноя 2013, 19:57 ]
Заголовок сообщения:  Re: Синхронизация сессий в биллинге и МПД насах

модуль то какой?

Автор:  Phricker [ 06 ноя 2013, 20:17 ]
Заголовок сообщения:  Re: Синхронизация сессий в биллинге и МПД насах

skyb писал(а):
модуль то какой?

Вангую
Код:
String SQL = "SELECT id FROM log_session_"+MID+"_"+yy+mm+" WHERE login_name=? AND status=0";

Автор:  Akhmat [ 07 ноя 2013, 13:02 ]
Заголовок сообщения:  Re: Синхронизация сессий в биллинге и МПД насах

модуль диалап. в общем скрипт сбрасывает лишние сессии с мпд наса. лишние сессии тут определяются по модулю диалапа. возможно и инет можно задействовать, поправив запрос, что Phricker указал

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