From 51e2d6fe912b25b28a3e5e45e12c92a28dc73fda Mon Sep 17 00:00:00 2001 From: Rsl1122 Date: Wed, 3 Oct 2018 20:59:17 +0300 Subject: [PATCH] [Debt] Added thresholds to ActivityIndex methods This required addition of PlanConfig in some places to obtain the values --- .../plan/command/commands/QInspectCommand.java | 11 ++++++++++- .../plan/data/store/containers/AnalysisContainer.java | 2 +- .../plan/data/store/containers/NetworkContainer.java | 2 +- .../plan/data/store/containers/PlayerContainer.java | 5 ++--- .../plan/data/store/mutators/ActivityIndex.java | 4 ++-- .../plan/data/store/mutators/PlayersMutator.java | 8 ++++---- .../store/mutators/health/AbstractHealthInfo.java | 4 +++- .../system/settings/config/BukkitConfigSystem.java | 4 +++- .../system/settings/config/BungeeConfigSystem.java | 4 +++- .../plan/system/settings/config/ConfigSystem.java | 2 +- .../system/settings/config/SpongeConfigSystem.java | 5 +---- .../plan/utilities/html/pages/InspectPage.java | 4 +++- .../plan/utilities/html/tables/HtmlTables.java | 7 +++++-- .../plan/utilities/html/tables/PlayersTable.java | 9 ++++++++- .../plan/utilities/html/tables/PlayersTableTest.java | 2 +- 15 files changed, 48 insertions(+), 25 deletions(-) diff --git a/Plan/src/main/java/com/djrapitops/plan/command/commands/QInspectCommand.java b/Plan/src/main/java/com/djrapitops/plan/command/commands/QInspectCommand.java index 474126375..99b6cdbd8 100644 --- a/Plan/src/main/java/com/djrapitops/plan/command/commands/QInspectCommand.java +++ b/Plan/src/main/java/com/djrapitops/plan/command/commands/QInspectCommand.java @@ -16,6 +16,8 @@ import com.djrapitops.plan.system.locale.lang.DeepHelpLang; import com.djrapitops.plan.system.locale.lang.GenericLang; import com.djrapitops.plan.system.processing.Processing; import com.djrapitops.plan.system.settings.Permissions; +import com.djrapitops.plan.system.settings.Settings; +import com.djrapitops.plan.system.settings.config.PlanConfig; import com.djrapitops.plan.utilities.MiscUtils; import com.djrapitops.plan.utilities.formatting.Formatter; import com.djrapitops.plan.utilities.formatting.Formatters; @@ -44,6 +46,7 @@ public class QInspectCommand extends CommandNode { private final Locale locale; private final Database database; + private final PlanConfig config; private final Processing processing; private final Formatters formatters; private final UUIDUtility uuidUtility; @@ -51,6 +54,7 @@ public class QInspectCommand extends CommandNode { @Inject public QInspectCommand( + PlanConfig config, Locale locale, Processing processing, Database database, @@ -59,6 +63,7 @@ public class QInspectCommand extends CommandNode { ErrorHandler errorHandler ) { super("qinspect", Permissions.QUICK_INSPECT.getPermission(), CommandType.PLAYER_OR_ARGS); + this.config = config; this.processing = processing; this.formatters = formatters; setArguments(""); @@ -115,7 +120,11 @@ public class QInspectCommand extends CommandNode { String playerName = player.getValue(PlayerKeys.NAME).orElse(locale.getString(GenericLang.UNKNOWN)); - ActivityIndex activityIndex = player.getActivityIndex(now); + ActivityIndex activityIndex = player.getActivityIndex( + now, + config.getNumber(Settings.ACTIVE_PLAY_THRESHOLD), + config.getNumber(Settings.ACTIVE_LOGIN_THRESHOLD) + ); Long registered = player.getValue(PlayerKeys.REGISTERED).orElse(0L); Long lastSeen = player.getValue(PlayerKeys.LAST_SEEN).orElse(0L); List geoInfo = player.getValue(PlayerKeys.GEO_INFO).orElse(new ArrayList<>()); 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 9744ea5b9..f578a57b6 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 @@ -358,7 +358,7 @@ public class AnalysisContainer extends DataContainer { getUnsafe(AnalysisKeys.NEW_PLAYERS_PER_DAY) ).toCalendarSeries()); - putSupplier(AnalysisKeys.ACTIVITY_DATA, () -> getUnsafe(AnalysisKeys.PLAYERS_MUTATOR).toActivityDataMap(getUnsafe(AnalysisKeys.ANALYSIS_TIME))); + putSupplier(AnalysisKeys.ACTIVITY_DATA, () -> getUnsafe(AnalysisKeys.PLAYERS_MUTATOR).toActivityDataMap(getUnsafe(AnalysisKeys.ANALYSIS_TIME), config.getNumber(Settings.ACTIVE_PLAY_THRESHOLD), config.getNumber(Settings.ACTIVE_LOGIN_THRESHOLD))); Key activityStackGraph = new Key<>(StackGraph.class, "ACTIVITY_STACK_GRAPH"); putSupplier(activityStackGraph, () -> graphs.stack().activityStackGraph(getUnsafe(AnalysisKeys.ACTIVITY_DATA))); putSupplier(AnalysisKeys.ACTIVITY_STACK_CATEGORIES, () -> getUnsafe(activityStackGraph).toHighChartsLabels()); diff --git a/Plan/src/main/java/com/djrapitops/plan/data/store/containers/NetworkContainer.java b/Plan/src/main/java/com/djrapitops/plan/data/store/containers/NetworkContainer.java index da90acfb3..ee34666a1 100644 --- a/Plan/src/main/java/com/djrapitops/plan/data/store/containers/NetworkContainer.java +++ b/Plan/src/main/java/com/djrapitops/plan/data/store/containers/NetworkContainer.java @@ -117,7 +117,7 @@ public class NetworkContainer extends DataContainer { graphs.line().playersOnlineGraph(TPSMutator.forContainer(bungeeContainer)).toHighChartsSeries() ); Key activityStackGraph = new Key<>(StackGraph.class, "ACTIVITY_STACK_GRAPH"); - putSupplier(NetworkKeys.ACTIVITY_DATA, () -> getUnsafe(NetworkKeys.PLAYERS_MUTATOR).toActivityDataMap(getUnsafe(NetworkKeys.REFRESH_TIME))); + putSupplier(NetworkKeys.ACTIVITY_DATA, () -> getUnsafe(NetworkKeys.PLAYERS_MUTATOR).toActivityDataMap(getUnsafe(NetworkKeys.REFRESH_TIME), config.getNumber(Settings.ACTIVE_PLAY_THRESHOLD), config.getNumber(Settings.ACTIVE_LOGIN_THRESHOLD))); putSupplier(activityStackGraph, () -> graphs.stack().activityStackGraph(getUnsafe(NetworkKeys.ACTIVITY_DATA))); putSupplier(NetworkKeys.ACTIVITY_STACK_CATEGORIES, () -> getUnsafe(activityStackGraph).toHighChartsLabels()); putSupplier(NetworkKeys.ACTIVITY_STACK_SERIES, () -> getUnsafe(activityStackGraph).toHighChartsSeries()); diff --git a/Plan/src/main/java/com/djrapitops/plan/data/store/containers/PlayerContainer.java b/Plan/src/main/java/com/djrapitops/plan/data/store/containers/PlayerContainer.java index 956c1f2a7..7f2882261 100644 --- a/Plan/src/main/java/com/djrapitops/plan/data/store/containers/PlayerContainer.java +++ b/Plan/src/main/java/com/djrapitops/plan/data/store/containers/PlayerContainer.java @@ -22,9 +22,8 @@ public class PlayerContainer extends DataContainer { activityIndexCache = new HashMap<>(); } - public ActivityIndex getActivityIndex(long date) { - // TODO Thresholds from settings - return activityIndexCache.computeIfAbsent(date, time -> new ActivityIndex(this, time, 1, 1)); + public ActivityIndex getActivityIndex(long date, int minuteThreshold, int loginThreshold) { + return activityIndexCache.computeIfAbsent(date, time -> new ActivityIndex(this, time, minuteThreshold, loginThreshold)); } public boolean playedBetween(long after, long before) { diff --git a/Plan/src/main/java/com/djrapitops/plan/data/store/mutators/ActivityIndex.java b/Plan/src/main/java/com/djrapitops/plan/data/store/mutators/ActivityIndex.java index fcadb2518..43891e1bf 100644 --- a/Plan/src/main/java/com/djrapitops/plan/data/store/mutators/ActivityIndex.java +++ b/Plan/src/main/java/com/djrapitops/plan/data/store/mutators/ActivityIndex.java @@ -19,9 +19,9 @@ public class ActivityIndex { public ActivityIndex( DataContainer container, long date, - int playThreshold, int loginThreshold + int minuteThreshold, int loginThreshold ) { - this.playThreshold = playThreshold; + this.playThreshold = minuteThreshold; this.loginThreshold = loginThreshold; value = calculate(container, date); 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 2b30d84b6..7458b7630 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 @@ -70,8 +70,8 @@ public class PlayersMutator { ); } - public PlayersMutator filterActive(long date, double limit) { - return filterBy(player -> player.getActivityIndex(date).getValue() >= limit); + public PlayersMutator filterActive(long date, int minuteThreshold, int loginThreshold, double limit) { + return filterBy(player -> player.getActivityIndex(date, minuteThreshold, loginThreshold).getValue() >= limit); } public PlayersMutator filterPlayedOnServer(UUID serverUUID) { @@ -123,7 +123,7 @@ public class PlayersMutator { return pingPerCountry; } - public TreeMap>> toActivityDataMap(long date) { + public TreeMap>> toActivityDataMap(long date, int minuteThreshold, int loginThreshold) { TreeMap>> activityData = new TreeMap<>(); for (long time = date; time >= date - TimeAmount.MONTH.toMillis(2L); time -= TimeAmount.WEEK.toMillis(1L)) { Map> map = activityData.getOrDefault(time, new HashMap<>()); @@ -132,7 +132,7 @@ public class PlayersMutator { if (player.getValue(PlayerKeys.REGISTERED).orElse(0L) > time) { continue; } - ActivityIndex activityIndex = player.getActivityIndex(time); + ActivityIndex activityIndex = player.getActivityIndex(time, minuteThreshold, loginThreshold); String activityGroup = activityIndex.getGroup(); Set uuids = map.getOrDefault(activityGroup, new HashSet<>()); diff --git a/Plan/src/main/java/com/djrapitops/plan/data/store/mutators/health/AbstractHealthInfo.java b/Plan/src/main/java/com/djrapitops/plan/data/store/mutators/health/AbstractHealthInfo.java index d4b665e15..765533bc3 100644 --- a/Plan/src/main/java/com/djrapitops/plan/data/store/mutators/health/AbstractHealthInfo.java +++ b/Plan/src/main/java/com/djrapitops/plan/data/store/mutators/health/AbstractHealthInfo.java @@ -20,6 +20,8 @@ public abstract class AbstractHealthInfo { protected double serverHealth; // TODO + protected int activeMinuteThreshold; + protected int activeLoginThreshold; protected Formatter timeAmountFormatter; protected Formatter decimalFormatter; protected Formatter percentageFormatter; @@ -102,7 +104,7 @@ public abstract class AbstractHealthInfo { } protected void activePlayerPlaytimeChange(PlayersMutator playersMutator) { - PlayersMutator currentlyActive = playersMutator.filterActive(now, 1.75); + PlayersMutator currentlyActive = playersMutator.filterActive(now, activeMinuteThreshold, activeLoginThreshold, 1.75); long twoWeeksAgo = (now - (now - monthAgo)) / 2L; long totalFourToTwoWeeks = 0; diff --git a/Plan/src/main/java/com/djrapitops/plan/system/settings/config/BukkitConfigSystem.java b/Plan/src/main/java/com/djrapitops/plan/system/settings/config/BukkitConfigSystem.java index 7acb04daf..83d25b747 100644 --- a/Plan/src/main/java/com/djrapitops/plan/system/settings/config/BukkitConfigSystem.java +++ b/Plan/src/main/java/com/djrapitops/plan/system/settings/config/BukkitConfigSystem.java @@ -7,6 +7,7 @@ package com.djrapitops.plan.system.settings.config; import com.djrapitops.plan.api.exceptions.EnableException; import com.djrapitops.plan.system.file.PlanFiles; import com.djrapitops.plan.system.settings.theme.Theme; +import com.djrapitops.plugin.logging.console.PluginLogger; import com.djrapitops.plugin.logging.error.ErrorHandler; import javax.inject.Inject; @@ -28,9 +29,10 @@ public class BukkitConfigSystem extends ConfigSystem { PlanFiles files, PlanConfig config, Theme theme, + PluginLogger logger, ErrorHandler errorHandler ) { - super(files, config, theme, errorHandler); + super(files, config, theme, logger, errorHandler); } @Override diff --git a/Plan/src/main/java/com/djrapitops/plan/system/settings/config/BungeeConfigSystem.java b/Plan/src/main/java/com/djrapitops/plan/system/settings/config/BungeeConfigSystem.java index 001fe9f67..eaec99cf4 100644 --- a/Plan/src/main/java/com/djrapitops/plan/system/settings/config/BungeeConfigSystem.java +++ b/Plan/src/main/java/com/djrapitops/plan/system/settings/config/BungeeConfigSystem.java @@ -7,6 +7,7 @@ package com.djrapitops.plan.system.settings.config; import com.djrapitops.plan.api.exceptions.EnableException; import com.djrapitops.plan.system.file.PlanFiles; import com.djrapitops.plan.system.settings.theme.Theme; +import com.djrapitops.plugin.logging.console.PluginLogger; import com.djrapitops.plugin.logging.error.ErrorHandler; import javax.inject.Inject; @@ -28,9 +29,10 @@ public class BungeeConfigSystem extends ConfigSystem { PlanFiles files, PlanConfig config, Theme theme, + PluginLogger logger, ErrorHandler errorHandler ) { - super(files, config, theme, errorHandler); + super(files, config, theme, logger, errorHandler); } @Override diff --git a/Plan/src/main/java/com/djrapitops/plan/system/settings/config/ConfigSystem.java b/Plan/src/main/java/com/djrapitops/plan/system/settings/config/ConfigSystem.java index ed3188ee4..e52c4a4ec 100644 --- a/Plan/src/main/java/com/djrapitops/plan/system/settings/config/ConfigSystem.java +++ b/Plan/src/main/java/com/djrapitops/plan/system/settings/config/ConfigSystem.java @@ -31,7 +31,7 @@ public abstract class ConfigSystem implements SubSystem { protected final PlanFiles files; protected final PlanConfig config; protected final Theme theme; - private final PluginLogger logger; + protected final PluginLogger logger; protected final ErrorHandler errorHandler; public ConfigSystem( diff --git a/Plan/src/main/java/com/djrapitops/plan/system/settings/config/SpongeConfigSystem.java b/Plan/src/main/java/com/djrapitops/plan/system/settings/config/SpongeConfigSystem.java index 7972bf2da..2b10c5a4c 100644 --- a/Plan/src/main/java/com/djrapitops/plan/system/settings/config/SpongeConfigSystem.java +++ b/Plan/src/main/java/com/djrapitops/plan/system/settings/config/SpongeConfigSystem.java @@ -19,8 +19,6 @@ import java.io.IOException; @Singleton public class SpongeConfigSystem extends BukkitConfigSystem { - private final PluginLogger logger; - private boolean firstInstall; @Inject @@ -31,8 +29,7 @@ public class SpongeConfigSystem extends BukkitConfigSystem { PluginLogger logger, ErrorHandler errorHandler ) { - super(files, config, theme, errorHandler); - this.logger = logger; + super(files, config, theme, logger, errorHandler); } @Override diff --git a/Plan/src/main/java/com/djrapitops/plan/utilities/html/pages/InspectPage.java b/Plan/src/main/java/com/djrapitops/plan/utilities/html/pages/InspectPage.java index 9ddabfbc5..f99861ac0 100644 --- a/Plan/src/main/java/com/djrapitops/plan/utilities/html/pages/InspectPage.java +++ b/Plan/src/main/java/com/djrapitops/plan/utilities/html/pages/InspectPage.java @@ -214,7 +214,9 @@ public class InspectPage implements Page { pvpAndPve(replacer, sessionsMutator, weekSessionsMutator, monthSessionsMutator); - ActivityIndex activityIndex = player.getActivityIndex(now); + ActivityIndex activityIndex = player.getActivityIndex( + now, config.getNumber(Settings.ACTIVE_PLAY_THRESHOLD), config.getNumber(Settings.ACTIVE_LOGIN_THRESHOLD) + ); replacer.put("activityIndexNumber", activityIndex.getFormattedValue(decimalFormatter)); replacer.put("activityIndexColor", activityIndex.getColor()); diff --git a/Plan/src/main/java/com/djrapitops/plan/utilities/html/tables/HtmlTables.java b/Plan/src/main/java/com/djrapitops/plan/utilities/html/tables/HtmlTables.java index 47ca776b6..efbf31485 100644 --- a/Plan/src/main/java/com/djrapitops/plan/utilities/html/tables/HtmlTables.java +++ b/Plan/src/main/java/com/djrapitops/plan/utilities/html/tables/HtmlTables.java @@ -136,7 +136,10 @@ public class HtmlTables { */ public TableContainer playerTableForServerPage(List players) { return new PlayersTable( - players, config.getNumber(Settings.MAX_PLAYERS), + players, + config.getNumber(Settings.MAX_PLAYERS), + config.getNumber(Settings.ACTIVE_PLAY_THRESHOLD), + config.getNumber(Settings.ACTIVE_LOGIN_THRESHOLD), formatters.timeAmount(), formatters.yearLong(), formatters.decimals() ); } @@ -150,7 +153,7 @@ public class HtmlTables { public TableContainer playerTableForPlayersPage(List players) { return new PlayersTable( players, config.getNumber(Settings.MAX_PLAYERS_PLAYERS_PAGE), - formatters.timeAmount(), formatters.yearLong(), formatters.decimals() + config.getNumber(Settings.ACTIVE_PLAY_THRESHOLD), config.getNumber(Settings.ACTIVE_LOGIN_THRESHOLD), formatters.timeAmount(), formatters.yearLong(), formatters.decimals() ); } diff --git a/Plan/src/main/java/com/djrapitops/plan/utilities/html/tables/PlayersTable.java b/Plan/src/main/java/com/djrapitops/plan/utilities/html/tables/PlayersTable.java index ad599b84c..732c5fbd4 100644 --- a/Plan/src/main/java/com/djrapitops/plan/utilities/html/tables/PlayersTable.java +++ b/Plan/src/main/java/com/djrapitops/plan/utilities/html/tables/PlayersTable.java @@ -25,11 +25,16 @@ class PlayersTable extends TableContainer { private final List players; private final int maxPlayers; + private final int activeMinuteThreshold; + private final int activeLoginThreshold; + private final Formatter decimalFormatter; PlayersTable( List players, int maxPlayers, + int activeMinuteThreshold, + int activeLoginThreshold, Formatter timeAmountFormatter, Formatter yearLongFormatter, Formatter decimalFormatter @@ -45,6 +50,8 @@ class PlayersTable extends TableContainer { ); this.players = players; this.maxPlayers = maxPlayers; + this.activeMinuteThreshold = activeMinuteThreshold; + this.activeLoginThreshold = activeLoginThreshold; this.decimalFormatter = decimalFormatter; useJqueryDataTables("player-table"); @@ -74,7 +81,7 @@ class PlayersTable extends TableContainer { long registered = player.getValue(PlayerKeys.REGISTERED).orElse(0L); long lastSeen = sessionsMutator.toLastSeen(); - ActivityIndex activityIndex = player.getActivityIndex(now); + ActivityIndex activityIndex = player.getActivityIndex(now, activeMinuteThreshold, activeLoginThreshold); boolean isBanned = player.getValue(PlayerKeys.BANNED).orElse(false); String activityString = activityIndex.getFormattedValue(decimalFormatter) + (isBanned ? " (Banned)" : " (" + activityIndex.getGroup() + ")"); diff --git a/Plan/src/test/java/com/djrapitops/plan/utilities/html/tables/PlayersTableTest.java b/Plan/src/test/java/com/djrapitops/plan/utilities/html/tables/PlayersTableTest.java index 75cbb732a..69c2faa46 100644 --- a/Plan/src/test/java/com/djrapitops/plan/utilities/html/tables/PlayersTableTest.java +++ b/Plan/src/test/java/com/djrapitops/plan/utilities/html/tables/PlayersTableTest.java @@ -36,7 +36,7 @@ public class PlayersTableTest { PlayerContainer container = new PlayerContainer(); container.putRawData(PlayerKeys.SESSIONS, new ArrayList<>()); List players = Collections.singletonList(container); - String html = new PlayersTable(players, 50, l -> "", l -> "", d -> "").parseHtml(); + String html = new PlayersTable(players, 50, 60, 5, l -> "", l -> "", d -> "").parseHtml(); testHtmlValidity(html); }