From 48510e2c541e4197234eab3b3fee00b92436c5b8 Mon Sep 17 00:00:00 2001 From: gsd Date: Sun, 10 May 2026 18:41:38 +0300 Subject: [PATCH] graph cache 2 --- src/main/java/app/controllers/StatsController.java | 6 ++++-- src/main/java/app/updates/OnlineUpdater.java | 7 +++++-- 2 files changed, 9 insertions(+), 4 deletions(-) diff --git a/src/main/java/app/controllers/StatsController.java b/src/main/java/app/controllers/StatsController.java index 524cbc8..a94fd2d 100644 --- a/src/main/java/app/controllers/StatsController.java +++ b/src/main/java/app/controllers/StatsController.java @@ -76,7 +76,8 @@ public class StatsController { @RequestParam(required = false, defaultValue = "%") String server_id) { if (limit > 366) return new ResponseEntity<>(HttpStatus.NOT_ACCEPTABLE); - return new ResponseEntity<>(onlineUpdater.getPeakOfDays(server_id, limit), HttpStatus.OK); + return new ResponseEntity<>(onlineUpdater.getPeakOfDays(server_id, limit, + "online;sid=" + server_id + ";limit=" + limit), HttpStatus.OK); } @GetMapping("/graph/peak/of/minutes") @@ -88,7 +89,8 @@ public class StatsController { @RequestParam(required = false, defaultValue = "%") String server_id ) { if (limit > 31) return new ResponseEntity<>(HttpStatus.NOT_ACCEPTABLE); - return new ResponseEntity<>(onlineUpdater.getMaxPeakOfFiveMinutes(server_id, limit, minutes), HttpStatus.OK); + return new ResponseEntity<>(onlineUpdater.getMaxPeakOfFiveMinutes(server_id, limit, minutes, + "online;sid=" + server_id + ";limit=" + limit + ";minutes=" + minutes), HttpStatus.OK); } diff --git a/src/main/java/app/updates/OnlineUpdater.java b/src/main/java/app/updates/OnlineUpdater.java index b3b79f1..4b3dd1b 100644 --- a/src/main/java/app/updates/OnlineUpdater.java +++ b/src/main/java/app/updates/OnlineUpdater.java @@ -7,6 +7,7 @@ import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Qualifier; import org.springframework.boot.context.event.ApplicationReadyEvent; +import org.springframework.cache.annotation.Cacheable; import org.springframework.context.event.EventListener; import org.springframework.jdbc.core.JdbcTemplate; import org.springframework.stereotype.Component; @@ -131,7 +132,8 @@ GROUP BY ts, server_id) as s group by s.ts order by s.ts desc limit ? (rs, rowNum) -> new AvgPeakOfDay(rs)); } - public List getMaxPeakOfFiveMinutes(String server_id, int limit, Integer minutes) { + @Cacheable(value = "graphs", key = "#cacheKey") + public List getMaxPeakOfFiveMinutes(String server_id, int limit, Integer minutes, String cacheKey) { long utime = LocalDate.now().minusDays(limit -1).toEpochSecond(LocalTime.MIN, ZoneOffset.ofHours(3)); return jdbcTemplate_ro.query("select round(sum(sub.player_count))::int as player_count, sub.ts as fulldate from ("+ "SELECT round(avg(player_count), 4) as player_count, date_bin('"+minutes+" minutes'"+",to_timestamp(utime)::timestamp, '2001-01-01 00:02:30') as ts "+ @@ -145,7 +147,8 @@ GROUP BY ts, server_id) as s group by s.ts order by s.ts desc limit ? (rs, rowNum) -> new StatsOfPeakOfPerFiveMinutes(rs)); } - public List getPeakOfDays(String server_id, int limit) { + @Cacheable(value = "graphs", key = "#cacheKey") + public List getPeakOfDays(String server_id, int limit, String cacheKey) { List maxPeakOfDays = getMaxPeakOfDays(server_id, limit); List avgPeakOfDays = getAvgPeakOfDays(server_id, limit); List statsOfPeakOfDays = new ArrayList<>();