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/ |