Bugfixes, More in depth enable debug & benchmark messages

Fix #152
Fix #153
This commit is contained in:
Rsl1122 2017-07-05 11:46:03 +03:00
parent 4cbc00d87d
commit b274f1ded8
8 changed files with 67 additions and 42 deletions

View File

@ -44,6 +44,7 @@ import main.java.com.djrapitops.plan.database.Database;
import main.java.com.djrapitops.plan.database.databases.*;
import main.java.com.djrapitops.plan.ui.Html;
import main.java.com.djrapitops.plan.ui.webserver.WebSocketServer;
import main.java.com.djrapitops.plan.utilities.Benchmark;
import main.java.com.djrapitops.plan.utilities.Check;
import main.java.com.djrapitops.plan.utilities.MiscUtils;
import org.bukkit.Bukkit;
@ -94,15 +95,20 @@ public class Plan extends RslPlugin<Plan> {
// Initializes RslPlugin variables, Checks version & Logs the debug header
super.onEnableDefaultTasks();
initLocale();
serverVariableHolder = new ServerVariableHolder(getServer());
processStatus().startExecution("Enable");
// Copy config
initLocale();
Benchmark.start("Enable: Reading server variables");
serverVariableHolder = new ServerVariableHolder(getServer());
Benchmark.stop("Enable: Reading server variables");
Benchmark.start("Enable: Copy default config");
getConfig().options().copyDefaults(true);
getConfig().options().header(Phrase.CONFIG_HEADER + "");
saveConfig();
Benchmark.stop("Enable: Copy default config");
// Initialize Database
Benchmark.start("Enable: Init Database");
Log.info(Phrase.DB_INIT + "");
if (Check.ifTrue_Error(initDatabase(), Phrase.DB_FAILURE_DISABLE.toString())) {
Log.info(Phrase.DB_ESTABLISHED.parse(db.getConfigName()));
@ -110,36 +116,29 @@ public class Plan extends RslPlugin<Plan> {
disablePlugin();
return;
}
Benchmark.stop("Enable: Init Database");
// Initialize DataCache
Benchmark.start("Enable: Init DataCache");
this.handler = new DataCacheHandler(this);
this.inspectCache = new InspectCacheHandler(this);
this.analysisCache = new AnalysisCacheHandler(this);
Benchmark.stop("Enable: Init DataCache");
// TPS Count Task
super.getRunnableFactory().createNew(new TPSCountTimer(this)).runTaskTimer(1000, TimeAmount.SECOND.ticks());
registerListeners();
registerCommand(new PlanCommand(this));
this.api = new API(this);
Benchmark.start("Enable: Handle Reload");
handler.handleReload();
Benchmark.stop("Enable: Handle Reload");
Benchmark.start("Enable: Analysis refresh task registration");
// Analysis refresh settings
boolean bootAnalysisIsEnabled = Settings.ANALYSIS_REFRESH_ON_ENABLE.isTrue();
int analysisRefreshMinutes = Settings.ANALYSIS_AUTO_REFRESH.getNumber();
boolean analysisRefreshTaskIsEnabled = analysisRefreshMinutes > 0;
// Data view settings
boolean webserverIsEnabled = Settings.WEBSERVER_ENABLED.isTrue();
boolean usingAlternativeIP = Settings.SHOW_ALTERNATIVE_IP.isTrue();
boolean usingAlternativeUI = Settings.USE_ALTERNATIVE_UI.isTrue();
boolean hasDataViewCapability = usingAlternativeIP || usingAlternativeUI || webserverIsEnabled;
// Analysis refresh tasks
if (bootAnalysisIsEnabled) {
startBootAnalysisTask();
@ -147,8 +146,15 @@ public class Plan extends RslPlugin<Plan> {
if (analysisRefreshTaskIsEnabled) {
startAnalysisRefreshTask(analysisRefreshMinutes);
}
Benchmark.stop("Enable: Analysis refresh task registration");
Benchmark.start("Enable: Webserver Initialization");
// Data view settings
boolean webserverIsEnabled = Settings.WEBSERVER_ENABLED.isTrue();
boolean usingAlternativeIP = Settings.SHOW_ALTERNATIVE_IP.isTrue();
boolean usingAlternativeUI = Settings.USE_ALTERNATIVE_UI.isTrue();
boolean hasDataViewCapability = usingAlternativeIP || usingAlternativeUI || webserverIsEnabled;
// Webserver
if (webserverIsEnabled) {
uiServer = new WebSocketServer(this);
uiServer.initServer();
@ -158,12 +164,15 @@ public class Plan extends RslPlugin<Plan> {
if (!usingAlternativeIP && serverVariableHolder.getIp().isEmpty()) {
Log.infoColor(Phrase.NOTIFY_EMPTY_IP + "");
}
Benchmark.stop("Enable: Webserver Initialization");
// Hook plugins
Benchmark.start("Enable: Hook to 3rd party plugins");
hookHandler = new HookHandler(this);
Benchmark.stop("Enable: Hook to 3rd party plugins");
Log.debug("Verboose debug messages are enabled.");
Log.info(Phrase.ENABLED + "");
processStatus().finishExecution("Enable");
}
/**
@ -179,13 +188,14 @@ public class Plan extends RslPlugin<Plan> {
}
Bukkit.getScheduler().cancelTasks(this);
if (Verify.notNull(handler) && Verify.notNull(db)) {
Benchmark.start("DataCache OnDisable Save");
// Saves the datacache to the database without Bukkit's Schedulers.
Log.info(Phrase.CACHE_SAVE + "");
ScheduledExecutorService scheduler = Executors.newScheduledThreadPool(1);
scheduler.execute(() -> {
handler.saveCacheOnDisable();
taskStatus().cancelAllKnownTasks();
Benchmark.stop("DataCache OnDisable Save");
});
scheduler.shutdown(); // Schedules the save to shutdown after it has ran the execute method.
@ -194,7 +204,7 @@ public class Plan extends RslPlugin<Plan> {
}
private void registerListeners() {
Benchmark.start("Enable: Register Listeners");
registerListener(new PlanPlayerListener(this));
boolean chatListenerIsEnabled = Check.ifTrue(Settings.GATHERCHAT.isTrue(), Phrase.NOTIFY_DISABLED_CHATLISTENER + "");
boolean gamemodeChangeListenerIsEnabled = Check.ifTrue(Settings.GATHERGMTIMES.isTrue(), Phrase.NOTIFY_DISABLED_GMLISTENER + "");
@ -216,6 +226,7 @@ public class Plan extends RslPlugin<Plan> {
if (Settings.GATHERLOCATIONS.isTrue()) {
registerListener(new PlanPlayerMoveListener(this));
}
Benchmark.stop("Enable: Register Listeners");
}
/**
@ -248,12 +259,14 @@ public class Plan extends RslPlugin<Plan> {
}
private void startAnalysisRefreshTask(int everyXMinutes) throws IllegalStateException {
Benchmark.start("Enable: Schedule PeriodicAnalysisTask");
if (!Verify.positive(everyXMinutes)) {
return;
}
getRunnableFactory().createNew("PeriodicalAnalysisTask", new RslRunnable() {
@Override
public void run() {
Log.debug("Running PeriodicalAnalysisTask");
if (!analysisCache.isCached()) {
analysisCache.updateCache();
} else if (MiscUtils.getTime() - analysisCache.getData().getRefreshDate() > TimeAmount.MINUTE.ms()) {
@ -261,19 +274,23 @@ public class Plan extends RslPlugin<Plan> {
}
}
}).runTaskTimerAsynchronously(everyXMinutes * TimeAmount.MINUTE.ticks(), everyXMinutes * TimeAmount.MINUTE.ticks());
Benchmark.stop("Enable: Schedule PeriodicAnalysisTask");
}
private void startBootAnalysisTask() throws IllegalStateException {
Benchmark.start("Enable: Schedule boot analysis task");
Log.info(Phrase.ANALYSIS_BOOT_NOTIFY + "");
RslTask bootAnalysisTask = getRunnableFactory().createNew("BootAnalysisTask", new RslRunnable() {
@Override
public void run() {
Log.debug("Running BootAnalysisTask");
Log.info(Phrase.ANALYSIS_BOOT + "");
analysisCache.updateCache();
this.cancel();
}
}).runTaskLaterAsynchronously(30 * TimeAmount.SECOND.ticks());
bootAnalysisTaskID = bootAnalysisTask.getTaskId();
Benchmark.stop("Enable: Schedule boot analysis task");
}
private void initLocale() {
@ -296,6 +313,7 @@ public class Plan extends RslPlugin<Plan> {
} catch (IOException ex) {
Logger.getLogger(Plan.class.getName()).log(Level.SEVERE, null, ex);
}*/
Benchmark.start("Enable: Initializing locale");
File localeFile = new File(getDataFolder(), "locale.txt");
boolean skipLoc = false;
String usingLocale = "";
@ -329,6 +347,7 @@ public class Plan extends RslPlugin<Plan> {
} else {
usingLocale = "Default: EN";
}
Benchmark.stop("Enable: Initializing locale");
Log.info("Using locale: " + usingLocale);
}

View File

@ -1,5 +1,6 @@
package main.java.com.djrapitops.plan;
import main.java.com.djrapitops.plan.utilities.Benchmark;
import org.bukkit.Server;
/**
@ -19,9 +20,9 @@ public class ServerVariableHolder {
*
* @param server instance the plugin is running on.
*/
public ServerVariableHolder(Server server) {
public ServerVariableHolder(Server server) {
maxPlayers = server.getMaxPlayers();
ip = server.getIp();
ip = server.getIp();
}
/**

View File

@ -85,10 +85,10 @@ public enum Settings {
// StringList
HIDE_FACTIONS("Customization.Plugins.Factions.HideFactions"),
HIDE_TOWNS("Customization.Plugins.Towny.HideTowns");
private final String configPath;
private Boolean value;
private Settings(String path) {
this.configPath = path;
}
@ -99,12 +99,12 @@ public enum Settings {
* @return Boolean value of the config setting, false if not boolean.
*/
public boolean isTrue() {
if (Verify.notNull(value)) {
if (value != null) {
return value;
}
return Plan.getInstance().getConfig().getBoolean(configPath);
}
public void setValue(Boolean value) {
this.value = value;
}
@ -127,7 +127,7 @@ public enum Settings {
public int getNumber() {
return Plan.getInstance().getConfig().getInt(configPath);
}
public List<String> getStringList() {
return Plan.getInstance().getConfig().getStringList(configPath);
}

View File

@ -313,7 +313,7 @@ public class UserData {
if (!Verify.notNull(gmTimes)) {
gmTimes = new HashMap<>();
}
if (Verify.notNull(time)) {
if (Verify.notNull(gm)) {
gmTimes.put(gm, time);
}
}

View File

@ -73,17 +73,18 @@ public class DataCacheHandler extends LocationCache {
* @param plugin Current instance of Plan
*/
public DataCacheHandler(Plan plugin) {
super();
super(); // Initializes Session & Location cache.
this.plugin = plugin;
db = plugin.getDB();
dataCache = new HashMap<>();
dataCache = new HashMap<>();
startQueues();
commandUse = new HashMap<>();
if (!getCommandUseFromDb()) {
Log.error(Phrase.DB_FAILURE_DISABLE + "");
plugin.getServer().getPluginManager().disablePlugin(plugin);
plugin.disablePlugin();
return;
}
unsavedTPSHistory = new ArrayList<>();
@ -109,10 +110,10 @@ public class DataCacheHandler extends LocationCache {
* Used to start all processing Queue Threads.
*/
public void startQueues() {
clearTask = new DataCacheClearQueue(this);
saveTask = new DataCacheSaveQueue(plugin, this);
getTask = new DataCacheGetQueue(plugin);
processTask = new DataCacheProcessQueue(this);
clearTask = new DataCacheClearQueue(this);
saveTask = new DataCacheSaveQueue(plugin, this);
}
/**
@ -124,7 +125,7 @@ public class DataCacheHandler extends LocationCache {
*/
public void startAsyncPeriodicSaveTask() throws IllegalArgumentException, IllegalStateException {
int minutes = Settings.SAVE_CACHE_MIN.getNumber();
if (minutes <= 0) {
if (!Verify.positive(minutes)) {
minutes = 5;
}
final int clearAfterXsaves;

View File

@ -4,6 +4,7 @@ import com.djrapitops.javaplugin.api.TimeAmount;
import com.djrapitops.javaplugin.task.RslRunnable;
import java.util.ArrayList;
import java.util.List;
import main.java.com.djrapitops.plan.Log;
import main.java.com.djrapitops.plan.Plan;
import main.java.com.djrapitops.plan.data.TPS;
import main.java.com.djrapitops.plan.data.cache.DataCacheHandler;
@ -36,6 +37,7 @@ public class TPSCountTimer extends RslRunnable {
long diff = nanotime - lastCheckNano;
lastCheckNano = nanotime;
if (diff > nanotime) { // First run's diff = nanotime + 1, no calc possible.
Log.debug("First run of TPSCountTimer Task.");
return;
}
diff -= TimeAmount.MILLISECOND.ns() * 40L; // 40ms Removed because the run appears to take 40-50ms, scewing the tps.

View File

@ -3,6 +3,7 @@ package main.java.com.djrapitops.plan.utilities.analysis;
import com.djrapitops.javaplugin.api.TimeAmount;
import com.djrapitops.javaplugin.task.RslRunnable;
import com.djrapitops.javaplugin.task.RslTask;
import com.djrapitops.javaplugin.utilities.Verify;
import java.util.ArrayList;
import java.util.Date;
import java.util.HashMap;
@ -406,9 +407,9 @@ public class Analysis {
final AnalysisType bool = AnalysisType.BOOLEAN_PERCENTAGE;
final AnalysisType boolTot = AnalysisType.BOOLEAN_TOTAL;
Log.debug("Analyzing additional sources: " + sources.size());
sources.parallelStream().forEach(source -> {
Benchmark.start("Source " + source.getPlaceholder("").replace("%", ""));
sources.parallelStream().filter(s -> Verify.notNull(s)).forEach(source -> {
try {
Benchmark.start("Source " + source.getPlaceholder("").replace("%", ""));
final List<AnalysisType> analysisTypes = source.getAnalysisTypes();
if (analysisTypes.isEmpty()) {
return;
@ -435,6 +436,7 @@ public class Analysis {
}
} catch (Throwable e) {
Log.error("A PluginData-source caused an exception: " + source.getPlaceholder("").replace("%", ""));
Log.toLog(this.getClass().getName(), e);
} finally {
Benchmark.stop("Source " + source.getPlaceholder("").replace("%", ""));

View File

@ -41,6 +41,7 @@ public class TestInit {
public boolean setUp() {
try {
planMock = PowerMockito.mock(Plan.class);
Plan.setInstance(Plan.class, planMock);
File configfile = new File(getClass().getResource("/config.yml").getPath());
YamlConfiguration configuration = new YamlConfiguration();
configuration.load(configfile.getAbsolutePath());
@ -67,15 +68,14 @@ public class TestInit {
// Mockito.doReturn("0.0.0.0").when(mockServer).getIp();
when(planMock.getServer()).thenReturn(mockServer);
when(planMock.getLogger()).thenReturn(Logger.getGlobal());
ServerVariableHolder serverVariableHolder = new ServerVariableHolder(mockServer);
when(planMock.getVariable()).thenReturn(serverVariableHolder);
BukkitLog<Plan> log = new BukkitLog(planMock, "console", "");
when(planMock.getPluginLogger()).thenReturn(log);
ProcessStatus<Plan> process = new ProcessStatus(planMock);
when(planMock.processStatus()).thenReturn(process);
BenchmarkUtil bench = new BenchmarkUtil();
when(planMock.benchmark()).thenReturn(bench);
Plan.setInstance(Plan.class, planMock);
ServerVariableHolder serverVariableHolder = new ServerVariableHolder(mockServer);
when(planMock.getVariable()).thenReturn(serverVariableHolder);
ProcessStatus<Plan> process = new ProcessStatus(planMock);
when(planMock.processStatus()).thenReturn(process);
// Mockito.doReturn("0.0.0.0").when(planMock).getServer().getIp();
Settings.DEBUG.setValue(true);
return true;