static int simpleSpamClientDetect2_interval = 60000; static double simpleSpamClientDetect2_perSecondThreshold = 2.0; // per IP + URI static int simpleSpamClientDetect2_spamMax; // ip + uri -> time, count static Map, Pair> simpleSpamClientDetect2_ipsAndUris = synchroMap(); // returns pair(count, bad) static Pair simpleSpamClientDetect2(S clientIP, S uri) { Pair pair = pair(clientIP, uri); Pair value = simpleSpamClientDetect2_ipsAndUris.get(pair); if (value == null || now() > value.a+simpleSpamClientDetect2_interval) simpleSpamClientDetect2_ipsAndUris.put(pair, value = pair(now(), 1)); else value.b++; simpleSpamClientDetect2_spamMax = iround(simpleSpamClientDetect2_perSecondThreshold*simpleSpamClientDetect2_interval/1000); ret pair(value.b, value.b >= simpleSpamClientDetect2_spamMax); }