diff --git a/openid-connect-server/src/main/java/org/mitre/openid/connect/service/impl/DefaultStatsService.java b/openid-connect-server/src/main/java/org/mitre/openid/connect/service/impl/DefaultStatsService.java index cf6cfea8d..fc7e0e18a 100644 --- a/openid-connect-server/src/main/java/org/mitre/openid/connect/service/impl/DefaultStatsService.java +++ b/openid-connect-server/src/main/java/org/mitre/openid/connect/service/impl/DefaultStatsService.java @@ -24,6 +24,7 @@ import java.util.HashMap; import java.util.HashSet; import java.util.Map; import java.util.Set; +import java.util.concurrent.TimeUnit; import org.mitre.oauth2.model.ClientDetailsEntity; import org.mitre.oauth2.service.ClientDetailsEntityService; @@ -33,6 +34,8 @@ import org.mitre.openid.connect.service.StatsService; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; +import com.google.common.base.Supplier; +import com.google.common.base.Suppliers; import com.google.common.collect.HashMultiset; import com.google.common.collect.Multiset; @@ -48,9 +51,32 @@ public class DefaultStatsService implements StatsService { @Autowired private ClientDetailsEntityService clientService; + + // stats cache + private Supplier> summaryCache = Suppliers.memoizeWithExpiration(new Supplier>() { + @Override + public Map get() { + return computeSummaryStats(); + } + }, 10, TimeUnit.MINUTES); + + private Supplier> byClientIdCache = Suppliers.memoizeWithExpiration(new Supplier>() { + + @Override + public Map get() { + return computeByClientId(); + } + + }, 10, TimeUnit.MINUTES); + @Override public Map calculateSummaryStats() { + return summaryCache.get(); + } + + // do the actual computation + private Map computeSummaryStats() { // get all approved sites Collection allSites = approvedSiteService.getAll(); @@ -75,6 +101,10 @@ public class DefaultStatsService implements StatsService { */ @Override public Map calculateByClientId() { + return byClientIdCache.get(); + } + + private Map computeByClientId() { // get all approved sites Collection allSites = approvedSiteService.getAll();