Bugfixes, identified possible database bug (Refactor caused)

Fix #78 #73 #79

- database might not be giving correct results for user id.
This commit is contained in:
Rsl1122 2017-05-01 12:35:23 +03:00
parent e46dcfa535
commit ccb2498d38
10 changed files with 40 additions and 30 deletions

View File

@ -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"),

View File

@ -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;
}
}

View File

@ -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<HandlingInfo> 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()));
}
}
/**

View File

@ -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);
}

View File

@ -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) {

View File

@ -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<SessionData> sessions = new ArrayList<>();

View File

@ -28,7 +28,7 @@ public class PlayerActivityGraphCreator {
CopyOnWriteArrayList<SessionData> 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<Integer> playersOnline = new ArrayList<>();
List<String> labels = new ArrayList<>();
for (Long start : sessionStarts) {
if (start < nowMinusScale) {
sessionStarts.add(nowMinusScale);
}
}
int lastPValue = 0;
int lastSavedPValue = -1;
long lastSaveI = 0;

View File

@ -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);
}

View File

@ -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<UUID> added = new ArrayList<>();
List<UUID> 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);
}
}

View File

@ -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: