static int simpleSpamClientDetect_interval = 60000; static double simpleSpamClientDetect_perSecondThreshold = 2.0; // per IP + URI static int simpleSpamClientDetect_spamMax; // ip + uri -> count static ExpiringHashMap, Int> simpleSpamClientDetect_ipsAndUris = new ExpiringHashMap(simpleSpamClientDetect_interval); // returns pair(count, bad) static Pair simpleSpamClientDetect(S clientIP, S uri) { Pair pair = pair(clientIP, uri); int ipCount = toInt(simpleSpamClientDetect_ipsAndUris.get(pair)); simpleSpamClientDetect_ipsAndUris.put(pair, ipCount+1); simpleSpamClientDetect_spamMax = iround(simpleSpamClientDetect_perSecondThreshold*simpleSpamClientDetect_interval/1000); ret pair(ipCount, ipCount >= simpleSpamClientDetect_spamMax); }