session/ip info
This commit is contained in:
parent
8206a1ae84
commit
31e761e731
2 changed files with 26 additions and 9 deletions
|
@ -8,21 +8,31 @@ public class IpAccessMonitor
|
|||
private static Object sync = new Object();
|
||||
private static HashMap<String,Long> ipAccess = new HashMap<String,Long>();
|
||||
private static long MAX_IDLE = 900000; // 15 minutes
|
||||
|
||||
private static long CLEANUP_INTERVAL = 10000; // 10 seconds
|
||||
private static long lastCleanup;
|
||||
|
||||
public static boolean touchIpAccess( String ip )
|
||||
{
|
||||
long t = System.currentTimeMillis();
|
||||
synchronized( sync )
|
||||
{
|
||||
Long lastTime = ipAccess.get( ip );
|
||||
if ( lastTime == null || t - lastTime.longValue() > MAX_IDLE )
|
||||
ipAccess.put( ip, Long.valueOf( t ) );
|
||||
return lastTime == null || t - lastTime.longValue() > MAX_IDLE;
|
||||
}
|
||||
}
|
||||
|
||||
public static int getSessionCount()
|
||||
{
|
||||
long t = System.currentTimeMillis();
|
||||
synchronized( sync )
|
||||
{
|
||||
if ( t - lastCleanup > CLEANUP_INTERVAL )
|
||||
{
|
||||
ipAccess.put( ip, Long.valueOf( t ) );
|
||||
cleanup(t);
|
||||
return true; // new session detected
|
||||
cleanup( t );
|
||||
lastCleanup = t;
|
||||
}
|
||||
ipAccess.put( ip, Long.valueOf( t ) ); // touch existing session
|
||||
return false;
|
||||
return ipAccess.size();
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -152,8 +152,15 @@ public class RouteServer extends Thread implements Comparable<RouteServer>
|
|||
|
||||
InetAddress ip = clientSocket.getInetAddress();
|
||||
String sIp = xff == null ? (ip==null ? "null" : ip.toString() ) : xff;
|
||||
String sessionMode = IpAccessMonitor.touchIpAccess( sIp ) ? " new " : " ";
|
||||
System.out.println( formattedTimestamp() + sessionMode + " ip=" + sIp + " -> " + getline );
|
||||
boolean newSession = IpAccessMonitor.touchIpAccess( sIp );
|
||||
String sessionInfo = " new";
|
||||
if ( !newSession )
|
||||
{
|
||||
int sessionCount = IpAccessMonitor.getSessionCount();
|
||||
sessionInfo = " " + Math.min( sessionCount, 999 );
|
||||
sessionInfo = sessionInfo.substring( sessionInfo.length() - 4 );
|
||||
}
|
||||
System.out.println( formattedTimestamp() + sessionInfo + " ip=" + sIp + " -> " + getline );
|
||||
|
||||
String url = getline.split(" ")[1];
|
||||
HashMap<String,String> params = getUrlParams(url);
|
||||
|
|
Loading…
Reference in a new issue