mirror of
https://github.com/plan-player-analytics/Plan.git
synced 2025-03-07 17:28:03 +08:00
Bugfixes, More in depth enable debug & benchmark messages
Fix #152 Fix #153
This commit is contained in:
parent
4cbc00d87d
commit
b274f1ded8
@ -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);
|
||||
}
|
||||
|
||||
|
@ -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();
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -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);
|
||||
}
|
||||
|
@ -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);
|
||||
}
|
||||
}
|
||||
|
@ -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;
|
||||
|
@ -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.
|
||||
|
@ -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("%", ""));
|
||||
|
@ -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;
|
||||
|
Loading…
Reference in New Issue
Block a user