diff --git a/brouter-server/src/main/java/btools/server/IpAccessMonitor.java b/brouter-server/src/main/java/btools/server/IpAccessMonitor.java index 2aa1c8e..3f3da83 100644 --- a/brouter-server/src/main/java/btools/server/IpAccessMonitor.java +++ b/brouter-server/src/main/java/btools/server/IpAccessMonitor.java @@ -8,21 +8,31 @@ public class IpAccessMonitor private static Object sync = new Object(); private static HashMap ipAccess = new HashMap(); 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(); } } diff --git a/brouter-server/src/main/java/btools/server/RouteServer.java b/brouter-server/src/main/java/btools/server/RouteServer.java index ce79ec2..4d0887e 100644 --- a/brouter-server/src/main/java/btools/server/RouteServer.java +++ b/brouter-server/src/main/java/btools/server/RouteServer.java @@ -152,8 +152,15 @@ public class RouteServer extends Thread implements Comparable 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 params = getUrlParams(url);