From ef16f8ece18826b712a9d603a71fb4b41940e393 Mon Sep 17 00:00:00 2001 From: Rsl1122 Date: Mon, 8 Oct 2018 17:40:46 +0300 Subject: [PATCH] [Debt] ActivityIndex thresholds in RetentionData --- .../data/store/containers/AnalysisContainer.java | 4 +++- .../plan/data/store/mutators/PlayersMutator.java | 16 ++++++++++------ .../plan/data/store/mutators/RetentionData.java | 15 ++++++++++++--- 3 files changed, 25 insertions(+), 10 deletions(-) diff --git a/Plan/src/main/java/com/djrapitops/plan/data/store/containers/AnalysisContainer.java b/Plan/src/main/java/com/djrapitops/plan/data/store/containers/AnalysisContainer.java index f578a57b6..794f866c8 100644 --- a/Plan/src/main/java/com/djrapitops/plan/data/store/containers/AnalysisContainer.java +++ b/Plan/src/main/java/com/djrapitops/plan/data/store/containers/AnalysisContainer.java @@ -214,7 +214,9 @@ public class AnalysisContainer extends DataContainer { // compareAndFindThoseLikelyToBeRetained can throw exception. putSupplier(retentionDay, () -> getUnsafe(AnalysisKeys.PLAYERS_MUTATOR).compareAndFindThoseLikelyToBeRetained( getUnsafe(newDay).all(), getUnsafe(AnalysisKeys.ANALYSIS_TIME_MONTH_AGO), - getUnsafe(AnalysisKeys.PLAYERS_ONLINE_RESOLVER) + getUnsafe(AnalysisKeys.PLAYERS_ONLINE_RESOLVER), + config.getNumber(Settings.ACTIVE_PLAY_THRESHOLD), + config.getNumber(Settings.ACTIVE_LOGIN_THRESHOLD) ).count() ); putSupplier(AnalysisKeys.PLAYERS_RETAINED_DAY, () -> { diff --git a/Plan/src/main/java/com/djrapitops/plan/data/store/mutators/PlayersMutator.java b/Plan/src/main/java/com/djrapitops/plan/data/store/mutators/PlayersMutator.java index 7458b7630..cebbe56bd 100644 --- a/Plan/src/main/java/com/djrapitops/plan/data/store/mutators/PlayersMutator.java +++ b/Plan/src/main/java/com/djrapitops/plan/data/store/mutators/PlayersMutator.java @@ -175,9 +175,13 @@ public class PlayersMutator { * @return Mutator containing the players that are considered to be retained. * @throws IllegalStateException If all players are rejected due to dateLimit. */ - public PlayersMutator compareAndFindThoseLikelyToBeRetained(Iterable compareTo, - long dateLimit, - PlayersOnlineResolver onlineResolver) { + public PlayersMutator compareAndFindThoseLikelyToBeRetained( + Iterable compareTo, + long dateLimit, + PlayersOnlineResolver onlineResolver, + int activityMinuteThreshold, + int activityLoginThreshold + ) { Collection retainedAfterMonth = new ArrayList<>(); Collection notRetainedAfterMonth = new ArrayList<>(); @@ -203,10 +207,10 @@ public class PlayersMutator { } List retained = retainedAfterMonth.stream() - .map(player -> new RetentionData(player, onlineResolver)) + .map(player -> new RetentionData(player, onlineResolver, activityMinuteThreshold, activityLoginThreshold)) .collect(Collectors.toList()); List notRetained = notRetainedAfterMonth.stream() - .map(player -> new RetentionData(player, onlineResolver)) + .map(player -> new RetentionData(player, onlineResolver, activityMinuteThreshold, activityLoginThreshold)) .collect(Collectors.toList()); RetentionData avgRetained = RetentionData.average(retained); @@ -214,7 +218,7 @@ public class PlayersMutator { List toBeRetained = new ArrayList<>(); for (PlayerContainer player : compareTo) { - RetentionData retentionData = new RetentionData(player, onlineResolver); + RetentionData retentionData = new RetentionData(player, onlineResolver, activityMinuteThreshold, activityLoginThreshold); if (retentionData.distance(avgRetained) < retentionData.distance(avgNotRetained)) { toBeRetained.add(player); } diff --git a/Plan/src/main/java/com/djrapitops/plan/data/store/mutators/RetentionData.java b/Plan/src/main/java/com/djrapitops/plan/data/store/mutators/RetentionData.java index 718016d78..148b43f04 100644 --- a/Plan/src/main/java/com/djrapitops/plan/data/store/mutators/RetentionData.java +++ b/Plan/src/main/java/com/djrapitops/plan/data/store/mutators/RetentionData.java @@ -45,11 +45,20 @@ public class RetentionData { this.onlineOnJoin = onlineOnJoin; } - public RetentionData(PlayerContainer player, PlayersOnlineResolver onlineOnJoin) { + public RetentionData( + PlayerContainer player, + PlayersOnlineResolver onlineOnJoin, + int activityMinuteThreshold, + int activityLoginThreshold + ) { Optional registeredValue = player.getValue(PlayerKeys.REGISTERED); activityIndex = registeredValue - // TODO Thresholds from settings - .map(registered -> new ActivityIndex(player, registered + TimeUnit.DAYS.toMillis(1L), 1, 1).getValue()) + .map(registered -> new ActivityIndex( + player, + registered + TimeUnit.DAYS.toMillis(1L), + activityMinuteThreshold, + activityLoginThreshold + ).getValue()) .orElse(0.0); this.onlineOnJoin = registeredValue .map(registered -> onlineOnJoin.getOnlineOn(registered).orElse(-1))