Skip to content

Commit 8142447

Browse files
committed
Only storing the exceeded limits as the full events are in event_stats with type PAPI
1 parent ee16515 commit 8142447

File tree

1 file changed

+13
-2
lines changed

1 file changed

+13
-2
lines changed

orcid-core/src/main/java/org/orcid/core/api/rate_limit/PapiRateLimitRedisClient.java

+13-2
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,12 @@ public class PapiRateLimitRedisClient {
2828
@Value("${org.orcid.papi.rate.limit.redisCacheExpiryInSec:172800}")
2929
private int CASH_EXPIRY_IN_SECONDS; // caching for 2 days to have time to
3030
// synch with DB
31+
32+
@Value("${org.orcid.papi.rate.limit.anonymous.requests:10000}")
33+
private int anonymousRequestLimit;
34+
35+
@Value("${org.orcid.papi.rate.limit.known.requests:40000}")
36+
private int knownRequestLimit;
3137

3238
@Autowired
3339
private PublicApiDailyRateLimitDao papiRateLimitingDao;
@@ -82,10 +88,15 @@ else if(StringUtils.isNotEmpty(redisRateLimitEntity.getClientId())){
8288
pgRateLimitEntity = papiRateLimitingDao.findByClientIdAndRequestDate(redisRateLimitEntity.getClientId(), requestDate);
8389
isClient = true;
8490
}
91+
//only save the exceeded limits
8592
if(pgRateLimitEntity != null) {
86-
papiRateLimitingDao.updatePublicApiDailyRateLimit(pgRateLimitEntity, isClient);
93+
if(((pgRateLimitEntity.getRequestCount() > knownRequestLimit) && isClient) || ((pgRateLimitEntity.getRequestCount() > anonymousRequestLimit) && !isClient)) {
94+
papiRateLimitingDao.updatePublicApiDailyRateLimit(pgRateLimitEntity, isClient);
95+
}
8796
} else {
88-
papiRateLimitingDao.persist(redisObjJsonToEntity(allValuesForKey.get(key)));
97+
if(((redisRateLimitEntity.getRequestCount() > knownRequestLimit) && isClient) || ((redisRateLimitEntity.getRequestCount() > anonymousRequestLimit) && !isClient)) {
98+
papiRateLimitingDao.persist(redisRateLimitEntity);
99+
}
89100
}
90101
redisClient.remove(key);
91102
}

0 commit comments

Comments
 (0)