diff --git a/Plan/src/main/java/com/djrapitops/plan/system/database/databases/sql/SQLDB.java b/Plan/src/main/java/com/djrapitops/plan/system/database/databases/sql/SQLDB.java index 328514f29..dd28c3101 100644 --- a/Plan/src/main/java/com/djrapitops/plan/system/database/databases/sql/SQLDB.java +++ b/Plan/src/main/java/com/djrapitops/plan/system/database/databases/sql/SQLDB.java @@ -1,11 +1,13 @@ package com.djrapitops.plan.system.database.databases.sql; +import com.djrapitops.plan.api.exceptions.database.DBException; import com.djrapitops.plan.api.exceptions.database.DBInitException; import com.djrapitops.plan.system.database.databases.Database; import com.djrapitops.plan.system.database.databases.operation.*; import com.djrapitops.plan.system.database.databases.sql.operation.*; import com.djrapitops.plan.system.database.databases.sql.tables.*; import com.djrapitops.plan.system.database.databases.sql.tables.move.Version8TransferTable; +import com.djrapitops.plan.system.settings.Settings; import com.djrapitops.plugin.api.TimeAmount; import com.djrapitops.plugin.api.utility.log.Log; import com.djrapitops.plugin.task.AbsRunnable; @@ -15,6 +17,10 @@ import org.apache.commons.dbcp2.BasicDataSource; import java.sql.Connection; import java.sql.SQLException; +import java.util.List; +import java.util.Map; +import java.util.UUID; +import java.util.stream.Collectors; /** * Class containing main logic for different data related save and load functionality. @@ -250,6 +256,22 @@ public abstract class SQLDB extends Database { private void clean() throws SQLException { tpsTable.clean(); transferTable.clean(); + + long now = System.currentTimeMillis(); + long keepActiveAfter = now - TimeAmount.DAY.ms() * Settings.KEEP_INACTIVE_PLAYERS_DAYS.getNumber(); + + List inactivePlayers = sessionsTable.getLastSeenForAllPlayers().entrySet().stream() + .filter(entry -> entry.getValue() > keepActiveAfter) + .map(Map.Entry::getKey) + .collect(Collectors.toList()); + for (UUID uuid : inactivePlayers) { + try { + removeOps.player(uuid); + } catch (DBException e) { + Log.toLog(this.getClass().getName(), e); + } + } + Log.info("Removed data of " + inactivePlayers.size() + " players."); } public abstract Connection getConnection() throws SQLException; 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 3dee98387..6ea6583bd 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 @@ -51,6 +51,7 @@ public enum Settings { MAX_PLAYERS_PLAYERS_PAGE("Customization.Display.MaxPlayersPlayersPage"), AFK_THRESHOLD_MINUTES("Data.AFKThresholdMinutes"), KEEP_LOGS_DAYS("Plugin.KeepLogsForXDays"), + KEEP_INACTIVE_PLAYERS_DAYS("Data.KeepInactivePlayerDataForDays"), // String DEBUG("Plugin.Debug"), diff --git a/Plan/src/main/java/com/djrapitops/plan/system/settings/network/NetworkSettings.java b/Plan/src/main/java/com/djrapitops/plan/system/settings/network/NetworkSettings.java index 2424cd46c..780613bf7 100644 --- a/Plan/src/main/java/com/djrapitops/plan/system/settings/network/NetworkSettings.java +++ b/Plan/src/main/java/com/djrapitops/plan/system/settings/network/NetworkSettings.java @@ -173,7 +173,8 @@ public class NetworkSettings { DISPLAY_GAPS_IN_GRAPH_DATA, AFK_THRESHOLD_MINUTES, DATA_GEOLOCATIONS, - KEEP_LOGS_DAYS + KEEP_LOGS_DAYS, + KEEP_INACTIVE_PLAYERS_DAYS }; Log.debug("NetworkSettings: Adding Config Values.."); for (Settings setting : sameStrings) { diff --git a/Plan/src/main/resources/bungeeconfig.yml b/Plan/src/main/resources/bungeeconfig.yml index 367263b59..0e4be559d 100644 --- a/Plan/src/main/resources/bungeeconfig.yml +++ b/Plan/src/main/resources/bungeeconfig.yml @@ -67,6 +67,7 @@ Data: LogUnknownCommands: false CombineCommandAliases: true Geolocations: true + KeepInactivePlayerDataForDays: 180 # ----------------------------------------------------- Customization: UseServerTime: true diff --git a/Plan/src/main/resources/config.yml b/Plan/src/main/resources/config.yml index 7fe8992c1..be15fa519 100644 --- a/Plan/src/main/resources/config.yml +++ b/Plan/src/main/resources/config.yml @@ -81,6 +81,7 @@ Data: LogUnknownCommands: false CombineCommandAliases: true Geolocations: true + KeepInactivePlayerDataForDays: 180 # ----------------------------------------------------- Customization: UseServerTime: true