From e7b568b752be5066087d761a40a619185460e162 Mon Sep 17 00:00:00 2001 From: jarvis2f <137974272+jarvis2f@users.noreply.github.com> Date: Mon, 6 Jan 2025 20:55:02 +0800 Subject: [PATCH] =?UTF-8?q?=F0=9F=94=A7=20refactor:=20Refactor=20the=20spe?= =?UTF-8?q?ed=20statistics=20logic=20and=20extract=20the=20`convertRangedS?= =?UTF-8?q?peedStats`=20method=20to=20improve=20readability.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/telegram/files/TelegramVerticle.java | 91 ++++++++++--------- 1 file changed, 46 insertions(+), 45 deletions(-) diff --git a/api/src/main/java/telegram/files/TelegramVerticle.java b/api/src/main/java/telegram/files/TelegramVerticle.java index 264fbfb..657f841 100644 --- a/api/src/main/java/telegram/files/TelegramVerticle.java +++ b/api/src/main/java/telegram/files/TelegramVerticle.java @@ -491,51 +491,7 @@ public class TelegramVerticle extends AbstractVerticle { return Future.all( DataVerticle.statisticRepository.getRangeStatistics(StatisticRecord.Type.speed, this.telegramRecord.id(), startTime, endTime) - .map(statisticRecords -> { - TreeMap> groupedSpeedStats = new TreeMap<>(Comparator.comparing( - switch (timeRange) { - case 1, 2 -> (Function) time -> - DateUtil.parse(time, DatePattern.NORM_DATETIME_MINUTE_FORMAT); - case 3, 4 -> DateUtil::parseDate; - default -> throw new IllegalStateException("Unexpected value: " + timeRange); - } - )); - for (StatisticRecord record : statisticRecords) { - JsonObject data = new JsonObject(record.data()); - long timestamp = record.timestamp(); - String time = switch (timeRange) { - case 1 -> - MessyUtils.withGrouping5Minutes(DateUtil.toLocalDateTime(DateUtil.date(timestamp))).format(DatePattern.NORM_DATETIME_MINUTE_FORMATTER); - case 2 -> - DateUtil.date(timestamp).setField(DateField.MINUTE, 0).toString(DatePattern.NORM_DATETIME_MINUTE_FORMAT); - case 3, 4 -> - DateUtil.date(timestamp).setField(DateField.MINUTE, 0).toString(DatePattern.NORM_DATE_FORMAT); - default -> throw new IllegalStateException("Unexpected value: " + timeRange); - }; - groupedSpeedStats.computeIfAbsent(time, k -> new ArrayList<>()).add(data); - } - return groupedSpeedStats.entrySet().stream() - .map(entry -> { - JsonObject speedStat = entry.getValue().stream().reduce(new JsonObject() - .put("avgSpeed", 0) - .put("medianSpeed", 0) - .put("maxSpeed", 0) - .put("minSpeed", Long.MAX_VALUE), - (a, b) -> new JsonObject() - .put("avgSpeed", a.getLong("avgSpeed") + b.getLong("avgSpeed")) - .put("medianSpeed", a.getLong("medianSpeed") + b.getLong("medianSpeed")) - .put("maxSpeed", Math.max(a.getLong("maxSpeed"), b.getLong("maxSpeed"))) - .put("minSpeed", Math.min(a.getLong("minSpeed"), b.getLong("minSpeed"))) - ); - int size = entry.getValue().size(); - speedStat.put("avgSpeed", speedStat.getLong("avgSpeed") / size) - .put("medianSpeed", speedStat.getLong("medianSpeed") / size); - return new JsonObject() - .put("time", entry.getKey()) - .put("data", speedStat); - }) - .toList(); - }), + .map(statisticRecords -> convertRangedSpeedStats(statisticRecords, timeRange)), DataVerticle.fileRepository.getCompletedRangeStatistics(this.telegramRecord.id(), startTime, endTime, timeRange) ) .map(r -> new JsonObject() @@ -896,6 +852,51 @@ public class TelegramVerticle extends AbstractVerticle { .put("size", fileObjects.size()) .put("nextFromMessageId", foundChatMessages.nextFromMessageId); }); + } + private List convertRangedSpeedStats(List statisticRecords, int timeRange) { + TreeMap> groupedSpeedStats = new TreeMap<>(Comparator.comparing( + switch (timeRange) { + case 1, 2 -> (Function) time -> + DateUtil.parse(time, DatePattern.NORM_DATETIME_MINUTE_FORMAT); + case 3, 4 -> DateUtil::parseDate; + default -> throw new IllegalStateException("Unexpected value: " + timeRange); + } + )); + for (StatisticRecord record : statisticRecords) { + JsonObject data = new JsonObject(record.data()); + long timestamp = record.timestamp(); + String time = switch (timeRange) { + case 1 -> + MessyUtils.withGrouping5Minutes(DateUtil.toLocalDateTime(DateUtil.date(timestamp))).format(DatePattern.NORM_DATETIME_MINUTE_FORMATTER); + case 2 -> + DateUtil.date(timestamp).setField(DateField.MINUTE, 0).toString(DatePattern.NORM_DATETIME_MINUTE_FORMAT); + case 3, 4 -> + DateUtil.date(timestamp).setField(DateField.MINUTE, 0).toString(DatePattern.NORM_DATE_FORMAT); + default -> throw new IllegalStateException("Unexpected value: " + timeRange); + }; + groupedSpeedStats.computeIfAbsent(time, k -> new ArrayList<>()).add(data); + } + return groupedSpeedStats.entrySet().stream() + .map(entry -> { + JsonObject speedStat = entry.getValue().stream().reduce(new JsonObject() + .put("avgSpeed", 0) + .put("medianSpeed", 0) + .put("maxSpeed", 0) + .put("minSpeed", Long.MAX_VALUE), + (a, b) -> new JsonObject() + .put("avgSpeed", a.getLong("avgSpeed") + b.getLong("avgSpeed")) + .put("medianSpeed", a.getLong("medianSpeed") + b.getLong("medianSpeed")) + .put("maxSpeed", Math.max(a.getLong("maxSpeed"), b.getLong("maxSpeed"))) + .put("minSpeed", Math.min(a.getLong("minSpeed"), b.getLong("minSpeed"))) + ); + int size = entry.getValue().size(); + speedStat.put("avgSpeed", speedStat.getLong("avgSpeed") / size) + .put("medianSpeed", speedStat.getLong("medianSpeed") / size); + return new JsonObject() + .put("time", entry.getKey()) + .put("data", speedStat); + }) + .toList(); } }