🔧 refactor: Refactor the speed statistics logic and extract the convertRangedSpeedStats method to improve readability.
This commit is contained in:
parent
2de0e63c9a
commit
e7b568b752
1 changed files with 46 additions and 45 deletions
|
|
@ -491,51 +491,7 @@ public class TelegramVerticle extends AbstractVerticle {
|
||||||
|
|
||||||
return Future.all(
|
return Future.all(
|
||||||
DataVerticle.statisticRepository.getRangeStatistics(StatisticRecord.Type.speed, this.telegramRecord.id(), startTime, endTime)
|
DataVerticle.statisticRepository.getRangeStatistics(StatisticRecord.Type.speed, this.telegramRecord.id(), startTime, endTime)
|
||||||
.map(statisticRecords -> {
|
.map(statisticRecords -> convertRangedSpeedStats(statisticRecords, timeRange)),
|
||||||
TreeMap<String, List<JsonObject>> groupedSpeedStats = new TreeMap<>(Comparator.comparing(
|
|
||||||
switch (timeRange) {
|
|
||||||
case 1, 2 -> (Function<? super String, ? extends DateTime>) 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();
|
|
||||||
}),
|
|
||||||
DataVerticle.fileRepository.getCompletedRangeStatistics(this.telegramRecord.id(), startTime, endTime, timeRange)
|
DataVerticle.fileRepository.getCompletedRangeStatistics(this.telegramRecord.id(), startTime, endTime, timeRange)
|
||||||
)
|
)
|
||||||
.map(r -> new JsonObject()
|
.map(r -> new JsonObject()
|
||||||
|
|
@ -896,6 +852,51 @@ public class TelegramVerticle extends AbstractVerticle {
|
||||||
.put("size", fileObjects.size())
|
.put("size", fileObjects.size())
|
||||||
.put("nextFromMessageId", foundChatMessages.nextFromMessageId);
|
.put("nextFromMessageId", foundChatMessages.nextFromMessageId);
|
||||||
});
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
private List<JsonObject> convertRangedSpeedStats(List<StatisticRecord> statisticRecords, int timeRange) {
|
||||||
|
TreeMap<String, List<JsonObject>> groupedSpeedStats = new TreeMap<>(Comparator.comparing(
|
||||||
|
switch (timeRange) {
|
||||||
|
case 1, 2 -> (Function<? super String, ? extends DateTime>) 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();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue