Modularized enable task registration

This commit is contained in:
Rsl1122 2017-12-14 15:53:33 +02:00
parent f14c481a29
commit 0ef23bb751
8 changed files with 200 additions and 83 deletions

View File

@ -29,7 +29,6 @@ import com.djrapitops.plugin.api.utility.log.DebugLog;
import com.djrapitops.plugin.api.utility.log.Log;
import com.djrapitops.plugin.settings.ColorScheme;
import com.djrapitops.plugin.task.AbsRunnable;
import com.djrapitops.plugin.task.ITask;
import com.djrapitops.plugin.task.RunnableFactory;
import main.java.com.djrapitops.plan.api.API;
import main.java.com.djrapitops.plan.api.IPlan;
@ -56,6 +55,7 @@ import main.java.com.djrapitops.plan.systems.processing.Processor;
import main.java.com.djrapitops.plan.systems.processing.importing.importers.OfflinePlayerImporter;
import main.java.com.djrapitops.plan.systems.queue.ProcessingQueue;
import main.java.com.djrapitops.plan.systems.tasks.TPSCountTimer;
import main.java.com.djrapitops.plan.systems.tasks.TaskSystem;
import main.java.com.djrapitops.plan.systems.update.VersionCheckSystem;
import main.java.com.djrapitops.plan.systems.webserver.WebServer;
import main.java.com.djrapitops.plan.systems.webserver.WebServerSystem;
@ -188,7 +188,8 @@ public class Plan extends BukkitPlugin implements IPlan {
registerListeners();
}
PlanPlayerListener.setCountKicks(true);
registerTasks();
TaskSystem.getInstance().init();
this.api = new API(this);
@ -229,51 +230,6 @@ public class Plan extends BukkitPlugin implements IPlan {
}
}
private void registerTasks() {
String bootAnalysisMsg = Locale.get(Msg.ENABLE_BOOT_ANALYSIS_INFO).toString();
String bootAnalysisRunMsg = Locale.get(Msg.ENABLE_BOOT_ANALYSIS_RUN_INFO).toString();
Benchmark.start("Task Registration");
tpsCountTimer = new TPSCountTimer(this);
RunnableFactory.createNew(tpsCountTimer).runTaskTimer(1000, TimeAmount.SECOND.ticks());
// Analysis refresh settings
int analysisRefreshMinutes = Settings.ANALYSIS_AUTO_REFRESH.getNumber();
boolean analysisRefreshTaskIsEnabled = analysisRefreshMinutes > 0;
long analysisPeriod = analysisRefreshMinutes * TimeAmount.MINUTE.ticks();
Log.info(bootAnalysisMsg);
ITask bootAnalysisTask = RunnableFactory.createNew("BootAnalysisTask", new AbsRunnable() {
@Override
public void run() {
Log.info(bootAnalysisRunMsg);
infoManager.refreshAnalysis(getServerUUID());
this.cancel();
}
}).runTaskLaterAsynchronously(30 * TimeAmount.SECOND.ticks());
bootAnalysisTaskID = bootAnalysisTask.getTaskId();
if (analysisRefreshTaskIsEnabled) {
RunnableFactory.createNew("PeriodicalAnalysisTask", new AbsRunnable() {
@Override
public void run() {
infoManager.refreshAnalysis(getServerUUID());
}
}).runTaskTimerAsynchronously(analysisPeriod, analysisPeriod);
}
RunnableFactory.createNew("PeriodicNetworkBoxRefreshTask", new AbsRunnable() {
@Override
public void run() {
infoManager.updateNetworkPageContent();
}
}).runTaskTimerAsynchronously(TimeAmount.SECOND.ticks(), TimeAmount.MINUTE.ticks() * 5L);
Benchmark.stop("Enable", "Task Registration");
}
@Override
public ColorScheme getColorScheme() {
try {
@ -380,15 +336,6 @@ public class Plan extends BukkitPlugin implements IPlan {
return hookHandler;
}
/**
* Used to get the ID of the BootAnalysisTask, so that it can be disabled.
*
* @return ID of the bootAnalysisTask
*/
public int getBootAnalysisTaskID() {
return bootAnalysisTaskID;
}
/**
* Used to get the object storing server variables that are constant after
* boot.

View File

@ -7,11 +7,9 @@ package main.java.com.djrapitops.plan;
import com.djrapitops.plugin.BungeePlugin;
import com.djrapitops.plugin.StaticHolder;
import com.djrapitops.plugin.api.Benchmark;
import com.djrapitops.plugin.api.TimeAmount;
import com.djrapitops.plugin.api.config.Config;
import com.djrapitops.plugin.api.utility.log.Log;
import com.djrapitops.plugin.settings.ColorScheme;
import com.djrapitops.plugin.task.AbsRunnable;
import com.djrapitops.plugin.task.RunnableFactory;
import main.java.com.djrapitops.plan.api.IPlan;
import main.java.com.djrapitops.plan.command.PlanBungeeCommand;
@ -30,7 +28,7 @@ import main.java.com.djrapitops.plan.systems.info.server.BungeeServerInfoManager
import main.java.com.djrapitops.plan.systems.listeners.BungeePlayerListener;
import main.java.com.djrapitops.plan.systems.processing.Processor;
import main.java.com.djrapitops.plan.systems.queue.ProcessingQueue;
import main.java.com.djrapitops.plan.systems.tasks.TPSCountTimer;
import main.java.com.djrapitops.plan.systems.tasks.TaskSystem;
import main.java.com.djrapitops.plan.systems.update.VersionCheckSystem;
import main.java.com.djrapitops.plan.systems.webserver.WebServer;
import main.java.com.djrapitops.plan.systems.webserver.WebServerSystem;
@ -72,7 +70,6 @@ public class PlanBungee extends BungeePlugin implements IPlan {
new Locale().loadLocale();
Theme.getInstance().init();
DBSystem.getInstance().init();
registerCommand("planbungee", new PlanBungeeCommand(this));
@ -92,21 +89,7 @@ public class PlanBungee extends BungeePlugin implements IPlan {
WebServerSystem.getInstance().init();
serverInfoManager.loadServerInfo();
RunnableFactory.createNew("Enable Bukkit Connection Task", new AbsRunnable() {
@Override
public void run() {
infoManager.attemptConnection();
infoManager.sendConfigSettings();
}
}).runTaskAsynchronously();
RunnableFactory.createNew("Player Count task", new TPSCountTimer(this))
.runTaskTimerAsynchronously(1000, TimeAmount.SECOND.ticks());
RunnableFactory.createNew("NetworkPageContentUpdateTask", new AbsRunnable("NetworkPageContentUpdateTask") {
@Override
public void run() {
infoManager.updateNetworkPageContent();
}
}).runTaskTimerAsynchronously(1500, TimeAmount.MINUTE.ticks());
TaskSystem.getInstance().init();
processingQueue = new ProcessingQueue();

View File

@ -131,10 +131,6 @@ public class AnalyzeCommand extends SubCommand {
}
private void updateCache(ISender sender, UUID serverUUID) {
int bootAnID = plugin.getBootAnalysisTaskID();
if (bootAnID != -1) {
plugin.getServer().getScheduler().cancelTask(bootAnID);
}
infoManager.addAnalysisNotification(sender, serverUUID);
infoManager.refreshAnalysis(serverUUID);
}

View File

@ -15,6 +15,9 @@ import main.java.com.djrapitops.plan.systems.file.config.PlanConfigSystem;
import main.java.com.djrapitops.plan.systems.file.database.DBSystem;
import main.java.com.djrapitops.plan.systems.file.database.PlanBungeeDBSystem;
import main.java.com.djrapitops.plan.systems.file.database.PlanDBSystem;
import main.java.com.djrapitops.plan.systems.tasks.PlanBungeeTaskSystem;
import main.java.com.djrapitops.plan.systems.tasks.PlanTaskSystem;
import main.java.com.djrapitops.plan.systems.tasks.TaskSystem;
import main.java.com.djrapitops.plan.systems.update.VersionCheckSystem;
import main.java.com.djrapitops.plan.systems.webserver.WebServerSystem;
import main.java.com.djrapitops.plan.utilities.MiscUtils;
@ -34,6 +37,8 @@ public class Systems {
private WebServerSystem webServerSystem;
private TaskSystem taskSystem;
private VersionCheckSystem versionCheckSystem;
/**
@ -47,6 +52,8 @@ public class Systems {
databaseSystem = new PlanDBSystem();
versionCheckSystem = new VersionCheckSystem(plugin.getVersion());
taskSystem = new PlanTaskSystem();
webServerSystem = new WebServerSystem(plugin);
themeSystem = new Theme();
}
@ -62,6 +69,8 @@ public class Systems {
databaseSystem = new PlanBungeeDBSystem();
versionCheckSystem = new VersionCheckSystem(plugin.getVersion());
taskSystem = new PlanBungeeTaskSystem();
webServerSystem = new WebServerSystem(plugin);
themeSystem = new Theme();
}
@ -114,4 +123,8 @@ public class Systems {
public Theme getThemeSystem() {
return themeSystem;
}
public TaskSystem getTaskSystem() {
return taskSystem;
}
}

View File

@ -0,0 +1,44 @@
/*
* Licence is provided in the jar as license.yml also here:
* https://github.com/Rsl1122/Plan-PlayerAnalytics/blob/master/Plan/src/main/resources/license.yml
*/
package main.java.com.djrapitops.plan.systems.tasks;
import com.djrapitops.plugin.api.TimeAmount;
import com.djrapitops.plugin.task.AbsRunnable;
import main.java.com.djrapitops.plan.PlanBungee;
import main.java.com.djrapitops.plan.api.exceptions.PlanEnableException;
import main.java.com.djrapitops.plan.systems.info.BungeeInformationManager;
/**
* //TODO Class Javadoc Comment
*
* @author Rsl1122
*/
public class PlanBungeeTaskSystem extends TaskSystem {
@Override
public void init() throws PlanEnableException {
registerTasks();
}
private void registerTasks() {
BungeeInformationManager infoManager = ((BungeeInformationManager) PlanBungee.getInstance().getInfoManager());
registerTask("Enable Bukkit Connection Task", new AbsRunnable() {
@Override
public void run() {
infoManager.attemptConnection();
infoManager.sendConfigSettings();
}
}).runTaskAsynchronously();
registerTask("Player Count task", new TPSCountTimer(PlanBungee.getInstance()))
.runTaskTimerAsynchronously(1000, TimeAmount.SECOND.ticks());
registerTask("NetworkPageContentUpdateTask", new AbsRunnable("NetworkPageContentUpdateTask") {
@Override
public void run() {
infoManager.updateNetworkPageContent();
}
}).runTaskTimerAsynchronously(1500, TimeAmount.MINUTE.ticks());
}
}

View File

@ -0,0 +1,89 @@
/*
* Licence is provided in the jar as license.yml also here:
* https://github.com/Rsl1122/Plan-PlayerAnalytics/blob/master/Plan/src/main/resources/license.yml
*/
package main.java.com.djrapitops.plan.systems.tasks;
import com.djrapitops.plugin.api.Benchmark;
import com.djrapitops.plugin.api.TimeAmount;
import com.djrapitops.plugin.api.utility.log.Log;
import com.djrapitops.plugin.task.AbsRunnable;
import com.djrapitops.plugin.task.ITask;
import com.djrapitops.plugin.task.RunnableFactory;
import main.java.com.djrapitops.plan.Plan;
import main.java.com.djrapitops.plan.api.exceptions.PlanEnableException;
import main.java.com.djrapitops.plan.settings.Settings;
import main.java.com.djrapitops.plan.settings.locale.Locale;
import main.java.com.djrapitops.plan.settings.locale.Msg;
import main.java.com.djrapitops.plan.systems.info.InformationManager;
/**
* //TODO Class Javadoc Comment
*
* @author Rsl1122
*/
public class PlanTaskSystem extends TaskSystem {
// TODO Remove Plan.getInstance requirement.
private ITask bootAnalysisTask;
@Override
public void init() throws PlanEnableException {
registerTasks();
}
// TODO Clean Up
private void registerTasks() {
String bootAnalysisMsg = Locale.get(Msg.ENABLE_BOOT_ANALYSIS_INFO).toString();
String bootAnalysisRunMsg = Locale.get(Msg.ENABLE_BOOT_ANALYSIS_RUN_INFO).toString();
Benchmark.start("Task Registration");
tpsCountTimer = new TPSCountTimer(Plan.getInstance());
registerTask(tpsCountTimer).runTaskTimer(1000, TimeAmount.SECOND.ticks());
// Analysis refresh settings
int analysisRefreshMinutes = Settings.ANALYSIS_AUTO_REFRESH.getNumber();
boolean analysisRefreshTaskIsEnabled = analysisRefreshMinutes > 0;
long analysisPeriod = analysisRefreshMinutes * TimeAmount.MINUTE.ticks();
Log.info(bootAnalysisMsg);
InformationManager infoManager = Plan.getInstance().getInfoManager();
bootAnalysisTask = RunnableFactory.createNew("BootAnalysisTask", new AbsRunnable() {
@Override
public void run() {
Log.info(bootAnalysisRunMsg);
infoManager.refreshAnalysis(Plan.getServerUUID());
this.cancel();
}
}).runTaskLaterAsynchronously(30 * TimeAmount.SECOND.ticks());
if (analysisRefreshTaskIsEnabled) {
RunnableFactory.createNew("PeriodicalAnalysisTask", new AbsRunnable() {
@Override
public void run() {
infoManager.refreshAnalysis(Plan.getServerUUID());
}
}).runTaskTimerAsynchronously(analysisPeriod, analysisPeriod);
}
registerTask("PeriodicNetworkBoxRefreshTask", new AbsRunnable() {
@Override
public void run() {
infoManager.updateNetworkPageContent();
}
}).runTaskTimerAsynchronously(TimeAmount.SECOND.ticks(), TimeAmount.MINUTE.ticks() * 5L);
Benchmark.stop("Enable", "Task Registration");
}
public void cancelBootAnalysis() {
try {
bootAnalysisTask.cancel();
} catch (Exception ignored) {
/* Ignored */
}
}
}

View File

@ -0,0 +1,45 @@
/*
* Licence is provided in the jar as license.yml also here:
* https://github.com/Rsl1122/Plan-PlayerAnalytics/blob/master/Plan/src/main/resources/license.yml
*/
package main.java.com.djrapitops.plan.systems.tasks;
import com.djrapitops.plugin.api.systems.TaskCenter;
import com.djrapitops.plugin.task.AbsRunnable;
import com.djrapitops.plugin.task.IRunnable;
import com.djrapitops.plugin.task.RunnableFactory;
import main.java.com.djrapitops.plan.systems.SubSystem;
import main.java.com.djrapitops.plan.systems.Systems;
import main.java.com.djrapitops.plan.utilities.MiscUtils;
/**
* //TODO Class Javadoc Comment
*
* @author Rsl1122
*/
public abstract class TaskSystem implements SubSystem {
protected TPSCountTimer tpsCountTimer;
public static TaskSystem getInstance() {
return Systems.getInstance().getTaskSystem();
}
protected IRunnable registerTask(AbsRunnable runnable) {
String taskName = runnable.getName();
return registerTask(taskName != null ? taskName : runnable.getClass().getSimpleName(), runnable);
}
protected IRunnable registerTask(String name, AbsRunnable runnable) {
return RunnableFactory.createNew(name, runnable);
}
@Override
public void close() {
TaskCenter.cancelAllKnownTasks(MiscUtils.getIPlan().getClass());
}
public TPSCountTimer getTpsCountTimer() {
return tpsCountTimer;
}
}

View File

@ -20,6 +20,8 @@ import main.java.com.djrapitops.plan.systems.cache.DataCache;
import main.java.com.djrapitops.plan.systems.cache.SessionCache;
import main.java.com.djrapitops.plan.systems.info.BukkitInformationManager;
import main.java.com.djrapitops.plan.systems.info.InformationManager;
import main.java.com.djrapitops.plan.systems.tasks.PlanTaskSystem;
import main.java.com.djrapitops.plan.systems.tasks.TaskSystem;
import main.java.com.djrapitops.plan.systems.webserver.response.ErrorResponse;
import main.java.com.djrapitops.plan.systems.webserver.response.InternalErrorResponse;
@ -54,6 +56,8 @@ public class Analysis {
return;
}
((PlanTaskSystem) TaskSystem.getInstance()).cancelBootAnalysis();
Benchmark.start("Analysis");
log(Locale.get(Msg.ANALYSIS_START).toString());
// Async task for Analysis
@ -218,10 +222,6 @@ public class Analysis {
return taskId != -1;
}
public void setTaskId(int id) {
taskId = id;
}
/**
* Only available during Analysis.
*