package com.github.aesteve.vertx.nubes.context;
import io.vertx.core.json.JsonArray;
import io.vertx.core.json.JsonObject;
import java.util.ArrayList;
import java.util.List;
import java.util.stream.Collectors;
public class ClientAccesses {
private List<Long> history;
public ClientAccesses() {
history = new ArrayList<>();
}
public void newAccess() {
history.add(System.currentTimeMillis());
}
public boolean isOverLimit(RateLimit limit) {
long minBound = System.currentTimeMillis() - limit.getTimeUnit().toMillis(limit.getValue());
long count = history.stream().filter(access -> access > minBound).count();
return count > limit.getCount();
}
public void clearHistory(Long keepAfter) {
history = history.stream().filter(access -> access > keepAfter).collect(Collectors.toList());
}
public boolean noAccess() {
return history.isEmpty();
}
@SuppressWarnings("unchecked")
public static ClientAccesses fromJsonObject(JsonObject json) {
ClientAccesses accesses = new ClientAccesses();
JsonArray array = json.getJsonArray("history");
if (array != null) {
accesses.history = array.getList();
}
return accesses;
}
public JsonObject toJsonObject() {
return new JsonObject().put("history", new JsonArray(history));
}
}