From 2b1cf4b3cbb0201a3d628bb9fd633d6e76c1c9a2 Mon Sep 17 00:00:00 2001 From: Rsl1122 Date: Tue, 18 Sep 2018 16:01:06 +0300 Subject: [PATCH] [Debt] Removed Settings getNumber method Some threshold values are needed in mutators and tasks, but they are not yet available in the classes they are used. TODO was added. ActivityIndexTest was removed as it does not test proper stuff. Affected issues: none --- .../store/containers/AnalysisContainer.java | 8 +- .../store/containers/PlayerContainer.java | 3 +- .../data/store/mutators/ActivityIndex.java | 25 ++-- .../data/store/mutators/RetentionData.java | 3 +- .../plan/data/store/mutators/TPSMutator.java | 11 +- .../mutators/health/HealthInformation.java | 7 +- .../plan/system/file/FileSystem.java | 4 +- .../plan/system/settings/Settings.java | 21 --- .../system/tasks/LogsFolderCleanTask.java | 12 +- .../data/calculation/ActivityIndexTest.java | 125 ------------------ 10 files changed, 39 insertions(+), 180 deletions(-) delete mode 100644 Plan/src/test/java/com/djrapitops/plan/data/calculation/ActivityIndexTest.java 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 e8ef95dcb..0fe59337c 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 @@ -398,19 +398,21 @@ public class AnalysisContainer extends DataContainer { putSupplier(AnalysisKeys.PLAYERS_ONLINE_RESOLVER, () -> new PlayersOnlineResolver(getUnsafe(AnalysisKeys.TPS_MUTATOR))); - putSupplier(AnalysisKeys.TPS_SPIKE_MONTH, () -> getUnsafe(tpsMonth).lowTpsSpikeCount()); + int threshold = 5; //TODO LOW TPS Threshold from Settings; + + putSupplier(AnalysisKeys.TPS_SPIKE_MONTH, () -> getUnsafe(tpsMonth).lowTpsSpikeCount(threshold)); putSupplier(AnalysisKeys.AVG_TPS_MONTH, () -> getUnsafe(tpsMonth).averageTPS()); putSupplier(AnalysisKeys.AVG_CPU_MONTH, () -> getUnsafe(tpsMonth).averageCPU()); putSupplier(AnalysisKeys.AVG_RAM_MONTH, () -> getUnsafe(tpsMonth).averageRAM()); putSupplier(AnalysisKeys.AVG_ENTITY_MONTH, () -> getUnsafe(tpsMonth).averageEntities()); putSupplier(AnalysisKeys.AVG_CHUNK_MONTH, () -> getUnsafe(tpsMonth).averageChunks()); - putSupplier(AnalysisKeys.TPS_SPIKE_WEEK, () -> getUnsafe(tpsWeek).lowTpsSpikeCount()); + putSupplier(AnalysisKeys.TPS_SPIKE_WEEK, () -> getUnsafe(tpsWeek).lowTpsSpikeCount(threshold)); putSupplier(AnalysisKeys.AVG_TPS_WEEK, () -> getUnsafe(tpsWeek).averageTPS()); putSupplier(AnalysisKeys.AVG_CPU_WEEK, () -> getUnsafe(tpsWeek).averageCPU()); putSupplier(AnalysisKeys.AVG_RAM_WEEK, () -> getUnsafe(tpsWeek).averageRAM()); putSupplier(AnalysisKeys.AVG_ENTITY_WEEK, () -> getUnsafe(tpsWeek).averageEntities()); putSupplier(AnalysisKeys.AVG_CHUNK_WEEK, () -> getUnsafe(tpsWeek).averageChunks()); - putSupplier(AnalysisKeys.TPS_SPIKE_DAY, () -> getUnsafe(tpsDay).lowTpsSpikeCount()); + putSupplier(AnalysisKeys.TPS_SPIKE_DAY, () -> getUnsafe(tpsDay).lowTpsSpikeCount(threshold)); putSupplier(AnalysisKeys.AVG_TPS_DAY, () -> getUnsafe(tpsDay).averageTPS()); putSupplier(AnalysisKeys.AVG_CPU_DAY, () -> getUnsafe(tpsDay).averageCPU()); putSupplier(AnalysisKeys.AVG_RAM_DAY, () -> getUnsafe(tpsDay).averageRAM()); 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 a23752fe8..956c1f2a7 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 @@ -23,7 +23,8 @@ public class PlayerContainer extends DataContainer { } public ActivityIndex getActivityIndex(long date) { - return activityIndexCache.computeIfAbsent(date, time -> new ActivityIndex(this, time)); + // TODO Thresholds from settings + return activityIndexCache.computeIfAbsent(date, time -> new ActivityIndex(this, time, 1, 1)); } 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 bb4a11d4e..231451f39 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 @@ -3,18 +3,27 @@ package com.djrapitops.plan.data.store.mutators; import com.djrapitops.plan.data.container.Session; import com.djrapitops.plan.data.store.containers.DataContainer; import com.djrapitops.plan.data.store.keys.PlayerKeys; -import com.djrapitops.plan.system.settings.Settings; import com.djrapitops.plan.utilities.formatting.Formatter; import com.djrapitops.plugin.api.TimeAmount; import java.util.List; import java.util.Optional; +import java.util.concurrent.TimeUnit; public class ActivityIndex { private final double value; - public ActivityIndex(DataContainer container, long date) { + private final int playThreshold; + private final int loginThreshold; + + public ActivityIndex( + DataContainer container, long date, + int playThreshold, int loginThreshold + ) { + this.playThreshold = playThreshold; + this.loginThreshold = loginThreshold; + value = calculate(container, date); } @@ -22,22 +31,14 @@ public class ActivityIndex { return new String[]{"Very Active", "Active", "Regular", "Irregular", "Inactive"}; } - private long loadSetting(long value) { - return value <= 0 ? 1 : value; - } - - private int loadSetting(int value) { - return value <= 0 ? 1 : value; - } - private double calculate(DataContainer container, long date) { long week = TimeAmount.WEEK.ms(); long weekAgo = date - week; long twoWeeksAgo = date - 2L * week; long threeWeeksAgo = date - 3L * week; - long activePlayThreshold = loadSetting(Settings.ACTIVE_PLAY_THRESHOLD.getNumber() * TimeAmount.MINUTE.ms()); - int activeLoginThreshold = loadSetting(Settings.ACTIVE_LOGIN_THRESHOLD.getNumber()); + long activePlayThreshold = TimeUnit.MINUTES.toMillis(playThreshold); + int activeLoginThreshold = loginThreshold; Optional> sessionsValue = container.getValue(PlayerKeys.SESSIONS); if (!sessionsValue.isPresent()) { 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 222df4371..f53268668 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 @@ -48,7 +48,8 @@ public class RetentionData { public RetentionData(PlayerContainer player, PlayersOnlineResolver onlineOnJoin) { Optional registeredValue = player.getValue(PlayerKeys.REGISTERED); activityIndex = registeredValue - .map(registered -> new ActivityIndex(player, registered + TimeAmount.DAY.ms()).getValue()) + // TODO Thresholds from settings + .map(registered -> new ActivityIndex(player, registered + TimeAmount.DAY.ms(), 1, 1).getValue()) .orElse(0.0); this.onlineOnJoin = registeredValue .map(registered -> onlineOnJoin.getOnlineOn(registered).orElse(-1)) diff --git a/Plan/src/main/java/com/djrapitops/plan/data/store/mutators/TPSMutator.java b/Plan/src/main/java/com/djrapitops/plan/data/store/mutators/TPSMutator.java index 8af6fa550..7b0549935 100644 --- a/Plan/src/main/java/com/djrapitops/plan/data/store/mutators/TPSMutator.java +++ b/Plan/src/main/java/com/djrapitops/plan/data/store/mutators/TPSMutator.java @@ -3,7 +3,6 @@ package com.djrapitops.plan.data.store.mutators; import com.djrapitops.plan.data.container.TPS; import com.djrapitops.plan.data.store.containers.DataContainer; import com.djrapitops.plan.data.store.keys.ServerKeys; -import com.djrapitops.plan.system.settings.Settings; import com.djrapitops.plan.utilities.comparators.TPSComparator; import com.djrapitops.plan.utilities.html.graphs.line.Point; import com.djrapitops.plugin.api.TimeAmount; @@ -134,13 +133,11 @@ public class TPSMutator { return idleTime; } - public double percentageTPSAboveLowThreshold() { + public double percentageTPSAboveThreshold(int threshold) { if (tpsData.isEmpty()) { return 1; } - int threshold = Settings.THEME_GRAPH_TPS_THRESHOLD_MED.getNumber(); - long count = 0; for (TPS tps : tpsData) { if (tps.getTicksPerSecond() >= threshold) { @@ -151,15 +148,13 @@ public class TPSMutator { return count * 1.0 / tpsData.size(); } - public int lowTpsSpikeCount() { - int mediumThreshold = Settings.THEME_GRAPH_TPS_THRESHOLD_MED.getNumber(); - + public int lowTpsSpikeCount(int threshold) { boolean wasLow = false; int spikeCount = 0; for (TPS tpsObj : tpsData) { double tps = tpsObj.getTicksPerSecond(); - if (tps < mediumThreshold) { + if (tps < threshold) { if (!wasLow) { spikeCount++; wasLow = true; diff --git a/Plan/src/main/java/com/djrapitops/plan/data/store/mutators/health/HealthInformation.java b/Plan/src/main/java/com/djrapitops/plan/data/store/mutators/health/HealthInformation.java index 943ae05c5..006703f0a 100644 --- a/Plan/src/main/java/com/djrapitops/plan/data/store/mutators/health/HealthInformation.java +++ b/Plan/src/main/java/com/djrapitops/plan/data/store/mutators/health/HealthInformation.java @@ -10,7 +10,6 @@ import com.djrapitops.plan.data.store.keys.AnalysisKeys; import com.djrapitops.plan.data.store.mutators.PlayersMutator; import com.djrapitops.plan.data.store.mutators.PlayersOnlineResolver; import com.djrapitops.plan.data.store.mutators.TPSMutator; -import com.djrapitops.plan.system.settings.Settings; import com.djrapitops.plan.utilities.html.icon.Icons; import com.djrapitops.plugin.api.TimeAmount; @@ -91,7 +90,10 @@ public class HealthInformation extends AbstractHealthInfo { Key tpsMonth = new Key<>(TPSMutator.class, "TPS_MONTH"); TPSMutator tpsMutator = analysisContainer.getUnsafe(tpsMonth); long serverDownTime = tpsMutator.serverDownTime(); - double aboveThreshold = tpsMutator.percentageTPSAboveLowThreshold(); + + int threshold = 5; // TODO TPS THRESHOLD from settings + + double aboveThreshold = tpsMutator.percentageTPSAboveThreshold(threshold); long tpsSpikeMonth = analysisContainer.getValue(AnalysisKeys.TPS_SPIKE_MONTH).orElse(0); String avgLowThresholdString = "
     "; @@ -107,7 +109,6 @@ public class HealthInformation extends AbstractHealthInfo { avgLowThresholdString += " Average TPS was above Low Threshold " + decimalFormatter.apply(aboveThreshold * 100.0) + "% of the time"; - int threshold = Settings.THEME_GRAPH_TPS_THRESHOLD_MED.getNumber(); if (tpsSpikeMonth <= 5) { addNote(Icons.GREEN_THUMB + " Average TPS dropped below Low Threshold (" + threshold + ")" + " " + tpsSpikeMonth + " times" + diff --git a/Plan/src/main/java/com/djrapitops/plan/system/file/FileSystem.java b/Plan/src/main/java/com/djrapitops/plan/system/file/FileSystem.java index e93131a7d..1a7b70bb0 100644 --- a/Plan/src/main/java/com/djrapitops/plan/system/file/FileSystem.java +++ b/Plan/src/main/java/com/djrapitops/plan/system/file/FileSystem.java @@ -73,8 +73,10 @@ public class FileSystem implements SubSystem { Verify.isTrue((configFile.exists() && configFile.isFile()) || configFile.createNewFile(), () -> new EnableException("Could not create config file at " + configFile.getAbsolutePath())); + // TODO Log Keep Day threshold from Settings + // TODO Move This task creation outside of FileSystem class plugin.getRunnableFactory().create("Logs folder Clean Task", - new LogsFolderCleanTask(getLogsFolder(), plugin.getPluginLogger()) + new LogsFolderCleanTask(getLogsFolder(), 5, plugin.getPluginLogger()) ).runTaskLaterAsynchronously(TimeAmount.toTicks(30L, TimeUnit.SECONDS)); } catch (IOException e) { throw new EnableException("Failed to create config.yml", e); diff --git a/Plan/src/main/java/com/djrapitops/plan/system/settings/Settings.java b/Plan/src/main/java/com/djrapitops/plan/system/settings/Settings.java index 5b2099e53..5ea37971a 100644 --- a/Plan/src/main/java/com/djrapitops/plan/system/settings/Settings.java +++ b/Plan/src/main/java/com/djrapitops/plan/system/settings/Settings.java @@ -1,9 +1,6 @@ package com.djrapitops.plan.system.settings; -import com.djrapitops.plan.system.settings.config.ConfigSystem; import com.djrapitops.plan.system.settings.config.Setting; -import com.djrapitops.plugin.config.Config; -import com.djrapitops.plugin.utilities.Verify; /** * This enum contains all of the config settings used by the plugin for easier @@ -110,19 +107,6 @@ public enum Settings implements Setting { this.configPath = path; } - /** - * If the settings is a number, this method should be used. - * - * @return Integer value of the config setting - */ - @Deprecated - public int getNumber() { - if (tempValue != null) { - return (Integer) tempValue; - } - return getConfig().getInt(configPath); - } - /** * Used to get the String path of a the config setting eg. * Settings.WebServer.Enabled @@ -138,9 +122,4 @@ public enum Settings implements Setting { this.tempValue = value; } - private Config getConfig() { - Config config = ConfigSystem.getConfig_Old(); - Verify.nullCheck(config, () -> new IllegalStateException("Settings are not supposed to be called before ConfigSystem is Enabled!")); - return config; - } } diff --git a/Plan/src/main/java/com/djrapitops/plan/system/tasks/LogsFolderCleanTask.java b/Plan/src/main/java/com/djrapitops/plan/system/tasks/LogsFolderCleanTask.java index 11a6d9139..4b0fb9907 100644 --- a/Plan/src/main/java/com/djrapitops/plan/system/tasks/LogsFolderCleanTask.java +++ b/Plan/src/main/java/com/djrapitops/plan/system/tasks/LogsFolderCleanTask.java @@ -1,7 +1,5 @@ package com.djrapitops.plan.system.tasks; -import com.djrapitops.plan.system.settings.Settings; -import com.djrapitops.plugin.api.TimeAmount; import com.djrapitops.plugin.logging.console.PluginLogger; import com.djrapitops.plugin.task.AbsRunnable; @@ -9,6 +7,7 @@ import java.io.File; import java.io.IOException; import java.nio.file.Files; import java.util.Objects; +import java.util.concurrent.TimeUnit; /** * Task in charge of removing old log files @@ -17,11 +16,14 @@ import java.util.Objects; */ public class LogsFolderCleanTask extends AbsRunnable { + private final int keepLogDayThreshold; + private final File folder; private final PluginLogger logger; - public LogsFolderCleanTask(File folder, PluginLogger logger) { + public LogsFolderCleanTask(File folder, int keepLogDayThreshold, PluginLogger logger) { this.folder = folder; + this.keepLogDayThreshold = keepLogDayThreshold; this.logger = logger; } @@ -42,8 +44,8 @@ public class LogsFolderCleanTask extends AbsRunnable { private void cleanFolder() { long now = System.currentTimeMillis(); for (File file : Objects.requireNonNull(folder.listFiles())) { - long forDaysMs = Settings.KEEP_LOGS_DAYS.getNumber() * TimeAmount.DAY.ms(); - if (now - file.lastModified() > (forDaysMs > 0 ? forDaysMs : TimeAmount.DAY.ms())) { + long forDaysMs = TimeUnit.DAYS.toMillis(keepLogDayThreshold); + if (now - file.lastModified() > (forDaysMs > 0 ? forDaysMs : TimeUnit.DAYS.toMillis(1L))) { try { Files.delete(file.toPath()); } catch (IOException e) { diff --git a/Plan/src/test/java/com/djrapitops/plan/data/calculation/ActivityIndexTest.java b/Plan/src/test/java/com/djrapitops/plan/data/calculation/ActivityIndexTest.java deleted file mode 100644 index 59fa7f226..000000000 --- a/Plan/src/test/java/com/djrapitops/plan/data/calculation/ActivityIndexTest.java +++ /dev/null @@ -1,125 +0,0 @@ -package com.djrapitops.plan.data.calculation; - -import com.djrapitops.plan.data.container.Session; -import com.djrapitops.plan.data.store.containers.PlayerContainer; -import com.djrapitops.plan.data.store.keys.PlayerKeys; -import com.djrapitops.plan.data.store.mutators.ActivityIndex; -import com.djrapitops.plan.system.settings.Settings; -import com.djrapitops.plugin.api.TimeAmount; -import org.junit.BeforeClass; -import org.junit.ClassRule; -import org.junit.Test; -import org.junit.rules.TemporaryFolder; -import utilities.TestConstants; -import utilities.mocks.SystemMockUtil; - -import java.util.ArrayList; -import java.util.List; -import java.util.UUID; - -import static junit.framework.TestCase.assertEquals; -import static org.junit.Assert.assertTrue; - -/** - * Test for ActivityIndex. - * - * @author Rsl1122 - */ -public class ActivityIndexTest { - @ClassRule - public static TemporaryFolder temporaryFolder = new TemporaryFolder(); - private static final UUID UUID = TestConstants.PLAYER_ONE_UUID; - private static final UUID SERVER_UUID = TestConstants.SERVER_UUID; - - @BeforeClass - public static void setUpClass() throws Exception { - SystemMockUtil.setUp(temporaryFolder.getRoot()).enableConfigSystem(); - } - - @Test - public void testMaxActivityIndex() { - PlayerContainer container = new PlayerContainer(); - List sessions = new ArrayList<>(); - - long date = System.currentTimeMillis(); - long week = TimeAmount.WEEK.ms(); - long weekAgo = date - week; - long twoWeeksAgo = date - 2L * week; - long threeWeeksAgo = date - 3L * week; - - long requiredPlaytime = Settings.ACTIVE_PLAY_THRESHOLD.getNumber() * TimeAmount.MINUTE.ms(); - int requiredLogins = Settings.ACTIVE_LOGIN_THRESHOLD.getNumber(); - - for (int i = 0; i < requiredLogins; i++) { - sessions.add(new Session(0, UUID, SERVER_UUID, weekAgo, weekAgo + requiredPlaytime * 4L, 0, 0, 0)); - sessions.add(new Session(0, UUID, SERVER_UUID, twoWeeksAgo, twoWeeksAgo + requiredPlaytime * 4L, 0, 0, 0)); - sessions.add(new Session(0, UUID, SERVER_UUID, threeWeeksAgo, threeWeeksAgo + requiredPlaytime * 4L, 0, 0, 0)); - } - container.putRawData(PlayerKeys.SESSIONS, sessions); - - assertEquals(5.0, new ActivityIndex(container, date).getValue()); - } - - @Test - public void testMaxActivityIndex2() { - PlayerContainer container = new PlayerContainer(); - List sessions = new ArrayList<>(); - - long date = System.currentTimeMillis(); - long week = TimeAmount.WEEK.ms(); - long weekAgo = date - week; - long twoWeeksAgo = date - 2L * week; - long threeWeeksAgo = date - 3L * week; - - long requiredPlaytime = Settings.ACTIVE_PLAY_THRESHOLD.getNumber() * TimeAmount.MINUTE.ms(); - int requiredLogins = Settings.ACTIVE_LOGIN_THRESHOLD.getNumber(); - - for (int i = 0; i < requiredLogins * 2; i++) { - sessions.add(new Session(0, UUID, SERVER_UUID, weekAgo, weekAgo + requiredPlaytime * 3L, 0, 0, 0)); - sessions.add(new Session(0, UUID, SERVER_UUID, twoWeeksAgo, twoWeeksAgo + requiredPlaytime * 3L, 0, 0, 0)); - sessions.add(new Session(0, UUID, SERVER_UUID, threeWeeksAgo, threeWeeksAgo + requiredPlaytime * 3L, 0, 0, 0)); - } - container.putRawData(PlayerKeys.SESSIONS, sessions); - assertTrue(container.supports(PlayerKeys.SESSIONS)); - assertTrue(container.getValue(PlayerKeys.SESSIONS).isPresent()); - - assertEquals(5.0, new ActivityIndex(container, date).getValue()); - } - - @Test - public void testActivityIndexOne() { - PlayerContainer container = new PlayerContainer(); - List sessions = new ArrayList<>(); - - long date = System.currentTimeMillis(); - long week = TimeAmount.WEEK.ms(); - long weekAgo = date - week; - long twoWeeksAgo = date - 2L * week; - long threeWeeksAgo = date - 3L * week; - - int requiredLogins = Settings.ACTIVE_LOGIN_THRESHOLD.getNumber(); - long requiredPlaytime = Settings.ACTIVE_PLAY_THRESHOLD.getNumber() * TimeAmount.MINUTE.ms() / requiredLogins; - - for (int i = 0; i < requiredLogins; i++) { - sessions.add(new Session(i, UUID, SERVER_UUID, weekAgo, weekAgo + requiredPlaytime, 0, 0, 0)); - sessions.add(new Session(i * 2, UUID, SERVER_UUID, twoWeeksAgo, twoWeeksAgo + requiredPlaytime, 0, 0, 0)); - sessions.add(new Session(i * 3, UUID, SERVER_UUID, threeWeeksAgo, threeWeeksAgo + requiredPlaytime, 0, 0, 0)); - } - container.putRawData(PlayerKeys.SESSIONS, sessions); - - assertTrue(2.0 <= new ActivityIndex(container, date).getValue()); - } - - @Test(timeout = 500) - public void testTimeout() { - PlayerContainer container = new PlayerContainer(); - List sessions = new ArrayList<>(); - - for (int i = 0; i < 5000; i++) { - sessions.add(new Session(0, UUID, SERVER_UUID, 0, 0, 0, 0, 0)); - } - container.putRawData(PlayerKeys.SESSIONS, sessions); - - new ActivityIndex(container, 0).getValue(); - } -} \ No newline at end of file