import java.util.HashMap;
import java.util.Map;
public class RateLimitedEntry {
private final int maxRequests;
private final long windowMs;
private final Map<String, Integer> requestCounts;
public RateLimitedEntry(int maxRequests, long windowMs) {
this.maxRequests = maxRequests;
this.windowMs = windowMs;
this.requestCounts = new HashMap<>();
}
public synchronized boolean allowRequest(String identifier) {
// Get the current time
long currentTime = System.currentTimeMillis();
// Reset counts if outside the window
requestCounts.remove(identifier);
requestCounts.put(identifier, 0);
// Check if the identifier has exceeded the limit
if (requestCounts.get(identifier) >= maxRequests) {
return false; // Rate limit exceeded
}
// Increment the request count for this identifier
requestCounts.put(identifier, requestCounts.get(identifier) + 1);
return true; // Request allowed
}
public synchronized void resetCounts(String identifier) {
requestCounts.remove(identifier);
}
public int getRemainingRequests(String identifier) {
if(requestCounts.containsKey(identifier)) {
return maxRequests - requestCounts.get(identifier);
}
return maxRequests;
}
}
Add your comment