Moved to new abstracted task system to add Status command.

This commit is contained in:
Rsl1122 2017-06-19 14:02:50 +03:00
parent faca03755d
commit 754d437fd9
30 changed files with 203 additions and 222 deletions

View File

@ -16,7 +16,7 @@
<dependency>
<groupId>com.djrapitops</groupId>
<artifactId>BukkitPluginDependency</artifactId>
<version>1.0.0</version>
<version>1.1.0</version>
<scope>compile</scope>
</dependency>
<dependency>

View File

@ -16,7 +16,7 @@ public class Log {
* @param message "Message" will show up as [INFO][Plan]: Message
*/
public static void info(String message) {
Plan.getInstance().getPluginLogger().info(message);
Plan.getPluginInstance().getPluginLogger().info(message);
}
public static void infoColor(String message) {

View File

@ -65,7 +65,7 @@ public enum Phrase {
NOT_IN_FAC("Not in a faction"),
//
ANALYSIS("Analysis | "),
COMMAND_TIMEOUT(ChatColor.RED + "" + PREFIX + "REPLACE0 Command timed out! Error most likely on console."),
COMMAND_TIMEOUT(ChatColor.RED + "" + PREFIX + "REPLACE0 Command timed out! Check '/plan status' & console."),
ANALYSIS_START(ANALYSIS + "Beginning analysis of user data.."),
ANALYSIS_BOOT_NOTIFY(ANALYSIS + "Boot analysis in 30 seconds.."),
ANALYSIS_BOOT(ANALYSIS + "Starting Boot Analysis.."),
@ -110,6 +110,7 @@ public enum Phrase {
CMD_INFO_HEADER(CMD_FOOTER + "" + COLOR_MAIN.color() + " Player Analytics - Info"),
CMD_INFO_VERSION(CMD_BALL + "" + COLOR_MAIN.color() + " Version: " + COLOR_SEC.color() + REPLACE0),
CMD_SEARCH_HEADER(CMD_FOOTER + "" + COLOR_MAIN.color() + " Player Analytics - Search results for: "),
CMD_SEARCH_SEARCHING(CMD_FOOTER + "" + COLOR_MAIN.color() + " Searching.."),
CMD_HELP_HEADER(CMD_FOOTER + "" + COLOR_MAIN.color() + " Player Analytics - Help"),
CMD_MANAGE_HELP_HEADER(CMD_FOOTER + "" + COLOR_MAIN.color() + " Player Analytics - Managment Help"),
CMD_MANAGE_STATUS_HEADER(CMD_FOOTER + "" + COLOR_MAIN.color() + " Player Analytics - Database status"),
@ -123,7 +124,7 @@ public enum Phrase {
CMD_PASS_PLANLITE("UNUSED"),
CMD_RESULTS_AVAILABLE(COLOR_SEC.color() + " Results will be available for " + COLOR_TER.color() + REPLACE0 + COLOR_SEC.color() + " minutes."),
CMD_NO_RESULTS(CMD_BALL + " No results for " + COLOR_SEC.color() + REPLACE0 + COLOR_MAIN.color() + "."),
CMD_MATCH(COLOR_SEC.color() + " Matching player: " + COLOR_TER.color()),
CMD_MATCH(COLOR_SEC.color() + " Matching players: " + COLOR_TER.color()),
//
CMD_USG_ANALYZE("View the Server Analysis"),
CMD_USG_QANALYZE("View the Server QuickAnalysis"),

View File

@ -21,6 +21,8 @@ package main.java.com.djrapitops.plan;
import com.djrapitops.javaplugin.ColorScheme;
import com.djrapitops.javaplugin.RslPlugin;
import com.djrapitops.javaplugin.task.RslBukkitRunnable;
import com.djrapitops.javaplugin.task.RslTask;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
@ -44,8 +46,6 @@ import main.java.com.djrapitops.plan.utilities.MiscUtils;
import org.bukkit.Bukkit;
import org.bukkit.Server;
import org.bukkit.plugin.PluginManager;
import org.bukkit.scheduler.BukkitRunnable;
import org.bukkit.scheduler.BukkitTask;
/**
* Javaplugin class that contains methods for starting the plugin, logging to
@ -236,7 +236,7 @@ public class Plan extends RslPlugin<Plan> {
}
private void startAnalysisRefreshTask(int analysisRefreshMinutes) throws IllegalStateException, IllegalArgumentException {
BukkitTask asyncPeriodicalAnalysisTask = new BukkitRunnable() {
RslTask task = new RslBukkitRunnable<Plan>("PeriodicalAnalysisTask") {
@Override
public void run() {
if (!analysisCache.isCached()) {
@ -245,19 +245,19 @@ public class Plan extends RslPlugin<Plan> {
analysisCache.updateCache();
}
}
}.runTaskTimerAsynchronously(this, analysisRefreshMinutes * 60 * 20, analysisRefreshMinutes * 60 * 20);
}.runTaskTimerAsynchronously(analysisRefreshMinutes * 60 * 20, analysisRefreshMinutes * 60 * 20);
}
private void startBootAnalysisTask() throws IllegalStateException, IllegalArgumentException {
Log.info(Phrase.ANALYSIS_BOOT_NOTIFY + "");
BukkitTask bootAnalysisTask = new BukkitRunnable() {
RslTask bootAnalysisTask = new RslBukkitRunnable<Plan>("BootAnalysisTask") {
@Override
public void run() {
Log.info(Phrase.ANALYSIS_BOOT + "");
analysisCache.updateCache();
this.cancel();
}
}.runTaskLater(this, 30 * 20);
}.runTaskLaterAsynchronously(30 * 20);
bootAnalysisTaskID = bootAnalysisTask.getTaskId();
}
@ -420,7 +420,7 @@ public class Plan extends RslPlugin<Plan> {
}
return INSTANCE.api;
}
public static Plan getInstance() {
return (Plan) getPluginInstance();
}

View File

@ -13,7 +13,7 @@ import org.bukkit.OfflinePlayer;
* @author Rsl1122
* @since 3.5.0
*/
public class CommandUtils {
public class ConditionUtils {
public static boolean pluginHasViewCapability() {
final boolean usingAlternativeIP = Settings.SHOW_ALTERNATIVE_IP.isTrue();

View File

@ -1,10 +1,10 @@
package main.java.com.djrapitops.plan.command;
import com.djrapitops.javaplugin.command.CommandType;
import com.djrapitops.javaplugin.command.StatusCommand;
import com.djrapitops.javaplugin.command.SubCommand;
import com.djrapitops.javaplugin.command.TreeCommand;
import java.util.ArrayList;
import java.util.List;
import main.java.com.djrapitops.plan.Permissions;
import main.java.com.djrapitops.plan.Plan;
import main.java.com.djrapitops.plan.command.commands.*;
import org.bukkit.command.Command;
@ -35,7 +35,7 @@ public class PlanCommand extends TreeCommand<Plan> implements CommandExecutor {
}, "plan");
super.setDefaultCommand("inspect");
// commands.add(new HelpCommand(plugin, this));
}
@Override
@ -48,5 +48,6 @@ public class PlanCommand extends TreeCommand<Plan> implements CommandExecutor {
commands.add(new InfoCommand(plugin));
commands.add(new ReloadCommand(plugin));
commands.add(new ManageCommand(plugin));
commands.add(new StatusCommand(plugin, Permissions.MANAGE.getPermission()));
}
}

View File

@ -2,12 +2,14 @@ package main.java.com.djrapitops.plan.command.commands;
import com.djrapitops.javaplugin.command.CommandType;
import com.djrapitops.javaplugin.command.SubCommand;
import com.djrapitops.javaplugin.task.RslBukkitRunnable;
import com.djrapitops.javaplugin.task.RslTask;
import main.java.com.djrapitops.plan.Log;
import main.java.com.djrapitops.plan.Permissions;
import main.java.com.djrapitops.plan.Phrase;
import main.java.com.djrapitops.plan.Plan;
import main.java.com.djrapitops.plan.Settings;
import main.java.com.djrapitops.plan.command.CommandUtils;
import main.java.com.djrapitops.plan.command.ConditionUtils;
import main.java.com.djrapitops.plan.data.cache.AnalysisCacheHandler;
import main.java.com.djrapitops.plan.ui.TextUI;
import main.java.com.djrapitops.plan.utilities.HtmlUtils;
@ -16,8 +18,6 @@ import org.bukkit.Bukkit;
import org.bukkit.command.Command;
import org.bukkit.command.CommandSender;
import org.bukkit.entity.Player;
import org.bukkit.scheduler.BukkitRunnable;
import org.bukkit.scheduler.BukkitTask;
/**
* This subcommand is used to run the analysis and access the /server link.
@ -43,7 +43,7 @@ public class AnalyzeCommand extends SubCommand {
@Override
public boolean onCommand(CommandSender sender, Command cmd, String commandLabel, String[] args) {
if (!CommandUtils.pluginHasViewCapability()) {
if (!ConditionUtils.pluginHasViewCapability()) {
sender.sendMessage(Phrase.ERROR_WEBSERVER_OFF_ANALYSIS + "");
return true;
}
@ -55,7 +55,7 @@ public class AnalyzeCommand extends SubCommand {
}
analysisCache.updateCache();
}
final BukkitTask analysisMessageSenderTask = new BukkitRunnable() {
final RslTask task = new RslBukkitRunnable<Plan>("AnalysisMessageSenderTask") {
private int timesrun = 0;
@Override
@ -72,7 +72,7 @@ public class AnalyzeCommand extends SubCommand {
this.cancel();
}
}
}.runTaskTimer(plugin, 1 * 20, 5 * 20);
}.runTaskTimer(1 * 20, 5 * 20);
return true;
}

View File

@ -2,7 +2,9 @@ package main.java.com.djrapitops.plan.command.commands;
import com.djrapitops.javaplugin.command.CommandType;
import com.djrapitops.javaplugin.command.SubCommand;
import main.java.com.djrapitops.plan.command.CommandUtils;
import com.djrapitops.javaplugin.task.RslBukkitRunnable;
import com.djrapitops.javaplugin.task.RslTask;
import main.java.com.djrapitops.plan.command.ConditionUtils;
import java.util.UUID;
import main.java.com.djrapitops.plan.Log;
import main.java.com.djrapitops.plan.Permissions;
@ -19,8 +21,6 @@ import org.bukkit.command.Command;
import org.bukkit.command.CommandException;
import org.bukkit.command.CommandSender;
import org.bukkit.entity.Player;
import org.bukkit.scheduler.BukkitRunnable;
import org.bukkit.scheduler.BukkitTask;
/**
* This command is used to cache UserData to InspectCache and display the link.
@ -47,18 +47,18 @@ public class InspectCommand extends SubCommand {
@Override
public boolean onCommand(CommandSender sender, Command cmd, String commandLabel, String[] args) {
if (!CommandUtils.pluginHasViewCapability()) {
if (!ConditionUtils.pluginHasViewCapability()) {
sender.sendMessage(Phrase.ERROR_WEBSERVER_OFF_INSPECT + "");
return true;
}
String playerName = MiscUtils.getPlayerName(args, sender);
final BukkitTask inspectTask = new BukkitRunnable() {
final RslTask inspectTask = new RslBukkitRunnable<Plan>("InspectTask") {
@Override
public void run() {
UUID uuid = CommandUtils.getUUID(playerName);
UUID uuid = ConditionUtils.getUUID(playerName);
Condition[] preConditions = new Condition[]{
new Condition(CommandUtils.uuidIsValid(uuid), Phrase.USERNAME_NOT_VALID.toString()),
new Condition(CommandUtils.playerHasPlayed(uuid), Phrase.USERNAME_NOT_SEEN.toString()),
new Condition(ConditionUtils.uuidIsValid(uuid), Phrase.USERNAME_NOT_VALID.toString()),
new Condition(ConditionUtils.playerHasPlayed(uuid), Phrase.USERNAME_NOT_SEEN.toString()),
new Condition(plugin.getDB().wasSeenBefore(uuid), Phrase.USERNAME_NOT_KNOWN.toString())
};
@ -71,7 +71,7 @@ public class InspectCommand extends SubCommand {
}
sender.sendMessage(Phrase.GRABBING_DATA_MESSAGE + "");
inspectCache.cache(uuid);
final BukkitTask inspectMessageSenderTask = new BukkitRunnable() {
final RslTask inspectMessageSenderTask = new RslBukkitRunnable<Plan>("InspectMessageSenderTask") {
private int timesrun = 0;
@Override
@ -89,9 +89,10 @@ public class InspectCommand extends SubCommand {
}
}
}.runTaskTimer(plugin, 1 * 20, 5 * 20);
}
}.runTaskAsynchronously(plugin);
}.runTaskTimer(1 * 20, 5 * 20);
this.cancel();
}
}.runTaskAsynchronously();
return true;
}

View File

@ -2,6 +2,8 @@ package main.java.com.djrapitops.plan.command.commands;
import com.djrapitops.javaplugin.command.CommandType;
import com.djrapitops.javaplugin.command.SubCommand;
import com.djrapitops.javaplugin.task.RslBukkitRunnable;
import com.djrapitops.javaplugin.task.RslTask;
import main.java.com.djrapitops.plan.Log;
import main.java.com.djrapitops.plan.Permissions;
import main.java.com.djrapitops.plan.Phrase;
@ -11,8 +13,6 @@ import main.java.com.djrapitops.plan.ui.TextUI;
import main.java.com.djrapitops.plan.utilities.MiscUtils;
import org.bukkit.command.Command;
import org.bukkit.command.CommandSender;
import org.bukkit.scheduler.BukkitRunnable;
import org.bukkit.scheduler.BukkitTask;
/**
* This subcommand is used to run the analysis and to view some of the data in
@ -50,7 +50,7 @@ public class QuickAnalyzeCommand extends SubCommand {
analysisCache.updateCache();
}
BukkitTask analysisMessageSenderTask = new BukkitRunnable() {
RslTask analysisMessageSenderTask = new RslBukkitRunnable<Plan>("QanalysisMessageSenderTask") {
private int timesrun = 0;
@Override
@ -68,7 +68,7 @@ public class QuickAnalyzeCommand extends SubCommand {
this.cancel();
}
}
}.runTaskTimer(plugin, 1 * 20, 5 * 20);
}.runTaskTimer(1 * 20, 5 * 20);
return true;
}
}

View File

@ -2,20 +2,20 @@ package main.java.com.djrapitops.plan.command.commands;
import com.djrapitops.javaplugin.command.CommandType;
import com.djrapitops.javaplugin.command.SubCommand;
import com.djrapitops.javaplugin.task.RslBukkitRunnable;
import com.djrapitops.javaplugin.task.RslTask;
import java.util.UUID;
import main.java.com.djrapitops.plan.Log;
import main.java.com.djrapitops.plan.Permissions;
import main.java.com.djrapitops.plan.Phrase;
import main.java.com.djrapitops.plan.Plan;
import main.java.com.djrapitops.plan.command.CommandUtils;
import main.java.com.djrapitops.plan.command.ConditionUtils;
import main.java.com.djrapitops.plan.command.Condition;
import main.java.com.djrapitops.plan.data.cache.InspectCacheHandler;
import main.java.com.djrapitops.plan.ui.TextUI;
import main.java.com.djrapitops.plan.utilities.MiscUtils;
import org.bukkit.command.Command;
import org.bukkit.command.CommandSender;
import org.bukkit.scheduler.BukkitRunnable;
import org.bukkit.scheduler.BukkitTask;
/**
* This command is used to cache UserData to InspectCache and to view some of
@ -35,7 +35,7 @@ public class QuickInspectCommand extends SubCommand {
* @param plugin Current instance of Plan
*/
public QuickInspectCommand(Plan plugin) {
super("qinspect", CommandType.CONSOLE_WITH_ARGUMENTS, Permissions.QUICK_INSPECT.getPermission(), Phrase.CMD_USG_QINSPECT + "", Phrase.ARG_PLAYER + "");
super("qinspect", CommandType.CONSOLE_WITH_ARGUMENTS, Permissions.QUICK_INSPECT.getPermission(), Phrase.CMD_USG_QINSPECT + "", Phrase.ARG_PLAYER + "");
this.plugin = plugin;
inspectCache = plugin.getInspectCache();
@ -44,13 +44,13 @@ public class QuickInspectCommand extends SubCommand {
@Override
public boolean onCommand(CommandSender sender, Command cmd, String commandLabel, String[] args) {
String playerName = MiscUtils.getPlayerName(args, sender, Permissions.QUICK_INSPECT_OTHER);
final BukkitTask inspectTask = new BukkitRunnable() {
final RslTask inspectTask = new RslBukkitRunnable<Plan>("QinspectTask") {
@Override
public void run() {
UUID uuid = CommandUtils.getUUID(playerName);
UUID uuid = ConditionUtils.getUUID(playerName);
Condition[] preConditions = new Condition[]{
new Condition(CommandUtils.uuidIsValid(uuid), Phrase.USERNAME_NOT_VALID.toString()),
new Condition(CommandUtils.playerHasPlayed(uuid), Phrase.USERNAME_NOT_SEEN.toString()),
new Condition(ConditionUtils.uuidIsValid(uuid), Phrase.USERNAME_NOT_VALID.toString()),
new Condition(ConditionUtils.playerHasPlayed(uuid), Phrase.USERNAME_NOT_SEEN.toString()),
new Condition(plugin.getDB().wasSeenBefore(uuid), Phrase.USERNAME_NOT_KNOWN.toString())
};
@ -63,7 +63,7 @@ public class QuickInspectCommand extends SubCommand {
}
sender.sendMessage(Phrase.GRABBING_DATA_MESSAGE + "");
inspectCache.cache(uuid);
final BukkitTask inspectMessageSenderTask = new BukkitRunnable() {
final RslTask inspectMessageSenderTask = new RslBukkitRunnable<Plan>("QinspectMessageSenderTask") {
private int timesrun = 0;
@Override
@ -81,9 +81,10 @@ public class QuickInspectCommand extends SubCommand {
this.cancel();
}
}
}.runTaskTimer(plugin, 1 * 20, 5 * 20);
}.runTaskTimer(1 * 20, 5 * 20);
this.cancel();
}
}.runTaskAsynchronously(plugin);
}.runTaskAsynchronously();
return true;
}
}

View File

@ -2,25 +2,23 @@ package main.java.com.djrapitops.plan.command.commands;
import com.djrapitops.javaplugin.command.CommandType;
import com.djrapitops.javaplugin.command.SubCommand;
import com.djrapitops.javaplugin.task.RslBukkitRunnable;
import com.djrapitops.javaplugin.task.RslTask;
import com.djrapitops.javaplugin.utilities.FormattingUtils;
import java.util.Arrays;
import java.util.HashSet;
import java.util.Collections;
import java.util.List;
import java.util.Set;
import java.util.UUID;
import java.util.stream.Collectors;
import main.java.com.djrapitops.plan.Permissions;
import main.java.com.djrapitops.plan.Phrase;
import main.java.com.djrapitops.plan.Plan;
import main.java.com.djrapitops.plan.command.CommandUtils;
import main.java.com.djrapitops.plan.command.Condition;
import main.java.com.djrapitops.plan.data.cache.InspectCacheHandler;
import main.java.com.djrapitops.plan.utilities.HtmlUtils;
import main.java.com.djrapitops.plan.utilities.MiscUtils;
import org.bukkit.Bukkit;
import org.bukkit.OfflinePlayer;
import org.bukkit.command.Command;
import org.bukkit.command.CommandSender;
import org.bukkit.entity.Player;
import org.bukkit.scheduler.BukkitRunnable;
import org.bukkit.scheduler.BukkitTask;
/**
* This subcommand is used to search for a user, and to view all matches' data.
@ -46,65 +44,32 @@ public class SearchCommand extends SubCommand {
@Override
public boolean onCommand(CommandSender sender, Command cmd, String commandLabel, String[] args) {
if (!CommandUtils.pluginHasViewCapability()) {
sender.sendMessage(Phrase.ERROR_WEBSERVER_OFF_ANALYSIS.toString());
return true;
}
Condition c = new Condition(args.length != 1, Phrase.COMMAND_REQUIRES_ARGUMENTS_ONE.toString());
if (c.pass()) {
sender.sendMessage(c.getFailMsg());
return true;
}
sender.sendMessage(Phrase.GRABBING_DATA_MESSAGE + "");
Set<OfflinePlayer> matches = MiscUtils.getMatchingDisplaynames(args[0]);
final BukkitTask searchTask = new BukkitRunnable() {
sender.sendMessage(Phrase.CMD_SEARCH_SEARCHING + "");
final RslTask searchTask = new RslBukkitRunnable<Plan>("SearchTask: " + Arrays.toString(args)) {
@Override
public void run() {
Set<UUID> uuids = new HashSet<>();
for (OfflinePlayer match : matches) {
UUID uuid = match.getUniqueId();
if (plugin.getDB().wasSeenBefore(uuid)) {
uuids.add(uuid);
inspectCache.cache(uuid);
try {
Set<OfflinePlayer> matches = MiscUtils.getMatchingDisplaynames(args[0]);
sender.sendMessage(Phrase.CMD_SEARCH_HEADER + args[0] + " (" + matches.size() + ")");
// Results
if (matches.isEmpty()) {
sender.sendMessage(Phrase.CMD_NO_RESULTS.parse(Arrays.toString(args)));
} else {
List<String> names = matches.stream().map(p -> p.getName()).collect(Collectors.toList());
Collections.sort(names);
sender.sendMessage(Phrase.CMD_MATCH + "" + FormattingUtils.collectionToStringNoBrackets(names));
}
sender.sendMessage(Phrase.CMD_FOOTER + "");
} finally {
this.cancel();
}
sender.sendMessage(Phrase.CMD_SEARCH_HEADER + args[0]);
// Results
if (uuids.isEmpty()) {
sender.sendMessage(Phrase.CMD_NO_RESULTS.parse(Arrays.toString(args)));
} else {
for (OfflinePlayer match : matches) {
if (!uuids.contains(match.getUniqueId())) {
continue;
}
String name = match.getName();
sender.sendMessage(Phrase.CMD_MATCH + name);
// Link
String url = HtmlUtils.getInspectUrlWithProtocol(name);
String message = Phrase.CMD_LINK + "";
boolean console = !(sender instanceof Player);
if (console) {
sender.sendMessage(message + url);
} else {
sender.sendMessage(message);
Player player = (Player) sender;
final BukkitTask link = new BukkitRunnable() {
@Override
public void run() {
Bukkit.getServer().dispatchCommand(
Bukkit.getConsoleSender(),
"tellraw " + player.getName() + " [\"\",{\"text\":\"Click Me\",\"underlined\":true,"
+ "\"clickEvent\":{\"action\":\"open_url\",\"value\":\"" + url + "\"}}]");
}
}.runTask(plugin);
}
}
}
sender.sendMessage(Phrase.CMD_FOOTER + "");
}
}.runTaskAsynchronously(plugin);
}.runTaskAsynchronously();
return true;
}
}

View File

@ -2,6 +2,7 @@ package main.java.com.djrapitops.plan.command.commands.manage;
import com.djrapitops.javaplugin.command.CommandType;
import com.djrapitops.javaplugin.command.SubCommand;
import com.djrapitops.javaplugin.task.RslBukkitRunnable;
import main.java.com.djrapitops.plan.Log;
import main.java.com.djrapitops.plan.Permissions;
import main.java.com.djrapitops.plan.Phrase;
@ -10,7 +11,6 @@ import main.java.com.djrapitops.plan.database.Database;
import main.java.com.djrapitops.plan.utilities.ManageUtils;
import org.bukkit.command.Command;
import org.bukkit.command.CommandSender;
import org.bukkit.scheduler.BukkitRunnable;
/**
* This manage subcommand is used to backup a database to a .db file.
@ -61,7 +61,7 @@ public class ManageBackupCommand extends SubCommand {
return true;
}
final Database copyFromDB = database;
(new BukkitRunnable() {
(new RslBukkitRunnable<Plan>("BackupTask") {
@Override
public void run() {
sender.sendMessage(Phrase.MANAGE_PROCESS_START.parse());
@ -72,7 +72,7 @@ public class ManageBackupCommand extends SubCommand {
}
this.cancel();
}
}).runTaskAsynchronously(plugin);
}).runTaskAsynchronously();
} catch (NullPointerException e) {
sender.sendMessage(Phrase.MANAGE_DATABASE_FAILURE + "");
}

View File

@ -2,8 +2,7 @@ package main.java.com.djrapitops.plan.command.commands.manage;
import com.djrapitops.javaplugin.command.CommandType;
import com.djrapitops.javaplugin.command.SubCommand;
import java.sql.SQLException;
import java.util.Arrays;
import com.djrapitops.javaplugin.task.RslBukkitRunnable;
import main.java.com.djrapitops.plan.Log;
import main.java.com.djrapitops.plan.Permissions;
import main.java.com.djrapitops.plan.Phrase;
@ -11,7 +10,6 @@ import main.java.com.djrapitops.plan.Plan;
import main.java.com.djrapitops.plan.database.Database;
import org.bukkit.command.Command;
import org.bukkit.command.CommandSender;
import org.bukkit.scheduler.BukkitRunnable;
/**
* This manage subcommand is used to clear a database of all data.
@ -60,7 +58,7 @@ public class ManageCleanCommand extends SubCommand {
}
final Database clearThisDB = clearDB;
(new BukkitRunnable() {
(new RslBukkitRunnable<Plan>("DBCleanTask") {
@Override
public void run() {
sender.sendMessage(Phrase.MANAGE_PROCESS_START.parse());
@ -68,7 +66,7 @@ public class ManageCleanCommand extends SubCommand {
sender.sendMessage(Phrase.MANAGE_SUCCESS + "");
this.cancel();
}
}).runTaskAsynchronously(plugin);
}).runTaskAsynchronously();
return true;
}
}

View File

@ -2,6 +2,7 @@ package main.java.com.djrapitops.plan.command.commands.manage;
import com.djrapitops.javaplugin.command.CommandType;
import com.djrapitops.javaplugin.command.SubCommand;
import com.djrapitops.javaplugin.task.RslBukkitRunnable;
import java.sql.SQLException;
import java.util.Arrays;
import main.java.com.djrapitops.plan.Log;
@ -11,7 +12,6 @@ import main.java.com.djrapitops.plan.Plan;
import main.java.com.djrapitops.plan.database.Database;
import org.bukkit.command.Command;
import org.bukkit.command.CommandSender;
import org.bukkit.scheduler.BukkitRunnable;
/**
* This manage subcommand is used to clear a database of all data.
@ -64,7 +64,7 @@ public class ManageClearCommand extends SubCommand {
}
final Database clearThisDB = clearDB;
(new BukkitRunnable() {
(new RslBukkitRunnable<Plan>("DBClearTask") {
@Override
public void run() {
sender.sendMessage(Phrase.MANAGE_PROCESS_START.parse());
@ -80,7 +80,7 @@ public class ManageClearCommand extends SubCommand {
}
this.cancel();
}
}).runTaskAsynchronously(plugin);
}).runTaskAsynchronously();
return true;
}
}

View File

@ -2,6 +2,8 @@ package main.java.com.djrapitops.plan.command.commands.manage;
import com.djrapitops.javaplugin.command.CommandType;
import com.djrapitops.javaplugin.command.SubCommand;
import com.djrapitops.javaplugin.task.RslBukkitRunnable;
import com.djrapitops.javaplugin.task.RslTask;
import java.util.Arrays;
import java.util.List;
import java.util.Map;
@ -15,8 +17,6 @@ import main.java.com.djrapitops.plan.data.handling.importing.Importer;
import static org.bukkit.Bukkit.getOfflinePlayers;
import org.bukkit.command.Command;
import org.bukkit.command.CommandSender;
import org.bukkit.scheduler.BukkitRunnable;
import org.bukkit.scheduler.BukkitTask;
/**
* This manage subcommand is used to import data from 3rd party plugins.
@ -66,7 +66,7 @@ public class ManageImportCommand extends SubCommand {
}
final Importer importer = importPlugins.get(importFromPlugin);
BukkitTask asyncImportTask = new BukkitRunnable() {
RslTask asyncImportTask = new RslBukkitRunnable<Plan>("ImportTask") {
@Override
public void run() {
sender.sendMessage(Phrase.MANAGE_IMPORTING + "");
@ -78,7 +78,7 @@ public class ManageImportCommand extends SubCommand {
}
this.cancel();
}
}.runTaskAsynchronously(plugin);
}.runTaskAsynchronously();
return true;
}
}

View File

@ -2,6 +2,7 @@ package main.java.com.djrapitops.plan.command.commands.manage;
import com.djrapitops.javaplugin.command.CommandType;
import com.djrapitops.javaplugin.command.SubCommand;
import com.djrapitops.javaplugin.task.RslBukkitRunnable;
import java.util.Arrays;
import java.util.Collection;
import java.util.UUID;
@ -13,7 +14,6 @@ import main.java.com.djrapitops.plan.database.Database;
import main.java.com.djrapitops.plan.utilities.ManageUtils;
import org.bukkit.command.Command;
import org.bukkit.command.CommandSender;
import org.bukkit.scheduler.BukkitRunnable;
/**
* This manage subcommand is used to move all data from one database to another.
@ -88,7 +88,7 @@ public class ManageMoveCommand extends SubCommand {
final Database moveFromDB = fromDatabase;
final Database moveToDB = toDatabase;
(new BukkitRunnable() {
(new RslBukkitRunnable<Plan>("DBMoveTask") {
@Override
public void run() {
final Collection<UUID> uuids = ManageUtils.getUUIDS(moveFromDB);
@ -108,7 +108,7 @@ public class ManageMoveCommand extends SubCommand {
}
this.cancel();
}
}).runTaskAsynchronously(plugin);
}).runTaskAsynchronously();
return true;
}

View File

@ -2,6 +2,7 @@ package main.java.com.djrapitops.plan.command.commands.manage;
import com.djrapitops.javaplugin.command.CommandType;
import com.djrapitops.javaplugin.command.SubCommand;
import com.djrapitops.javaplugin.task.RslBukkitRunnable;
import java.sql.SQLException;
import java.util.Arrays;
import java.util.UUID;
@ -13,7 +14,6 @@ import main.java.com.djrapitops.plan.utilities.MiscUtils;
import main.java.com.djrapitops.plan.utilities.uuid.UUIDUtility;
import org.bukkit.command.Command;
import org.bukkit.command.CommandSender;
import org.bukkit.scheduler.BukkitRunnable;
/**
* This manage subcommand is used to remove a single player's data from the
@ -45,7 +45,7 @@ public class ManageRemoveCommand extends SubCommand {
String playerName = MiscUtils.getPlayerName(args, sender, Permissions.MANAGE);
(new BukkitRunnable() {
(new RslBukkitRunnable<Plan>("DBRemoveTask "+playerName) {
@Override
public void run() {
UUID uuid;

View File

@ -2,6 +2,8 @@ package main.java.com.djrapitops.plan.command.commands.manage;
import com.djrapitops.javaplugin.command.CommandType;
import com.djrapitops.javaplugin.command.SubCommand;
import com.djrapitops.javaplugin.task.RslBukkitRunnable;
import com.djrapitops.javaplugin.task.RslTask;
import java.io.File;
import java.util.Arrays;
import java.util.Collection;
@ -15,8 +17,6 @@ import main.java.com.djrapitops.plan.database.databases.SQLiteDB;
import main.java.com.djrapitops.plan.utilities.ManageUtils;
import org.bukkit.command.Command;
import org.bukkit.command.CommandSender;
import org.bukkit.scheduler.BukkitRunnable;
import org.bukkit.scheduler.BukkitTask;
/**
* This manage subcommand is used to restore a backup.db file in the
@ -71,7 +71,7 @@ public class ManageRestoreCommand extends SubCommand {
return true;
}
final Database copyToDB = database;
BukkitTask asyncRestoreTask = new BukkitRunnable() {
RslTask asyncRestoreTask = new RslBukkitRunnable<Plan>("RestoreTask") {
@Override
public void run() {
String backupDBName = args[0];
@ -108,7 +108,7 @@ public class ManageRestoreCommand extends SubCommand {
}
this.cancel();
}
}.runTaskAsynchronously(plugin);
}.runTaskAsynchronously();
} catch (NullPointerException e) {
sender.sendMessage(Phrase.MANAGE_DATABASE_FAILURE + "");
}

View File

@ -1,5 +1,7 @@
package main.java.com.djrapitops.plan.data.cache;
import com.djrapitops.javaplugin.task.RslBukkitRunnable;
import com.djrapitops.javaplugin.task.RslTask;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.Collection;
@ -28,8 +30,6 @@ import main.java.com.djrapitops.plan.utilities.comparators.HandlingInfoTimeCompa
import org.bukkit.Bukkit;
import org.bukkit.OfflinePlayer;
import org.bukkit.entity.Player;
import org.bukkit.scheduler.BukkitRunnable;
import org.bukkit.scheduler.BukkitTask;
import static org.bukkit.Bukkit.getOfflinePlayer;
/**
@ -136,7 +136,7 @@ public class DataCacheHandler extends LocationCache {
} else {
clearAfterXsaves = configValue;
}
BukkitTask asyncPeriodicCacheSaveTask = new BukkitRunnable() {
RslTask asyncPeriodicCacheSaveTask = new RslBukkitRunnable<Plan>("PeriodicCacheSaveTask") {
@Override
public void run() {
DataCacheHandler handler = Plan.getInstance().getHandler();
@ -148,7 +148,7 @@ public class DataCacheHandler extends LocationCache {
saveCommandUse();
timesSaved++;
}
}.runTaskTimerAsynchronously(plugin, 60 * 20 * minutes, 60 * 20 * minutes);
}.runTaskTimerAsynchronously(60 * 20 * minutes, 60 * 20 * minutes);
}
/**
@ -359,7 +359,7 @@ public class DataCacheHandler extends LocationCache {
if (data != null) {
info.process(data);
return;
}
}
}
addToPool(info);
}
@ -470,7 +470,7 @@ public class DataCacheHandler extends LocationCache {
* Calls all the methods that are ran when PlayerJoinEvent is fired
*/
public void handleReload() {
BukkitTask asyncReloadCacheUpdateTask = (new BukkitRunnable() {
RslTask asyncReloadCacheUpdateTask = (new RslBukkitRunnable<Plan>("ReloadCacheUpdateTask") {
@Override
public void run() {
for (Player player : Bukkit.getOnlinePlayers()) {
@ -484,7 +484,7 @@ public class DataCacheHandler extends LocationCache {
}
this.cancel();
}
}).runTaskAsynchronously(plugin);
}).runTaskAsynchronously();
}
/**

View File

@ -1,6 +1,8 @@
package main.java.com.djrapitops.plan.data.cache.queue;
import com.djrapitops.javaplugin.task.RslBukkitRunnable;
import java.util.concurrent.BlockingQueue;
import main.java.com.djrapitops.plan.Plan;
/**
* Abstract class representing a queue consumer.
@ -8,7 +10,7 @@ import java.util.concurrent.BlockingQueue;
* @author Rsl1122
* @param <T>
*/
public abstract class Consumer<T> implements Runnable {
public abstract class Consumer<T> extends RslBukkitRunnable<Plan> {
boolean run;
final BlockingQueue<T> queue;
@ -17,8 +19,10 @@ public abstract class Consumer<T> implements Runnable {
* Constructor, defines queue.
*
* @param queue Queue to consume from.
* @param name Name of the queue.
*/
public Consumer(BlockingQueue<T> queue) {
public Consumer(BlockingQueue<T> queue, String name) {
super(name);
this.queue = queue;
run = true;
}
@ -35,6 +39,7 @@ public abstract class Consumer<T> implements Runnable {
void stop() {
run = false;
super.cancel();
}
abstract void clearVariables();

View File

@ -63,7 +63,7 @@ class ClearConsumer extends Consumer<UUID> implements Runnable {
private DataCacheHandler handler;
ClearConsumer(BlockingQueue q, DataCacheHandler handler) {
super(q);
super(q, "ClearQueueConsumer");
this.handler = handler;
}

View File

@ -62,7 +62,7 @@ class GetConsumer extends Consumer<Map<UUID, List<DBCallableProcessor>>> {
private Database db;
GetConsumer(BlockingQueue q, Database db) {
super(q);
super(q, "GetQueueConsumer");
this.db = db;
}

View File

@ -75,7 +75,7 @@ class ProcessConsumer extends Consumer<HandlingInfo> {
private DataCacheHandler handler;
ProcessConsumer(BlockingQueue q, DataCacheHandler h) {
super(q);
super(q, "ProcessQueueConsumer");
handler = h;
}

View File

@ -94,7 +94,7 @@ class SaveConsumer extends Consumer<UserData> {
private DataCacheClearQueue clear;
SaveConsumer(BlockingQueue q, DataCacheClearQueue clear, Database db) {
super(q);
super(q, "SaveQueueConsumer");
this.db = db;
this.clear = clear;
run = true;

View File

@ -1,5 +1,8 @@
package main.java.com.djrapitops.plan.data.cache.queue;
import com.djrapitops.javaplugin.task.RslBukkitRunnable;
import main.java.com.djrapitops.plan.Plan;
/**
* Abstract representation of a queue setup.
*
@ -21,7 +24,7 @@ public abstract class Setup<T> {
void go() {
for (Consumer<T> consumer : consumers) {
new Thread(consumer).start();
consumer.runTaskAsynchronously();
}
}

View File

@ -1,5 +1,7 @@
package main.java.com.djrapitops.plan.data.listeners;
import com.djrapitops.javaplugin.task.RslBukkitRunnable;
import com.djrapitops.javaplugin.task.RslTask;
import java.util.UUID;
import main.java.com.djrapitops.plan.Log;
import main.java.com.djrapitops.plan.Plan;
@ -17,8 +19,6 @@ import org.bukkit.event.Listener;
import org.bukkit.event.player.PlayerJoinEvent;
import org.bukkit.event.player.PlayerKickEvent;
import org.bukkit.event.player.PlayerQuitEvent;
import org.bukkit.scheduler.BukkitRunnable;
import org.bukkit.scheduler.BukkitTask;
/**
* Event Listener for PlayerJoin, PlayerQuit and PlayerKickEvents.
@ -57,7 +57,7 @@ public class PlanPlayerListener implements Listener {
UUID uuid = player.getUniqueId();
handler.startSession(uuid);
Log.debug(uuid + ": PlayerJoinEvent");
BukkitTask asyncNewPlayerCheckTask = new BukkitRunnable() {
RslTask asyncNewPlayerCheckTask = new RslBukkitRunnable<Plan>("NewPlayerCheckTask") {
@Override
public void run() {
LoginInfo loginInfo = new LoginInfo(uuid, MiscUtils.getTime(), player.getAddress().getAddress(), player.isBanned(), player.getDisplayName(), player.getGameMode(), 1);
@ -72,7 +72,7 @@ public class PlanPlayerListener implements Listener {
Log.debug(uuid + ": PlayerJoinEvent_AsyncTask_END, New:" + isNewPlayer);
this.cancel();
}
}.runTaskAsynchronously(plugin);
}.runTaskAsynchronously();
Log.debug(uuid + ": PlayerJoinEvent_END");
}

View File

@ -1,5 +1,6 @@
package main.java.com.djrapitops.plan.database.databases;
import com.djrapitops.javaplugin.task.RslBukkitRunnable;
import java.net.InetAddress;
import java.sql.Connection;
import java.sql.SQLException;
@ -7,7 +8,6 @@ import java.util.ArrayList;
import java.util.Collection;
import java.util.HashMap;
import java.util.HashSet;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import java.util.Set;
@ -22,11 +22,8 @@ import main.java.com.djrapitops.plan.database.Database;
import main.java.com.djrapitops.plan.database.tables.*;
import main.java.com.djrapitops.plan.utilities.Benchmark;
import main.java.com.djrapitops.plan.utilities.FormatUtils;
import main.java.com.djrapitops.plan.utilities.ManageUtils;
import main.java.com.djrapitops.plan.utilities.analysis.MathUtils;
import org.bukkit.GameMode;
import org.bukkit.Location;
import org.bukkit.scheduler.BukkitRunnable;
/**
*
@ -69,7 +66,7 @@ public abstract class SQLDB extends Database {
*/
public void startConnectionPingTask(Plan plugin) throws IllegalArgumentException, IllegalStateException {
// Maintains Connection.
new BukkitRunnable() {
new RslBukkitRunnable<Plan>("DBConnectionPingTask "+getName()) {
@Override
public void run() {
try {
@ -80,7 +77,7 @@ public abstract class SQLDB extends Database {
connection = getNewConnection();
}
}
}.runTaskTimerAsynchronously(plugin, 60 * 20, 60 * 20);
}.runTaskTimerAsynchronously(60 * 20, 60 * 20);
}
/**
@ -150,7 +147,7 @@ public abstract class SQLDB extends Database {
*
*/
public void convertBukkitDataToDB() {
new BukkitRunnable() {
new RslBukkitRunnable<Plan>("BukkitDataConversionTask") {
@Override
public void run() {
try {
@ -171,9 +168,11 @@ public abstract class SQLDB extends Database {
Log.info("Conversion complete, took: " + FormatUtils.formatTimeAmount(Benchmark.stop("Convert Bukkitdata to DB data")) + " ms");
} catch (SQLException ex) {
Log.toLog(this.getClass().getName(), ex);
} finally {
this.cancel();
}
}
}.runTaskAsynchronously(plugin);
}.runTaskAsynchronously();
}
/**

View File

@ -1,5 +1,6 @@
package main.java.com.djrapitops.plan.ui.webserver;
import com.djrapitops.javaplugin.task.RslBukkitRunnable;
import java.io.Closeable;
import java.io.IOException;
import java.io.InputStream;
@ -12,7 +13,6 @@ import main.java.com.djrapitops.plan.Phrase;
import main.java.com.djrapitops.plan.Plan;
import main.java.com.djrapitops.plan.Settings;
import main.java.com.djrapitops.plan.ui.DataRequestHandler;
import org.bukkit.scheduler.BukkitRunnable;
/**
*
@ -60,7 +60,7 @@ public class WebSocketServer {
System.exit(1);
}
//Run server in seperate thread
(new BukkitRunnable() {
(new RslBukkitRunnable<Plan>("WebServerTask") {
@Override
public void run() {
while (!shutdown) {
@ -92,7 +92,7 @@ public class WebSocketServer {
}
this.cancel();
}
}).runTaskAsynchronously(plugin);
}).runTaskAsynchronously();
ENABLED = true;

View File

@ -81,7 +81,7 @@ public class MiscUtils {
List<OfflinePlayer> players = new ArrayList<>();
players.addAll(Arrays.asList(Bukkit.getOfflinePlayers()));
Set<OfflinePlayer> matches = new HashSet<>();
players.parallelStream()
players.stream()
.filter(player -> (player.getName().toLowerCase().contains(search.toLowerCase())))
.forEach(player -> {
matches.add(player);

View File

@ -1,5 +1,7 @@
package main.java.com.djrapitops.plan.utilities.analysis;
import com.djrapitops.javaplugin.task.RslBukkitRunnable;
import com.djrapitops.javaplugin.task.RslTask;
import main.java.com.djrapitops.plan.data.additional.HookHandler;
import java.util.Date;
import java.util.HashMap;
@ -34,8 +36,6 @@ import main.java.com.djrapitops.plan.utilities.Benchmark;
import main.java.com.djrapitops.plan.utilities.HtmlUtils;
import main.java.com.djrapitops.plan.utilities.MiscUtils;
import org.bukkit.GameMode;
import org.bukkit.scheduler.BukkitRunnable;
import org.bukkit.scheduler.BukkitTask;
/**
*
@ -70,10 +70,10 @@ public class Analysis {
if (isAnalysisBeingRun()) {
return;
}
Benchmark.start("Analysis");
plugin.processStatus().startExecution("Analysis");
log(Phrase.ANALYSIS_START + "");
// Async task for Analysis
BukkitTask asyncAnalysisTask = (new BukkitRunnable() {
RslTask asyncAnalysisTask = (new RslBukkitRunnable<Plan>("AnalysisTask") {
@Override
public void run() {
taskId = this.getTaskId();
@ -81,7 +81,7 @@ public class Analysis {
taskId = -1;
this.cancel();
}
}).runTaskAsynchronously(plugin);
}).runTaskAsynchronously();
}
/**
@ -95,6 +95,7 @@ public class Analysis {
public boolean analyze(AnalysisCacheHandler analysisCache, Database db) {
log(Phrase.ANALYSIS_FETCH_DATA + "");
Benchmark.start("Analysis Fetch Phase");
plugin.processStatus().setStatus("Analysis", "Analysis Fetch Phase");
try {
inspectCache.cacheAllUserData(db);
} catch (Exception ex) {
@ -106,7 +107,6 @@ public class Analysis {
Log.info(Phrase.ANALYSIS_FAIL_NO_DATA + "");
return false;
}
;
return analyzeData(rawData, analysisCache);
}
@ -117,64 +117,71 @@ public class Analysis {
* @return
*/
public boolean analyzeData(List<UserData> rawData, AnalysisCacheHandler analysisCache) {
Benchmark.start("Analysis Phase");
Benchmark.start("Analysis UUID transform");
List<UUID> uuids = rawData.stream().map(d -> d.getUuid()).collect(Collectors.toList());
Benchmark.stop("Analysis UUID transform");
Benchmark.start("Analysis Create Empty dataset");
DataCacheHandler handler = plugin.getHandler();
Map<UUID, SessionData> activeSessions = handler.getActiveSessions();
long now = MiscUtils.getTime();
rawData.stream().forEach((data) -> {
SessionData session = activeSessions.get(data.getUuid());
List<SessionData> sessions = data.getSessions();
if (session != null && !sessions.contains(session)) {
sessions.add(session);
try {
plugin.processStatus().setStatus("Analysis", "Analysis Phase");
Benchmark.start("Analysis Phase");
Benchmark.start("Analysis UUID transform");
List<UUID> uuids = rawData.stream().map(d -> d.getUuid()).collect(Collectors.toList());
Benchmark.stop("Analysis UUID transform");
Benchmark.start("Analysis Create Empty dataset");
DataCacheHandler handler = plugin.getHandler();
Map<UUID, SessionData> activeSessions = handler.getActiveSessions();
long now = MiscUtils.getTime();
rawData.stream().forEach((data) -> {
SessionData session = activeSessions.get(data.getUuid());
List<SessionData> sessions = data.getSessions();
if (session != null && !sessions.contains(session)) {
sessions.add(session);
}
});
Map<String, Integer> commandUse = handler.getCommandUse();
AnalysisData analysisData = new AnalysisData();
Benchmark.stop("Analysis Create Empty dataset");
log(Phrase.ANALYSIS_BEGIN_ANALYSIS.parse(rawData.size() + "", Benchmark.stop("Analysis Fetch Phase") + ""));
String playersTable = SortablePlayersTableCreator.createSortablePlayersTable(rawData);
analysisData.setSortablePlayersTable(playersTable);
RawAnalysisData sorted = fillDataset(commandUse, rawData, now);
// Analyze & Save RawAnalysisData to AnalysisData
createCloroplethMap(analysisData, sorted.getGeolocations(), sorted.getGeocodes());
createPlayerActivityGraphs(analysisData, sorted.getSessiondata(), sorted.getRegistered(), sorted.getSortedSessionData());
analysisData.setRecentPlayers(RecentPlayersButtonsCreator.createRecentLoginsButtons(sorted.getLatestLogins(), 20));
long totalPlaytime = sorted.getTotalPlaytime();
analysisData.setTotalPlayTime(totalPlaytime);
analysisData.setAveragePlayTime(totalPlaytime / rawData.size());
analysisData.setSessionAverage(MathUtils.averageLong(AnalysisUtils.transformSessionDataToLengths(sorted.getSessiondata())));
analysisData.setTotalLoginTimes(sorted.getTotalLoginTimes());
createActivityVisalization(uuids.size(), sorted.getTotalBanned(), sorted.getActive(), sorted.getInactive(), sorted.getJoinleaver(), analysisData);
analysisData.setOps(sorted.getOps());
analyzeAverageAge(sorted.getAges(), analysisData);
createGamemodeUsageVisualization(sorted.getGmZero(), sorted.getGmOne(), sorted.getGmTwo(), sorted.getGmThree(), analysisData);
createCommandUseTable(sorted, analysisData);
analysisData.setTotaldeaths(sorted.getTotalDeaths());
analysisData.setTotalkills(sorted.getTotalKills());
analysisData.setTotalmobkills(sorted.getTotalMobKills());
analysisData.setRefreshDate(now);
analysisData.setPunchCardData(PunchCardGraphCreator.generateDataArray(sorted.getSessiondata()));
analysisData.setSessionDistributionData(SessionLengthDistributionGraphCreator.generateDataArraySessions(sorted.getSessiondata()));
analysisData.setPlaytimeDistributionData(SessionLengthDistributionGraphCreator.generateDataArray(sorted.getPlaytimes().values()));
Benchmark.stop("Analysis Phase");
log(Phrase.ANALYSIS_THIRD_PARTY + "");
plugin.processStatus().setStatus("Analysis", "Analyzing additional data sources (3rd party)");
analysisData.setAdditionalDataReplaceMap(analyzeAdditionalPluginData(uuids));
analysisCache.cache(analysisData);
long time = plugin.processStatus().finishExecution("Analysis");
if (Settings.ANALYSIS_LOG_FINISHED.isTrue()) {
Log.info(Phrase.ANALYSIS_COMPLETE.parse(time + "", HtmlUtils.getServerAnalysisUrlWithProtocol()));
}
});
Map<String, Integer> commandUse = handler.getCommandUse();
AnalysisData analysisData = new AnalysisData();
Benchmark.stop("Analysis Create Empty dataset");
log(Phrase.ANALYSIS_BEGIN_ANALYSIS.parse(rawData.size() + "", Benchmark.stop("Analysis Fetch Phase") + ""));
String playersTable = SortablePlayersTableCreator.createSortablePlayersTable(rawData);
analysisData.setSortablePlayersTable(playersTable);
RawAnalysisData sorted = fillDataset(commandUse, rawData, now);
// Analyze & Save RawAnalysisData to AnalysisData
createCloroplethMap(analysisData, sorted.getGeolocations(), sorted.getGeocodes());
createPlayerActivityGraphs(analysisData, sorted.getSessiondata(), sorted.getRegistered(), sorted.getSortedSessionData());
analysisData.setRecentPlayers(RecentPlayersButtonsCreator.createRecentLoginsButtons(sorted.getLatestLogins(), 20));
long totalPlaytime = sorted.getTotalPlaytime();
analysisData.setTotalPlayTime(totalPlaytime);
analysisData.setAveragePlayTime(totalPlaytime / rawData.size());
analysisData.setSessionAverage(MathUtils.averageLong(AnalysisUtils.transformSessionDataToLengths(sorted.getSessiondata())));
analysisData.setTotalLoginTimes(sorted.getTotalLoginTimes());
createActivityVisalization(uuids.size(), sorted.getTotalBanned(), sorted.getActive(), sorted.getInactive(), sorted.getJoinleaver(), analysisData);
analysisData.setOps(sorted.getOps());
analyzeAverageAge(sorted.getAges(), analysisData);
createGamemodeUsageVisualization(sorted.getGmZero(), sorted.getGmOne(), sorted.getGmTwo(), sorted.getGmThree(), analysisData);
createCommandUseTable(sorted, analysisData);
analysisData.setTotaldeaths(sorted.getTotalDeaths());
analysisData.setTotalkills(sorted.getTotalKills());
analysisData.setTotalmobkills(sorted.getTotalMobKills());
analysisData.setRefreshDate(now);
analysisData.setPunchCardData(PunchCardGraphCreator.generateDataArray(sorted.getSessiondata()));
analysisData.setSessionDistributionData(SessionLengthDistributionGraphCreator.generateDataArraySessions(sorted.getSessiondata()));
analysisData.setPlaytimeDistributionData(SessionLengthDistributionGraphCreator.generateDataArray(sorted.getPlaytimes().values()));
Benchmark.stop("Analysis Phase");
log(Phrase.ANALYSIS_THIRD_PARTY + "");
analysisData.setAdditionalDataReplaceMap(analyzeAdditionalPluginData(uuids));
analysisCache.cache(analysisData);
long time = Benchmark.stop("Analysis");
if (Settings.ANALYSIS_LOG_FINISHED.isTrue()) {
Log.info(Phrase.ANALYSIS_COMPLETE.parse(time + "", HtmlUtils.getServerAnalysisUrlWithProtocol()));
}
// LocationAnalysis.performAnalysis(analysisData, plugin.getDB());
ExportUtility.export(plugin, analysisData, rawData);
ExportUtility.export(plugin, analysisData, rawData);
} catch (Throwable e) {
Log.toLog(this.getClass().getName(), e);
plugin.processStatus().setStatus("Analysis", "Error: " + e);
return false;
}
return true;
}
@ -420,7 +427,7 @@ public class Analysis {
Benchmark.stop("Analysis 3rd party");
return replaceMap;
}
public boolean isAnalysisBeingRun() {
return taskId != -1;
}