случается иногда, что сессия не сбросилась на мпд, либо сбой какой. в результате, сессия работает, а в биллинге ее нет. не хорошо.
Код:
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());
}
}
}
}
}
}
}
Глобальный скрипт в помощь. Можно в планировщик сунуть, раз в сутки, ночью чтобы подчищал хвосты.