From e5c13eff74e076ceb30918ccdfd17b8bbb6073c4 Mon Sep 17 00:00:00 2001 From: Adam Date: Wed, 26 Sep 2018 19:06:46 -0400 Subject: [PATCH] xp tracker: limit to one update per 5 minutes --- .../runelite/http/service/xp/XpTrackerService.java | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) diff --git a/http-service/src/main/java/net/runelite/http/service/xp/XpTrackerService.java b/http-service/src/main/java/net/runelite/http/service/xp/XpTrackerService.java index 6fe3ce4bc2..2da8968fa2 100644 --- a/http-service/src/main/java/net/runelite/http/service/xp/XpTrackerService.java +++ b/http-service/src/main/java/net/runelite/http/service/xp/XpTrackerService.java @@ -24,6 +24,7 @@ */ package net.runelite.http.service.xp; +import java.time.Duration; import java.time.Instant; import java.util.concurrent.ExecutionException; import lombok.extern.slf4j.Slf4j; @@ -43,6 +44,8 @@ import org.sql2o.Sql2o; @Slf4j public class XpTrackerService { + private static final Duration UPDATE_TIME = Duration.ofMinutes(5); + @Autowired @Qualifier("Runelite XP Tracker SQL2O") private Sql2o sql2o; @@ -62,7 +65,8 @@ public class XpTrackerService { PlayerEntity playerEntity = findOrCreatePlayer(con, username); - XpEntity currentXp = findXpAtTime(con, username, Instant.now()); + Instant now = Instant.now(); + XpEntity currentXp = findXpAtTime(con, username, now); if (currentXp != null) { XpData hiscoreData = XpMapper.INSTANCE.hiscoreResultToXpData(hiscoreResult); @@ -73,6 +77,13 @@ public class XpTrackerService log.debug("Hiscore for {} already up to date", username); return; } + + Duration difference = Duration.between(currentXp.getTime(), now); + if (difference.compareTo(UPDATE_TIME) <= 0) + { + log.debug("Updated {} too recently", username); + return; + } } con.createQuery("insert into xp (player,attack_xp,defence_xp,strength_xp,hitpoints_xp,ranged_xp,prayer_xp,magic_xp,cooking_xp,woodcutting_xp,"