From ccb2498d38dac1878fd21e2dce58926b58775df7 Mon Sep 17 00:00:00 2001 From: Rsl1122 Date: Mon, 1 May 2017 12:35:23 +0300 Subject: [PATCH] Bugfixes, identified possible database bug (Refactor caused) Fix #78 #73 #79 - database might not be giving correct results for user id. --- .../java/com/djrapitops/plan/Settings.java | 2 ++ .../com/djrapitops/plan/data/UserData.java | 10 ++++------ .../plan/data/cache/DataCacheHandler.java | 18 +++++++++++++----- .../plan/data/cache/SessionCache.java | 4 ++-- .../data/cache/queue/DataCacheClearQueue.java | 4 +--- .../plan/database/tables/SessionsTable.java | 2 +- .../ui/graphs/PlayerActivityGraphCreator.java | 8 +++++++- .../plan/ui/webserver/WebSocketServer.java | 2 +- .../djrapitops/plan/utilities/Analysis.java | 18 +++++++----------- Plan/src/main/resources/config.yml | 2 ++ 10 files changed, 40 insertions(+), 30 deletions(-) diff --git a/Plan/src/main/java/com/djrapitops/plan/Settings.java b/Plan/src/main/java/com/djrapitops/plan/Settings.java index e0924375d..0e0cc7c39 100644 --- a/Plan/src/main/java/com/djrapitops/plan/Settings.java +++ b/Plan/src/main/java/com/djrapitops/plan/Settings.java @@ -14,6 +14,7 @@ public enum Settings { WEBSERVER_ENABLED("Settings.WebServer.Enabled"), ANALYSIS_REFRESH_ON_ENABLE("Settings.Cache.AnalysisCache.RefreshAnalysisCacheOnEnable"), ANALYSIS_LOG_TO_CONSOLE("Settings.Analysis.LogProgressOnConsole"), + ANALYSIS_LOG_FINISHED("Settings.Analysis.NotifyWhenFinished"), SHOW_ALTERNATIVE_IP("Settings.WebServer.ShowAlternativeServerIP"), USE_ALTERNATIVE_UI("Settings.UseTextUI"), GATHERLOCATIONS("Settings.Data.GatherLocations"), @@ -36,6 +37,7 @@ public enum Settings { DEM_MALE("Customization.DemographicsTriggers.Male"), DEM_IGNORE("Customization.DemographicsTriggers.IgnoreWhen"), LOCALE("Settings.Locale"), + WEBSERVER_IP("Settings.WebServer.InternalIP"), SECURITY_CODE("Settings.WebServer.Security.AddressSecurityCode"), // COLOR_MAIN("Customization.Colors.Commands.Main"), diff --git a/Plan/src/main/java/com/djrapitops/plan/data/UserData.java b/Plan/src/main/java/com/djrapitops/plan/data/UserData.java index b977e78b8..3c63bc92b 100644 --- a/Plan/src/main/java/com/djrapitops/plan/data/UserData.java +++ b/Plan/src/main/java/com/djrapitops/plan/data/UserData.java @@ -102,9 +102,8 @@ public class UserData { try { isBanned = player.isBanned(); } catch (Exception e) { - Plan plugin = getPlugin(Plan.class); - plugin.logError("Error getting ban date from Bukkit files. " + uuid.toString()); - plugin.toLog(this.getClass().getName(), e); + Log.errorMsg("Error getting ban date from Bukkit files. " + uuid.toString()); + Log.toLog(this.getClass().getName(), e); isBanned = false; } } @@ -119,9 +118,8 @@ public class UserData { try { isBanned = player.isBanned(); } catch (Exception e) { - Plan plugin = getPlugin(Plan.class); - plugin.logError("Error getting ban date from Bukkit files. " + uuid.toString()); - plugin.toLog(this.getClass().getName(), e); + Log.errorMsg("Error getting ban date from Bukkit files. " + uuid.toString()); + Log.toLog(this.getClass().getName(), e); isBanned = false; } } diff --git a/Plan/src/main/java/com/djrapitops/plan/data/cache/DataCacheHandler.java b/Plan/src/main/java/com/djrapitops/plan/data/cache/DataCacheHandler.java index 008f901fa..32074703e 100644 --- a/Plan/src/main/java/com/djrapitops/plan/data/cache/DataCacheHandler.java +++ b/Plan/src/main/java/com/djrapitops/plan/data/cache/DataCacheHandler.java @@ -24,7 +24,7 @@ import main.java.com.djrapitops.plan.database.Database; import main.java.com.djrapitops.plan.utilities.NewPlayerCreator; import main.java.com.djrapitops.plan.utilities.comparators.HandlingInfoTimeComparator; import org.bukkit.Bukkit; -import org.bukkit.GameMode; +import static org.bukkit.Bukkit.getOfflinePlayer; import org.bukkit.OfflinePlayer; import org.bukkit.entity.Player; import static org.bukkit.plugin.java.JavaPlugin.getPlugin; @@ -129,7 +129,7 @@ public class DataCacheHandler extends LocationCache { public void run() { DataCacheHandler handler = getPlugin(Plan.class).getHandler(); handler.saveHandlerDataToCache(); -// handler.saveCachedUserData(); + handler.saveCachedUserData(); if (timesSaved % clearAfterXsaves == 0) { handler.clearCache(); } @@ -250,7 +250,7 @@ public class DataCacheHandler extends LocationCache { } private void processUnprocessedHandlingInfo(List toProcess) { - Log.debug("PROCESS: "+toProcess.size()); + Log.debug("PROCESS: " + toProcess.size()); for (HandlingInfo i : toProcess) { UserData uData = dataCache.get(i.getUuid()); if (uData == null) { @@ -331,8 +331,16 @@ public class DataCacheHandler extends LocationCache { */ public void clearFromCache(UUID uuid) { Log.debug("Clear: " + uuid); - dataCache.remove(uuid); - plugin.log(Phrase.CACHE_REMOVE.parse(uuid.toString())); + if (getOfflinePlayer(uuid).isOnline()) { + Log.debug("Online, did not clear: " + uuid); + UserData data = dataCache.get(uuid); + if (data != null) { + data.setClearAfterSave(false); + } + } else { + dataCache.remove(uuid); + Log.info(Phrase.CACHE_REMOVE.parse(uuid.toString())); + } } /** diff --git a/Plan/src/main/java/com/djrapitops/plan/data/cache/SessionCache.java b/Plan/src/main/java/com/djrapitops/plan/data/cache/SessionCache.java index 173231572..e824443f5 100644 --- a/Plan/src/main/java/com/djrapitops/plan/data/cache/SessionCache.java +++ b/Plan/src/main/java/com/djrapitops/plan/data/cache/SessionCache.java @@ -27,7 +27,7 @@ public class SessionCache { * @param uuid */ public void startSession(UUID uuid) { - long now = new Date().toInstant().getEpochSecond() * (long) 1000; + long now = new Date().getTime(); Log.debug("Starting a session: "+uuid+" "+now); SessionData session = new SessionData(now); activeSessions.put(uuid, session); @@ -40,7 +40,7 @@ public class SessionCache { public void endSession(UUID uuid) { SessionData currentSession = activeSessions.get(uuid); if (currentSession != null) { - long now = new Date().toInstant().getEpochSecond() * (long) 1000; + long now = new Date().getTime(); Log.debug("Ending a session: "+uuid+" "+now); currentSession.endSession(now); } diff --git a/Plan/src/main/java/com/djrapitops/plan/data/cache/queue/DataCacheClearQueue.java b/Plan/src/main/java/com/djrapitops/plan/data/cache/queue/DataCacheClearQueue.java index 870fe518e..1f18125ef 100644 --- a/Plan/src/main/java/com/djrapitops/plan/data/cache/queue/DataCacheClearQueue.java +++ b/Plan/src/main/java/com/djrapitops/plan/data/cache/queue/DataCacheClearQueue.java @@ -91,10 +91,8 @@ class ClearConsumer implements Runnable { try { if (handler.isDataAccessed(uuid)) { queue.add(uuid); - } else if (!getOfflinePlayer(uuid).isOnline()) { - handler.clearFromCache(uuid); } else { - Log.debug("Online, removed from clear queue: "+uuid); + handler.clearFromCache(uuid); } // if online remove from clear list } catch (Exception ex) { diff --git a/Plan/src/main/java/com/djrapitops/plan/database/tables/SessionsTable.java b/Plan/src/main/java/com/djrapitops/plan/database/tables/SessionsTable.java index e6c944fca..c82cbb025 100644 --- a/Plan/src/main/java/com/djrapitops/plan/database/tables/SessionsTable.java +++ b/Plan/src/main/java/com/djrapitops/plan/database/tables/SessionsTable.java @@ -50,7 +50,7 @@ public class SessionsTable extends Table { PreparedStatement statement = null; ResultSet set = null; try { - statement = prepareStatement("SELECT * FROM " + tableName + " WHERE UPPER(" + columnUserID + ") LIKE UPPER(?)"); + statement = prepareStatement("SELECT * FROM " + tableName + " WHERE (" + columnUserID + "=?)"); statement.setInt(1, userId); set = statement.executeQuery(); List sessions = new ArrayList<>(); diff --git a/Plan/src/main/java/com/djrapitops/plan/ui/graphs/PlayerActivityGraphCreator.java b/Plan/src/main/java/com/djrapitops/plan/ui/graphs/PlayerActivityGraphCreator.java index 89c3e0ea5..39af11acc 100644 --- a/Plan/src/main/java/com/djrapitops/plan/ui/graphs/PlayerActivityGraphCreator.java +++ b/Plan/src/main/java/com/djrapitops/plan/ui/graphs/PlayerActivityGraphCreator.java @@ -28,7 +28,7 @@ public class PlayerActivityGraphCreator { CopyOnWriteArrayList s = new CopyOnWriteArrayList(sessionData); s.parallelStream() .filter(session -> (session != null)) - .filter((session) -> (session.getSessionStart() > nowMinusScale)) + .filter((session) -> (session.getSessionStart() > nowMinusScale || session.getSessionEnd() > nowMinusScale)) .forEach((session) -> { sessionEnds.add(session.getSessionEnd()); sessionStarts.add(session.getSessionStart()); @@ -36,6 +36,12 @@ public class PlayerActivityGraphCreator { List playersOnline = new ArrayList<>(); List labels = new ArrayList<>(); + for (Long start : sessionStarts) { + if (start < nowMinusScale) { + sessionStarts.add(nowMinusScale); + } + } + int lastPValue = 0; int lastSavedPValue = -1; long lastSaveI = 0; diff --git a/Plan/src/main/java/com/djrapitops/plan/ui/webserver/WebSocketServer.java b/Plan/src/main/java/com/djrapitops/plan/ui/webserver/WebSocketServer.java index 5efe95002..cb89f096d 100644 --- a/Plan/src/main/java/com/djrapitops/plan/ui/webserver/WebSocketServer.java +++ b/Plan/src/main/java/com/djrapitops/plan/ui/webserver/WebSocketServer.java @@ -53,7 +53,7 @@ public class WebSocketServer { try { //Setup server try { - server = new ServerSocket(PORT, 1, InetAddress.getByName("0.0.0.0")); + server = new ServerSocket(PORT, 1, InetAddress.getByName(Settings.WEBSERVER_IP.toString())); } catch (IOException e) { System.exit(1); } diff --git a/Plan/src/main/java/com/djrapitops/plan/utilities/Analysis.java b/Plan/src/main/java/com/djrapitops/plan/utilities/Analysis.java index c81fe5805..4134b0e92 100644 --- a/Plan/src/main/java/com/djrapitops/plan/utilities/Analysis.java +++ b/Plan/src/main/java/com/djrapitops/plan/utilities/Analysis.java @@ -8,6 +8,7 @@ import java.util.Map; import java.util.Set; import java.util.UUID; import java.util.stream.Collectors; +import main.java.com.djrapitops.plan.Log; import main.java.com.djrapitops.plan.Phrase; import main.java.com.djrapitops.plan.Plan; import main.java.com.djrapitops.plan.Settings; @@ -24,17 +25,10 @@ import main.java.com.djrapitops.plan.database.Database; import main.java.com.djrapitops.plan.ui.Html; import main.java.com.djrapitops.plan.ui.RecentPlayersButtonsCreator; import main.java.com.djrapitops.plan.ui.graphs.PlayerActivityGraphCreator; -import static org.bukkit.Bukkit.getOfflinePlayer; import org.bukkit.GameMode; import org.bukkit.scheduler.BukkitRunnable; import org.bukkit.scheduler.BukkitTask; import static org.bukkit.Bukkit.getOfflinePlayer; -import static org.bukkit.Bukkit.getOfflinePlayer; -import static org.bukkit.Bukkit.getOfflinePlayer; -import static org.bukkit.Bukkit.getOfflinePlayer; -import static org.bukkit.Bukkit.getOfflinePlayer; -import static org.bukkit.Bukkit.getOfflinePlayer; -import static org.bukkit.Bukkit.getOfflinePlayer; /** * @@ -113,7 +107,7 @@ public class Analysis { List added = new ArrayList<>(); List uuids = fetchPlayersInDB(db); if (uuids.isEmpty()) { - plugin.log(Phrase.ANALYSIS_FAIL_NO_DATA + ""); + Log.info(Phrase.ANALYSIS_FAIL_NO_DATA + ""); return false; } uuids.stream().forEach((uuid) -> { @@ -135,7 +129,7 @@ public class Analysis { }); } if (added.isEmpty()) { - plugin.log(Phrase.ANALYSIS_FAIL_NO_DATA + ""); + Log.info(Phrase.ANALYSIS_FAIL_NO_DATA + ""); return false; } return analyzeData(rawData, uuids, analysisCache); @@ -262,7 +256,9 @@ public class Analysis { analysisData.setRefreshDate(new Date().getTime()); analysisData.setGenderData(sorted.getGenders()); analysisCache.cache(analysisData); - plugin.log(Phrase.ANALYSIS_COMPLETE + ""); + if (Settings.ANALYSIS_LOG_FINISHED.isTrue()) { + Log.info(Phrase.ANALYSIS_COMPLETE + ""); + } return true; } @@ -336,7 +332,7 @@ public class Analysis { private void log(String msg) { if (Settings.ANALYSIS_LOG_TO_CONSOLE.isTrue()) { - plugin.log(msg); + Log.info(msg); } } diff --git a/Plan/src/main/resources/config.yml b/Plan/src/main/resources/config.yml index 07f4ed3df..1225d1626 100644 --- a/Plan/src/main/resources/config.yml +++ b/Plan/src/main/resources/config.yml @@ -6,6 +6,7 @@ Settings: GatherLocations: true Analysis: LogProgressOnConsole: false + NotifyWhenFinished: true MinutesPlayedUntilConsidiredActive: 10 Cache: Processing: @@ -23,6 +24,7 @@ Settings: WebServer: Enabled: true Port: 8804 + InternalIP: 0.0.0.0 ShowAlternativeServerIP: false AlternativeIP: your.ip.here:%port% Security: