mirror of
https://github.com/plan-player-analytics/Plan.git
synced 2025-03-31 08:55:55 +02:00
Swap Abstract Plugin Framework for Platform Abstraction Layer library (#1787)
Replaced Abstract Plugin Framework with Platform Abstraction Layer Large amount of changes due to removal of features from the library, and change of the way the abstraction is achieved. Removes features from Plan: Removed debug logging (Considered useless when debugging issues) Removed /debug page (Considered useless when debugging issues) Removed enable timing (Benchmarking utility was removed from the library)
This commit is contained in:
parent
4da7497d82
commit
e1bffbcc1f
@ -17,6 +17,7 @@
|
||||
package com.djrapitops.plan.extension;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.Arrays;
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
@ -74,4 +75,8 @@ public enum ElementOrder {
|
||||
|
||||
return order.toArray(new ElementOrder[0]);
|
||||
}
|
||||
|
||||
public static List<ElementOrder> valuesAsList() {
|
||||
return Arrays.asList(values());
|
||||
}
|
||||
}
|
||||
|
@ -66,7 +66,7 @@ subprojects {
|
||||
ext.daggerVersion = "2.33"
|
||||
ext.daggerCompilerVersion = "2.33"
|
||||
|
||||
ext.abstractPluginFrameworkVersion = "3.4.2"
|
||||
ext.palVersion = "4.0.2"
|
||||
|
||||
ext.bukkitVersion = "1.13.2-R0.1-SNAPSHOT"
|
||||
ext.spigotVersion = "1.13.2-R0.1-SNAPSHOT"
|
||||
|
@ -9,7 +9,7 @@ dependencies {
|
||||
compile project(path: ":common", configuration: 'shadow')
|
||||
compileOnly project(":api")
|
||||
|
||||
compile "com.djrapitops:AbstractPluginFramework-bukkit:$abstractPluginFrameworkVersion"
|
||||
compile "net.playeranalytics:platform-abstraction-layer-bukkit:$palVersion"
|
||||
compile "org.bstats:bstats-bukkit:$bstatsVersion"
|
||||
compileOnly "me.clip:placeholderapi:$placeholderapiVersion"
|
||||
|
||||
|
@ -16,7 +16,6 @@
|
||||
*/
|
||||
package com.djrapitops.plan;
|
||||
|
||||
import com.djrapitops.plugin.api.Check;
|
||||
import org.bstats.bukkit.Metrics;
|
||||
import org.bstats.charts.SimplePie;
|
||||
|
||||
@ -38,7 +37,7 @@ public class BStatsBukkit {
|
||||
|
||||
private void registerConfigSettingGraphs() {
|
||||
String serverType = plugin.getServer().getName();
|
||||
if ("CraftBukkit".equals(serverType) && Check.isSpigotAvailable()) {
|
||||
if ("CraftBukkit".equals(serverType) && isSpigotAvailable()) {
|
||||
serverType = "Spigot";
|
||||
}
|
||||
String databaseType = plugin.getSystem().getDatabaseSystem().getDatabase().getType().getName();
|
||||
@ -47,6 +46,15 @@ public class BStatsBukkit {
|
||||
addStringSettingPie("database_type", databaseType);
|
||||
}
|
||||
|
||||
private boolean isSpigotAvailable() {
|
||||
try {
|
||||
Class.forName("org.spigotmc.CustomTimingsHandler");
|
||||
return true;
|
||||
} catch (Exception e) {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
protected void addStringSettingPie(String id, String setting) {
|
||||
metrics.addCustomChart(new SimplePie(id, () -> setting));
|
||||
}
|
||||
|
@ -21,7 +21,7 @@ import com.djrapitops.plan.settings.locale.Locale;
|
||||
import com.djrapitops.plan.storage.database.DBSystem;
|
||||
import com.djrapitops.plan.utilities.java.Reflection;
|
||||
import com.djrapitops.plan.utilities.logging.ErrorLogger;
|
||||
import com.djrapitops.plugin.logging.console.PluginLogger;
|
||||
import net.playeranalytics.plugin.server.PluginLogger;
|
||||
|
||||
import javax.inject.Inject;
|
||||
import javax.inject.Singleton;
|
||||
@ -49,7 +49,6 @@ public class BukkitServerShutdownSave extends ServerShutdownSave {
|
||||
try {
|
||||
return performCheck();
|
||||
} catch (Exception | NoClassDefFoundError | NoSuchFieldError e) {
|
||||
logger.debug("Server shutdown check failed, using JVM ShutdownHook instead. Error: " + e.toString());
|
||||
return false; // ShutdownHook handles save in case this fails upon plugin disable.
|
||||
}
|
||||
}
|
||||
|
@ -18,19 +18,21 @@ package com.djrapitops.plan;
|
||||
|
||||
import com.djrapitops.plan.addons.placeholderapi.BukkitPlaceholderRegistrar;
|
||||
import com.djrapitops.plan.commands.use.BukkitCommand;
|
||||
import com.djrapitops.plan.commands.use.ColorScheme;
|
||||
import com.djrapitops.plan.commands.use.Subcommand;
|
||||
import com.djrapitops.plan.exceptions.EnableException;
|
||||
import com.djrapitops.plan.gathering.ServerShutdownSave;
|
||||
import com.djrapitops.plan.settings.locale.Locale;
|
||||
import com.djrapitops.plan.settings.locale.lang.PluginLang;
|
||||
import com.djrapitops.plan.settings.theme.PlanColorScheme;
|
||||
import com.djrapitops.plugin.BukkitPlugin;
|
||||
import com.djrapitops.plugin.benchmarking.Benchmark;
|
||||
import com.djrapitops.plugin.command.ColorScheme;
|
||||
import com.djrapitops.plugin.task.AbsRunnable;
|
||||
import net.playeranalytics.plugin.BukkitPlatformLayer;
|
||||
import net.playeranalytics.plugin.PlatformAbstractionLayer;
|
||||
import net.playeranalytics.plugin.scheduling.RunnableFactory;
|
||||
import net.playeranalytics.plugin.server.PluginLogger;
|
||||
import org.bukkit.Bukkit;
|
||||
import org.bukkit.command.PluginCommand;
|
||||
import org.bukkit.configuration.file.FileConfiguration;
|
||||
import org.bukkit.plugin.java.JavaPlugin;
|
||||
|
||||
import java.util.logging.Level;
|
||||
import java.util.logging.Logger;
|
||||
@ -40,17 +42,26 @@ import java.util.logging.Logger;
|
||||
*
|
||||
* @author AuroraLS3
|
||||
*/
|
||||
public class Plan extends BukkitPlugin implements PlanPlugin {
|
||||
public class Plan extends JavaPlugin implements PlanPlugin {
|
||||
|
||||
private PlanSystem system;
|
||||
private Locale locale;
|
||||
private ServerShutdownSave serverShutdownSave;
|
||||
|
||||
private PluginLogger logger;
|
||||
private RunnableFactory runnableFactory;
|
||||
|
||||
@Override
|
||||
public void onEnable() {
|
||||
PlanBukkitComponent component = DaggerPlanBukkitComponent.builder().plan(this).build();
|
||||
PlatformAbstractionLayer abstractionLayer = new BukkitPlatformLayer(this);
|
||||
logger = abstractionLayer.getPluginLogger();
|
||||
runnableFactory = abstractionLayer.getRunnableFactory();
|
||||
PlanBukkitComponent component = DaggerPlanBukkitComponent.builder()
|
||||
.plan(this)
|
||||
.abstractionLayer(abstractionLayer)
|
||||
.server(getServer())
|
||||
.build();
|
||||
try {
|
||||
timings.start("Enable");
|
||||
system = component.system();
|
||||
serverShutdownSave = component.serverShutdownSave();
|
||||
locale = system.getLocaleSystem().getLocale();
|
||||
@ -59,9 +70,7 @@ public class Plan extends BukkitPlugin implements PlanPlugin {
|
||||
registerMetrics();
|
||||
registerPlaceholderAPIExtension(component.placeholders());
|
||||
|
||||
logger.debug("Verbose debug messages are enabled.");
|
||||
String benchTime = " (" + timings.end("Enable").map(Benchmark::toDurationString).orElse("-") + ")";
|
||||
logger.info(locale.getString(PluginLang.ENABLED) + benchTime);
|
||||
logger.info(locale.getString(PluginLang.ENABLED));
|
||||
} catch (AbstractMethodError e) {
|
||||
logger.error("Plugin ran into AbstractMethodError - Server restart is required. Likely cause is updating the jar without a restart.");
|
||||
} catch (EnableException e) {
|
||||
@ -71,7 +80,8 @@ public class Plan extends BukkitPlugin implements PlanPlugin {
|
||||
logger.error("Plugin Failed to Initialize Correctly. If this issue is caused by config settings you can use /plan reload");
|
||||
onDisable();
|
||||
} catch (Exception e) {
|
||||
Logger.getGlobal().log(Level.SEVERE, this.getClass().getSimpleName() + "-v" + getVersion(), e);
|
||||
String version = abstractionLayer.getPluginInformation().getVersion();
|
||||
Logger.getGlobal().log(Level.SEVERE, e, () -> this.getClass().getSimpleName() + "-v" + version);
|
||||
logger.error("Plugin Failed to Initialize Correctly. If this issue is caused by config settings you can use /plan reload");
|
||||
logger.error("This error should be reported at https://github.com/plan-player-analytics/Plan/issues");
|
||||
onDisable();
|
||||
@ -84,16 +94,14 @@ public class Plan extends BukkitPlugin implements PlanPlugin {
|
||||
|
||||
private void registerPlaceholderAPIExtension(BukkitPlaceholderRegistrar placeholders) {
|
||||
if (Bukkit.getPluginManager().isPluginEnabled("PlaceholderAPI")) {
|
||||
runnableFactory.create("Placeholders Registrar", new AbsRunnable() {
|
||||
@Override
|
||||
public void run() {
|
||||
try {
|
||||
placeholders.register();
|
||||
} catch (Exception | NoClassDefFoundError | NoSuchMethodError failed) {
|
||||
logger.warn("Failed to register PlaceholderAPI placeholders: " + failed.toString());
|
||||
runnableFactory.create(() -> {
|
||||
try {
|
||||
placeholders.register();
|
||||
} catch (Exception | NoClassDefFoundError | NoSuchMethodError failed) {
|
||||
logger.warn("Failed to register PlaceholderAPI placeholders: " + failed.toString());
|
||||
}
|
||||
}
|
||||
}
|
||||
}).runTask();
|
||||
).runTask();
|
||||
}
|
||||
}
|
||||
|
||||
@ -102,12 +110,7 @@ public class Plan extends BukkitPlugin implements PlanPlugin {
|
||||
// Spigot 1.14 requires Sync events to be fired from a server thread.
|
||||
// Registering a service fires a sync event, and bStats registers a service,
|
||||
// so this has to be run on the server thread.
|
||||
runnableFactory.create("Register Metrics task", new AbsRunnable() {
|
||||
@Override
|
||||
public void run() {
|
||||
new BStatsBukkit(plugin).registerMetrics();
|
||||
}
|
||||
}).runTask();
|
||||
runnableFactory.create(() -> new BStatsBukkit(plugin).registerMetrics()).runTask();
|
||||
}
|
||||
|
||||
@Override
|
||||
@ -127,27 +130,11 @@ public class Plan extends BukkitPlugin implements PlanPlugin {
|
||||
logger.info(locale != null ? locale.getString(PluginLang.DISABLED) : PluginLang.DISABLED.getDefault());
|
||||
}
|
||||
|
||||
@Override
|
||||
public void cancelAllTasks() {
|
||||
runnableFactory.cancelAllKnownTasks();
|
||||
Bukkit.getScheduler().cancelTasks(this);
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getVersion() {
|
||||
return getDescription().getVersion();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onReload() {
|
||||
// Nothing to be done, systems are disabled
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean isReloading() {
|
||||
return reloading;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void registerCommand(Subcommand command) {
|
||||
if (command == null) {
|
||||
|
@ -26,6 +26,8 @@ import com.djrapitops.plan.modules.bukkit.BukkitSuperClassBindingModule;
|
||||
import com.djrapitops.plan.modules.bukkit.BukkitTaskModule;
|
||||
import dagger.BindsInstance;
|
||||
import dagger.Component;
|
||||
import net.playeranalytics.plugin.PlatformAbstractionLayer;
|
||||
import org.bukkit.Server;
|
||||
|
||||
import javax.inject.Singleton;
|
||||
|
||||
@ -38,7 +40,7 @@ import javax.inject.Singleton;
|
||||
@Component(modules = {
|
||||
BukkitPlanModule.class,
|
||||
SystemObjectProvidingModule.class,
|
||||
APFModule.class,
|
||||
PlatformAbstractionLayerModule.class,
|
||||
FiltersModule.class,
|
||||
PlaceholderModule.class,
|
||||
|
||||
@ -61,7 +63,13 @@ public interface PlanBukkitComponent {
|
||||
interface Builder {
|
||||
|
||||
@BindsInstance
|
||||
Builder plan(Plan plan);
|
||||
Builder plan(PlanPlugin plan);
|
||||
|
||||
@BindsInstance
|
||||
Builder abstractionLayer(PlatformAbstractionLayer abstractionLayer);
|
||||
|
||||
@BindsInstance
|
||||
Builder server(Server server);
|
||||
|
||||
PlanBukkitComponent build();
|
||||
}
|
||||
|
@ -22,7 +22,6 @@ import com.djrapitops.plan.processing.Processing;
|
||||
import com.djrapitops.plan.utilities.logging.ErrorContext;
|
||||
import com.djrapitops.plan.utilities.logging.ErrorLogger;
|
||||
import com.djrapitops.plan.version.VersionChecker;
|
||||
import com.djrapitops.plugin.logging.L;
|
||||
import com.github.benmanes.caffeine.cache.Cache;
|
||||
import com.github.benmanes.caffeine.cache.Caffeine;
|
||||
import me.clip.placeholderapi.PlaceholderAPIPlugin;
|
||||
@ -113,7 +112,7 @@ public class PlanPlaceholderExtension extends PlaceholderExpansion {
|
||||
|
||||
return value;
|
||||
} catch (Exception e) {
|
||||
errorLogger.log(L.WARN, e, ErrorContext.builder().whatToDo("Report this").related("Placeholder Request", params, uuid).build());
|
||||
errorLogger.warn(e, ErrorContext.builder().whatToDo("Report this").related("Placeholder Request", params, uuid).build());
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
@ -18,9 +18,7 @@ package com.djrapitops.plan.commands.use;
|
||||
|
||||
import com.djrapitops.plan.utilities.logging.ErrorContext;
|
||||
import com.djrapitops.plan.utilities.logging.ErrorLogger;
|
||||
import com.djrapitops.plugin.logging.L;
|
||||
import com.djrapitops.plugin.task.AbsRunnable;
|
||||
import com.djrapitops.plugin.task.RunnableFactory;
|
||||
import net.playeranalytics.plugin.scheduling.RunnableFactory;
|
||||
import org.bukkit.command.Command;
|
||||
import org.bukkit.command.CommandExecutor;
|
||||
import org.bukkit.command.CommandSender;
|
||||
@ -57,17 +55,14 @@ public class BukkitCommand implements CommandExecutor, TabCompleter {
|
||||
|
||||
@Override
|
||||
public boolean onCommand(CommandSender sender, Command cmd, String label, String[] args) {
|
||||
runnableFactory.create("", new AbsRunnable() {
|
||||
@Override
|
||||
public void run() {
|
||||
try {
|
||||
command.getExecutor().accept(getSender(sender), new Arguments(args));
|
||||
} catch (Exception e) {
|
||||
errorLogger.log(L.ERROR, e, ErrorContext.builder()
|
||||
.related(sender.getClass())
|
||||
.related(label + " " + Arrays.toString(args))
|
||||
.build());
|
||||
}
|
||||
runnableFactory.create(() -> {
|
||||
try {
|
||||
command.getExecutor().accept(getSender(sender), new Arguments(args));
|
||||
} catch (Exception e) {
|
||||
errorLogger.error(e, ErrorContext.builder()
|
||||
.related(sender.getClass())
|
||||
.related(label + " " + Arrays.toString(args))
|
||||
.build());
|
||||
}
|
||||
}).runTaskAsynchronously();
|
||||
return true;
|
||||
@ -78,7 +73,7 @@ public class BukkitCommand implements CommandExecutor, TabCompleter {
|
||||
try {
|
||||
return command.getArgumentResolver().apply(getSender(sender), new Arguments(args));
|
||||
} catch (Exception e) {
|
||||
errorLogger.log(L.ERROR, e, ErrorContext.builder()
|
||||
errorLogger.error(e, ErrorContext.builder()
|
||||
.related(sender.getClass())
|
||||
.related("tab completion")
|
||||
.related(label + " " + Arrays.toString(args))
|
||||
|
@ -16,8 +16,6 @@
|
||||
*/
|
||||
package com.djrapitops.plan.gathering;
|
||||
|
||||
import com.djrapitops.plan.Plan;
|
||||
import com.djrapitops.plugin.api.Check;
|
||||
import org.bukkit.Server;
|
||||
import org.bukkit.World;
|
||||
|
||||
@ -27,7 +25,7 @@ import javax.inject.Singleton;
|
||||
@Singleton
|
||||
public class BukkitSensor implements ServerSensor<World> {
|
||||
|
||||
private final Plan plugin;
|
||||
private final Server server;
|
||||
|
||||
private final boolean hasTPSMethod;
|
||||
private final boolean hasEntityCountMethod;
|
||||
@ -35,15 +33,24 @@ public class BukkitSensor implements ServerSensor<World> {
|
||||
|
||||
@Inject
|
||||
public BukkitSensor(
|
||||
Plan plugin
|
||||
Server server
|
||||
) {
|
||||
this.plugin = plugin;
|
||||
boolean hasPaper = Check.isPaperAvailable();
|
||||
this.server = server;
|
||||
boolean hasPaper = isPaperAvailable();
|
||||
hasTPSMethod = hasPaper && hasPaperMethod(Server.class, "getTPS");
|
||||
hasEntityCountMethod = hasPaper && hasPaperMethod(World.class, "getEntityCount");
|
||||
hasChunkCountMethod = hasPaper && hasPaperMethod(World.class, "getChunkCount");
|
||||
}
|
||||
|
||||
public static boolean isPaperAvailable() {
|
||||
try {
|
||||
Class.forName("co.aikar.timings.Timing");
|
||||
return true;
|
||||
} catch (Exception e) {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean supportsDirectTPS() {
|
||||
return hasTPSMethod;
|
||||
@ -51,7 +58,7 @@ public class BukkitSensor implements ServerSensor<World> {
|
||||
|
||||
@Override
|
||||
public double getTPS() {
|
||||
return plugin.getServer().getTPS()[0];
|
||||
return server.getTPS()[0];
|
||||
}
|
||||
|
||||
@Override
|
||||
@ -96,12 +103,12 @@ public class BukkitSensor implements ServerSensor<World> {
|
||||
|
||||
@Override
|
||||
public int getOnlinePlayerCount() {
|
||||
return plugin.getServer().getOnlinePlayers().size();
|
||||
return server.getOnlinePlayers().size();
|
||||
}
|
||||
|
||||
@Override
|
||||
public Iterable<World> getWorlds() {
|
||||
return plugin.getServer().getWorlds();
|
||||
return server.getWorlds();
|
||||
}
|
||||
|
||||
private boolean hasPaperMethod(Class<?> clazz, String methodName) {
|
||||
|
@ -16,10 +16,8 @@
|
||||
*/
|
||||
package com.djrapitops.plan.gathering.importing.data;
|
||||
|
||||
import com.djrapitops.plan.DebugChannels;
|
||||
import com.djrapitops.plan.Plan;
|
||||
import com.djrapitops.plugin.api.utility.UUIDFetcher;
|
||||
import com.djrapitops.plugin.benchmarking.Timings;
|
||||
import net.playeranalytics.plugin.player.UUIDFetcher;
|
||||
import org.bukkit.Bukkit;
|
||||
import org.bukkit.OfflinePlayer;
|
||||
|
||||
import java.util.*;
|
||||
@ -36,8 +34,6 @@ import java.util.stream.Collectors;
|
||||
*/
|
||||
public class BukkitUserImportRefiner {
|
||||
|
||||
private final Plan plugin;
|
||||
private final Timings timings;
|
||||
private final boolean onlineMode;
|
||||
|
||||
private final List<UserImportData> importers = new ArrayList<>();
|
||||
@ -48,29 +44,18 @@ public class BukkitUserImportRefiner {
|
||||
private final Map<UserImportData, String> foundUUIDs = new HashMap<>();
|
||||
private final Map<UserImportData, String> foundNames = new HashMap<>();
|
||||
|
||||
public BukkitUserImportRefiner(Plan plugin, List<UserImportData> importers) {
|
||||
this.plugin = plugin;
|
||||
this.timings = plugin.getTimings();
|
||||
public BukkitUserImportRefiner(List<UserImportData> importers) {
|
||||
this.importers.addAll(importers);
|
||||
|
||||
onlineMode = plugin.getServer().getOnlineMode();
|
||||
onlineMode = Bukkit.getOnlineMode();
|
||||
}
|
||||
|
||||
public List<UserImportData> refineData() {
|
||||
String benchmarkName = "Refining UserImportData";
|
||||
|
||||
timings.start(benchmarkName);
|
||||
processMissingIdentifiers();
|
||||
timings.end(DebugChannels.IMPORTING, benchmarkName);
|
||||
|
||||
return importers;
|
||||
}
|
||||
|
||||
private void processMissingIdentifiers() {
|
||||
String benchmarkName = "Processing missing identifiers";
|
||||
|
||||
timings.start(benchmarkName);
|
||||
|
||||
List<UserImportData> invalidData = new ArrayList<>();
|
||||
|
||||
importers.parallelStream().forEach(importer -> {
|
||||
@ -93,15 +78,9 @@ public class BukkitUserImportRefiner {
|
||||
|
||||
processMissingUUIDs();
|
||||
processMissingNames();
|
||||
|
||||
timings.end(DebugChannels.IMPORTING, benchmarkName);
|
||||
}
|
||||
|
||||
private void processMissingUUIDs() {
|
||||
String benchmarkName = "Processing missing UUIDs";
|
||||
|
||||
timings.start(benchmarkName);
|
||||
|
||||
if (onlineMode) {
|
||||
addMissingUUIDsOverFetcher();
|
||||
addMissingUUIDsOverOfflinePlayer();
|
||||
@ -119,8 +98,6 @@ public class BukkitUserImportRefiner {
|
||||
});
|
||||
|
||||
importers.removeAll(missingUUIDs.keySet());
|
||||
|
||||
timings.end(DebugChannels.IMPORTING, benchmarkName);
|
||||
}
|
||||
|
||||
private void addMissingUUIDsOverFetcher() {
|
||||
@ -172,7 +149,7 @@ public class BukkitUserImportRefiner {
|
||||
|
||||
@SuppressWarnings("deprecation")
|
||||
private String getUuidByOfflinePlayer(String name) {
|
||||
OfflinePlayer player = plugin.getServer().getOfflinePlayer(name);
|
||||
OfflinePlayer player = Bukkit.getOfflinePlayer(name);
|
||||
|
||||
if (!player.hasPlayedBefore()) {
|
||||
return null;
|
||||
@ -182,17 +159,11 @@ public class BukkitUserImportRefiner {
|
||||
}
|
||||
|
||||
private void processMissingNames() {
|
||||
String benchmarkNames = "Processing missing names";
|
||||
|
||||
timings.start(benchmarkNames);
|
||||
|
||||
findMissingNames();
|
||||
|
||||
foundNames.entrySet().parallelStream().forEach(entry -> entry.getKey().setName(entry.getValue()));
|
||||
|
||||
importers.removeAll(missingNames.keySet());
|
||||
|
||||
timings.end(DebugChannels.IMPORTING, benchmarkNames);
|
||||
}
|
||||
|
||||
private void findMissingNames() {
|
||||
@ -224,7 +195,7 @@ public class BukkitUserImportRefiner {
|
||||
}
|
||||
|
||||
private String getNameByOfflinePlayer(String uuid) {
|
||||
OfflinePlayer player = plugin.getServer().getOfflinePlayer(UUID.fromString(uuid));
|
||||
OfflinePlayer player = Bukkit.getOfflinePlayer(UUID.fromString(uuid));
|
||||
|
||||
if (!player.hasPlayedBefore()) {
|
||||
return null;
|
||||
|
@ -16,7 +16,6 @@
|
||||
*/
|
||||
package com.djrapitops.plan.gathering.importing.importers;
|
||||
|
||||
import com.djrapitops.plan.Plan;
|
||||
import com.djrapitops.plan.delivery.domain.Nickname;
|
||||
import com.djrapitops.plan.gathering.domain.*;
|
||||
import com.djrapitops.plan.gathering.geolocation.GeolocationCache;
|
||||
@ -29,7 +28,6 @@ import com.djrapitops.plan.storage.database.Database;
|
||||
import com.djrapitops.plan.storage.database.queries.LargeStoreQueries;
|
||||
import com.djrapitops.plan.storage.database.queries.objects.UserIdentifierQueries;
|
||||
import com.djrapitops.plan.storage.database.transactions.Transaction;
|
||||
import com.djrapitops.plugin.utilities.Verify;
|
||||
|
||||
import java.util.*;
|
||||
import java.util.concurrent.ExecutorService;
|
||||
@ -49,10 +47,8 @@ public abstract class BukkitImporter implements Importer {
|
||||
private final GeolocationCache geolocationCache;
|
||||
private final DBSystem dbSystem;
|
||||
private final String name;
|
||||
private final Plan plugin;
|
||||
|
||||
protected BukkitImporter(
|
||||
Plan plugin,
|
||||
GeolocationCache geolocationCache,
|
||||
DBSystem dbSystem,
|
||||
ServerInfo serverInfo,
|
||||
@ -63,7 +59,6 @@ public abstract class BukkitImporter implements Importer {
|
||||
this.serverUUID = serverInfo::getServerUUID;
|
||||
|
||||
this.name = name;
|
||||
this.plugin = plugin;
|
||||
}
|
||||
|
||||
@Override
|
||||
@ -105,11 +100,11 @@ public abstract class BukkitImporter implements Importer {
|
||||
private void processUserData() {
|
||||
List<UserImportData> userImportData = getUserImportData();
|
||||
|
||||
if (Verify.isEmpty(userImportData)) {
|
||||
if (userImportData == null || userImportData.isEmpty()) {
|
||||
return;
|
||||
}
|
||||
|
||||
BukkitUserImportRefiner userImportRefiner = new BukkitUserImportRefiner(plugin, userImportData);
|
||||
BukkitUserImportRefiner userImportRefiner = new BukkitUserImportRefiner(userImportData);
|
||||
userImportData = userImportRefiner.refineData();
|
||||
|
||||
Database db = dbSystem.getDatabase();
|
||||
|
@ -16,7 +16,6 @@
|
||||
*/
|
||||
package com.djrapitops.plan.gathering.importing.importers;
|
||||
|
||||
import com.djrapitops.plan.Plan;
|
||||
import com.djrapitops.plan.gathering.geolocation.GeolocationCache;
|
||||
import com.djrapitops.plan.gathering.importing.data.ServerImportData;
|
||||
import com.djrapitops.plan.gathering.importing.data.UserImportData;
|
||||
@ -40,12 +39,11 @@ public class OfflinePlayerImporter extends BukkitImporter {
|
||||
|
||||
@Inject
|
||||
public OfflinePlayerImporter(
|
||||
Plan plugin,
|
||||
GeolocationCache geolocationCache,
|
||||
DBSystem dbSystem,
|
||||
ServerInfo serverInfo
|
||||
) {
|
||||
super(plugin, geolocationCache, dbSystem, serverInfo, "offline");
|
||||
super(geolocationCache, dbSystem, serverInfo, "offline");
|
||||
}
|
||||
|
||||
@Override
|
||||
|
@ -16,19 +16,18 @@
|
||||
*/
|
||||
package com.djrapitops.plan.gathering.listeners;
|
||||
|
||||
import com.djrapitops.plan.Plan;
|
||||
import com.djrapitops.plan.PlanPlugin;
|
||||
import com.djrapitops.plan.api.events.PlanBukkitEnableEvent;
|
||||
import com.djrapitops.plan.capability.CapabilitySvc;
|
||||
import com.djrapitops.plan.gathering.listeners.bukkit.*;
|
||||
import net.playeranalytics.plugin.server.Listeners;
|
||||
import org.bukkit.Bukkit;
|
||||
import org.bukkit.event.HandlerList;
|
||||
|
||||
import javax.inject.Inject;
|
||||
|
||||
public class BukkitListenerSystem extends ListenerSystem {
|
||||
|
||||
private final Plan plugin;
|
||||
private final Listeners listeners;
|
||||
|
||||
private final Status status;
|
||||
private final PlayerOnlineListener playerOnlineListener;
|
||||
@ -40,7 +39,7 @@ public class BukkitListenerSystem extends ListenerSystem {
|
||||
|
||||
@Inject
|
||||
public BukkitListenerSystem(
|
||||
Plan plugin,
|
||||
Listeners listeners,
|
||||
Status status,
|
||||
PlayerOnlineListener playerOnlineListener,
|
||||
ChatListener chatListener,
|
||||
@ -49,7 +48,7 @@ public class BukkitListenerSystem extends ListenerSystem {
|
||||
DeathEventListener deathEventListener,
|
||||
BukkitAFKListener afkListener
|
||||
) {
|
||||
this.plugin = plugin;
|
||||
this.listeners = listeners;
|
||||
this.status = status;
|
||||
|
||||
this.playerOnlineListener = playerOnlineListener;
|
||||
@ -62,20 +61,18 @@ public class BukkitListenerSystem extends ListenerSystem {
|
||||
|
||||
@Override
|
||||
protected void registerListeners() {
|
||||
plugin.registerListener(
|
||||
playerOnlineListener,
|
||||
chatListener,
|
||||
gamemodeChangeListener,
|
||||
worldChangeListener,
|
||||
deathEventListener,
|
||||
afkListener
|
||||
);
|
||||
listeners.registerListener(playerOnlineListener);
|
||||
listeners.registerListener(chatListener);
|
||||
listeners.registerListener(gamemodeChangeListener);
|
||||
listeners.registerListener(worldChangeListener);
|
||||
listeners.registerListener(deathEventListener);
|
||||
listeners.registerListener(afkListener);
|
||||
status.setCountKicks(true);
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void unregisterListeners() {
|
||||
HandlerList.unregisterAll(plugin);
|
||||
listeners.unregisterListeners();
|
||||
}
|
||||
|
||||
@Override
|
||||
|
@ -21,7 +21,6 @@ import com.djrapitops.plan.settings.Permissions;
|
||||
import com.djrapitops.plan.settings.config.PlanConfig;
|
||||
import com.djrapitops.plan.utilities.logging.ErrorContext;
|
||||
import com.djrapitops.plan.utilities.logging.ErrorLogger;
|
||||
import com.djrapitops.plugin.logging.L;
|
||||
import org.bukkit.entity.Player;
|
||||
import org.bukkit.event.EventHandler;
|
||||
import org.bukkit.event.EventPriority;
|
||||
@ -80,7 +79,7 @@ public class BukkitAFKListener implements Listener {
|
||||
|
||||
AFK_TRACKER.performedAction(uuid, time);
|
||||
} catch (Exception e) {
|
||||
errorLogger.log(L.ERROR, e, ErrorContext.builder().related(event).build());
|
||||
errorLogger.error(e, ErrorContext.builder().related(event).build());
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -23,7 +23,6 @@ import com.djrapitops.plan.storage.database.DBSystem;
|
||||
import com.djrapitops.plan.storage.database.transactions.events.NicknameStoreTransaction;
|
||||
import com.djrapitops.plan.utilities.logging.ErrorContext;
|
||||
import com.djrapitops.plan.utilities.logging.ErrorLogger;
|
||||
import com.djrapitops.plugin.logging.L;
|
||||
import org.bukkit.entity.Player;
|
||||
import org.bukkit.event.EventHandler;
|
||||
import org.bukkit.event.EventPriority;
|
||||
@ -67,7 +66,7 @@ public class ChatListener implements Listener {
|
||||
try {
|
||||
actOnChatEvent(event);
|
||||
} catch (Exception e) {
|
||||
errorLogger.log(L.ERROR, e, ErrorContext.builder().related(event).build());
|
||||
errorLogger.error(e, ErrorContext.builder().related(event).build());
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -25,7 +25,6 @@ import com.djrapitops.plan.processing.processors.player.MobKillProcessor;
|
||||
import com.djrapitops.plan.processing.processors.player.PlayerKillProcessor;
|
||||
import com.djrapitops.plan.utilities.logging.ErrorContext;
|
||||
import com.djrapitops.plan.utilities.logging.ErrorLogger;
|
||||
import com.djrapitops.plugin.logging.L;
|
||||
import org.bukkit.Material;
|
||||
import org.bukkit.entity.*;
|
||||
import org.bukkit.event.EventHandler;
|
||||
@ -80,7 +79,7 @@ public class DeathEventListener implements Listener {
|
||||
UUID uuid = dead instanceof Player ? dead.getUniqueId() : null;
|
||||
handleKill(time, uuid, killerEntity);
|
||||
} catch (Exception e) {
|
||||
errorLogger.log(L.ERROR, e, ErrorContext.builder().related(event, dead).build());
|
||||
errorLogger.error(e, ErrorContext.builder().related(event, dead).build());
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -24,7 +24,6 @@ import com.djrapitops.plan.storage.database.DBSystem;
|
||||
import com.djrapitops.plan.storage.database.transactions.events.WorldNameStoreTransaction;
|
||||
import com.djrapitops.plan.utilities.logging.ErrorContext;
|
||||
import com.djrapitops.plan.utilities.logging.ErrorLogger;
|
||||
import com.djrapitops.plugin.logging.L;
|
||||
import org.bukkit.entity.Player;
|
||||
import org.bukkit.event.EventHandler;
|
||||
import org.bukkit.event.EventPriority;
|
||||
@ -68,7 +67,7 @@ public class GameModeChangeListener implements Listener {
|
||||
try {
|
||||
actOnEvent(event);
|
||||
} catch (Exception e) {
|
||||
errorLogger.log(L.ERROR, e, ErrorContext.builder().related(event, event.getPlayer().getGameMode() + "->" + event.getNewGameMode()).build());
|
||||
errorLogger.error(e, ErrorContext.builder().related(event, event.getPlayer().getGameMode() + "->" + event.getNewGameMode()).build());
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -36,7 +36,6 @@ import com.djrapitops.plan.storage.database.Database;
|
||||
import com.djrapitops.plan.storage.database.transactions.events.*;
|
||||
import com.djrapitops.plan.utilities.logging.ErrorContext;
|
||||
import com.djrapitops.plan.utilities.logging.ErrorLogger;
|
||||
import com.djrapitops.plugin.logging.L;
|
||||
import org.bukkit.entity.Player;
|
||||
import org.bukkit.event.EventHandler;
|
||||
import org.bukkit.event.EventPriority;
|
||||
@ -106,7 +105,7 @@ public class PlayerOnlineListener implements Listener {
|
||||
dbSystem.getDatabase().executeTransaction(new BanStatusTransaction(playerUUID, () -> banned));
|
||||
dbSystem.getDatabase().executeTransaction(new OperatorStatusTransaction(playerUUID, operator));
|
||||
} catch (Exception e) {
|
||||
errorLogger.log(L.ERROR, e, ErrorContext.builder().related(event, event.getResult()).build());
|
||||
errorLogger.error(e, ErrorContext.builder().related(event, event.getResult()).build());
|
||||
}
|
||||
}
|
||||
|
||||
@ -131,7 +130,7 @@ public class PlayerOnlineListener implements Listener {
|
||||
|
||||
dbSystem.getDatabase().executeTransaction(new KickStoreTransaction(uuid));
|
||||
} catch (Exception e) {
|
||||
errorLogger.log(L.ERROR, e, ErrorContext.builder().related(event).build());
|
||||
errorLogger.error(e, ErrorContext.builder().related(event).build());
|
||||
}
|
||||
}
|
||||
|
||||
@ -140,7 +139,7 @@ public class PlayerOnlineListener implements Listener {
|
||||
try {
|
||||
actOnJoinEvent(event);
|
||||
} catch (Exception e) {
|
||||
errorLogger.log(L.ERROR, e, ErrorContext.builder().related(event).build());
|
||||
errorLogger.error(e, ErrorContext.builder().related(event).build());
|
||||
}
|
||||
}
|
||||
|
||||
@ -205,7 +204,7 @@ public class PlayerOnlineListener implements Listener {
|
||||
try {
|
||||
actOnQuitEvent(event);
|
||||
} catch (Exception e) {
|
||||
errorLogger.log(L.ERROR, e, ErrorContext.builder().related(event).build());
|
||||
errorLogger.error(e, ErrorContext.builder().related(event).build());
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -24,7 +24,6 @@ import com.djrapitops.plan.storage.database.DBSystem;
|
||||
import com.djrapitops.plan.storage.database.transactions.events.WorldNameStoreTransaction;
|
||||
import com.djrapitops.plan.utilities.logging.ErrorContext;
|
||||
import com.djrapitops.plan.utilities.logging.ErrorLogger;
|
||||
import com.djrapitops.plugin.logging.L;
|
||||
import org.bukkit.entity.Player;
|
||||
import org.bukkit.event.EventHandler;
|
||||
import org.bukkit.event.EventPriority;
|
||||
@ -60,7 +59,7 @@ public class WorldChangeListener implements Listener {
|
||||
try {
|
||||
actOnEvent(event);
|
||||
} catch (Exception e) {
|
||||
errorLogger.log(L.ERROR, e, ErrorContext.builder().related(event).build());
|
||||
errorLogger.error(e, ErrorContext.builder().related(event).build());
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -23,7 +23,6 @@
|
||||
*/
|
||||
package com.djrapitops.plan.gathering.timed;
|
||||
|
||||
import com.djrapitops.plan.Plan;
|
||||
import com.djrapitops.plan.TaskSystem;
|
||||
import com.djrapitops.plan.delivery.domain.DateObj;
|
||||
import com.djrapitops.plan.identification.ServerInfo;
|
||||
@ -33,9 +32,9 @@ import com.djrapitops.plan.settings.config.paths.TimeSettings;
|
||||
import com.djrapitops.plan.storage.database.DBSystem;
|
||||
import com.djrapitops.plan.storage.database.transactions.events.PingStoreTransaction;
|
||||
import com.djrapitops.plan.utilities.java.Reflection;
|
||||
import com.djrapitops.plugin.api.TimeAmount;
|
||||
import com.djrapitops.plugin.task.AbsRunnable;
|
||||
import com.djrapitops.plugin.task.RunnableFactory;
|
||||
import net.playeranalytics.plugin.scheduling.RunnableFactory;
|
||||
import net.playeranalytics.plugin.scheduling.TimeAmount;
|
||||
import net.playeranalytics.plugin.server.Listeners;
|
||||
import org.bukkit.Bukkit;
|
||||
import org.bukkit.entity.Player;
|
||||
import org.bukkit.event.EventHandler;
|
||||
@ -75,7 +74,7 @@ public class BukkitPingCounter extends TaskSystem.Task implements Listener {
|
||||
|
||||
private final Map<UUID, List<DateObj<Integer>>> playerHistory;
|
||||
|
||||
private final Plan plugin;
|
||||
private final Listeners listeners;
|
||||
private final PlanConfig config;
|
||||
private final DBSystem dbSystem;
|
||||
private final ServerInfo serverInfo;
|
||||
@ -83,13 +82,13 @@ public class BukkitPingCounter extends TaskSystem.Task implements Listener {
|
||||
|
||||
@Inject
|
||||
public BukkitPingCounter(
|
||||
Plan plugin,
|
||||
Listeners listeners,
|
||||
PlanConfig config,
|
||||
DBSystem dbSystem,
|
||||
ServerInfo serverInfo,
|
||||
RunnableFactory runnableFactory
|
||||
) {
|
||||
this.plugin = plugin;
|
||||
this.listeners = listeners;
|
||||
BukkitPingCounter.loadPingMethodDetails();
|
||||
this.config = config;
|
||||
this.dbSystem = dbSystem;
|
||||
@ -146,10 +145,10 @@ public class BukkitPingCounter extends TaskSystem.Task implements Listener {
|
||||
public void register(RunnableFactory runnableFactory) {
|
||||
Long startDelay = config.get(TimeSettings.PING_SERVER_ENABLE_DELAY);
|
||||
if (startDelay < TimeUnit.HOURS.toMillis(1L) && config.isTrue(DataGatheringSettings.PING)) {
|
||||
plugin.registerListener(this);
|
||||
listeners.registerListener(this);
|
||||
long delay = TimeAmount.toTicks(startDelay, TimeUnit.MILLISECONDS);
|
||||
long period = 40L;
|
||||
runnableFactory.create(null, this).runTaskTimer(delay, period);
|
||||
runnableFactory.create(this).runTaskTimer(delay, period);
|
||||
}
|
||||
}
|
||||
|
||||
@ -217,12 +216,9 @@ public class BukkitPingCounter extends TaskSystem.Task implements Listener {
|
||||
if (pingDelay >= TimeUnit.HOURS.toMillis(2L)) {
|
||||
return;
|
||||
}
|
||||
runnableFactory.create("Add Player to Ping list", new AbsRunnable() {
|
||||
@Override
|
||||
public void run() {
|
||||
if (player.isOnline()) {
|
||||
addPlayer(player);
|
||||
}
|
||||
runnableFactory.create(() -> {
|
||||
if (player.isOnline()) {
|
||||
addPlayer(player);
|
||||
}
|
||||
}).runTaskLater(TimeAmount.toTicks(pingDelay, TimeUnit.MILLISECONDS));
|
||||
}
|
||||
|
@ -18,13 +18,18 @@ package com.djrapitops.plan.identification.properties;
|
||||
|
||||
import org.bukkit.Server;
|
||||
|
||||
import javax.inject.Inject;
|
||||
import javax.inject.Singleton;
|
||||
|
||||
/**
|
||||
* ServerProperties for Bukkit.
|
||||
*
|
||||
* @author AuroraLS3
|
||||
*/
|
||||
@Singleton
|
||||
public class BukkitServerProperties extends ServerProperties {
|
||||
|
||||
@Inject
|
||||
public BukkitServerProperties(Server server) {
|
||||
super(
|
||||
server.getName(),
|
||||
|
@ -16,8 +16,6 @@
|
||||
*/
|
||||
package com.djrapitops.plan.modules.bukkit;
|
||||
|
||||
import com.djrapitops.plan.Plan;
|
||||
import com.djrapitops.plan.PlanPlugin;
|
||||
import com.djrapitops.plan.gathering.importing.importers.Importer;
|
||||
import com.djrapitops.plan.gathering.importing.importers.OfflinePlayerImporter;
|
||||
import dagger.Binds;
|
||||
@ -31,10 +29,6 @@ import dagger.multibindings.IntoSet;
|
||||
*/
|
||||
@Module
|
||||
public interface BukkitPlanModule {
|
||||
|
||||
@Binds
|
||||
PlanPlugin bindPlanPlugin(Plan plugin);
|
||||
|
||||
@Binds
|
||||
@IntoSet
|
||||
Importer bindOfflinePlayerImporter(OfflinePlayerImporter importer);
|
||||
|
@ -16,7 +16,6 @@
|
||||
*/
|
||||
package com.djrapitops.plan.modules.bukkit;
|
||||
|
||||
import com.djrapitops.plan.Plan;
|
||||
import com.djrapitops.plan.identification.properties.BukkitServerProperties;
|
||||
import com.djrapitops.plan.identification.properties.ServerProperties;
|
||||
import dagger.Module;
|
||||
@ -34,7 +33,7 @@ public class BukkitServerPropertiesModule {
|
||||
|
||||
@Provides
|
||||
@Singleton
|
||||
ServerProperties provideServerProperties(Plan plugin) {
|
||||
return new BukkitServerProperties(plugin.getServer());
|
||||
ServerProperties provideServerProperties(BukkitServerProperties serverProperties) {
|
||||
return serverProperties;
|
||||
}
|
||||
}
|
@ -19,7 +19,7 @@ package com.djrapitops.plan.storage.database;
|
||||
import com.djrapitops.plan.settings.config.PlanConfig;
|
||||
import com.djrapitops.plan.settings.config.paths.DatabaseSettings;
|
||||
import com.djrapitops.plan.settings.locale.Locale;
|
||||
import com.djrapitops.plugin.logging.console.PluginLogger;
|
||||
import net.playeranalytics.plugin.server.PluginLogger;
|
||||
|
||||
import javax.inject.Inject;
|
||||
import javax.inject.Singleton;
|
||||
|
@ -17,12 +17,19 @@
|
||||
package utilities.mocks;
|
||||
|
||||
import com.djrapitops.plan.DaggerPlanBukkitComponent;
|
||||
import com.djrapitops.plan.Plan;
|
||||
import com.djrapitops.plan.PlanBukkitComponent;
|
||||
import com.djrapitops.plan.PlanPlugin;
|
||||
import com.djrapitops.plan.PlanSystem;
|
||||
import org.bukkit.Server;
|
||||
import org.bukkit.command.ConsoleCommandSender;
|
||||
import org.bukkit.scheduler.BukkitScheduler;
|
||||
import org.mockito.Mockito;
|
||||
import utilities.TestConstants;
|
||||
|
||||
import java.nio.file.Path;
|
||||
|
||||
import static org.mockito.Mockito.doReturn;
|
||||
|
||||
/**
|
||||
* Test utility for creating a dagger PlanComponent using a mocked Plan.
|
||||
*
|
||||
@ -32,20 +39,17 @@ public class BukkitMockComponent {
|
||||
|
||||
private final Path tempDir;
|
||||
|
||||
private Plan planMock;
|
||||
private PlanPlugin planMock;
|
||||
private PlanBukkitComponent component;
|
||||
|
||||
public BukkitMockComponent(Path tempDir) {
|
||||
this.tempDir = tempDir;
|
||||
}
|
||||
|
||||
public Plan getPlanMock() throws Exception {
|
||||
public PlanPlugin getPlanMock() throws Exception {
|
||||
if (planMock == null) {
|
||||
planMock = PlanBukkitMocker.setUp()
|
||||
.withDataFolder(tempDir.toFile())
|
||||
.withPluginDescription()
|
||||
.withResourceFetchingFromJar()
|
||||
.withServer()
|
||||
planMock = PlanPluginMocker.setUp()
|
||||
.withDataFolder(tempDir.resolve("data").toFile())
|
||||
.getPlanMock();
|
||||
}
|
||||
return planMock;
|
||||
@ -53,8 +57,30 @@ public class BukkitMockComponent {
|
||||
|
||||
public PlanSystem getPlanSystem() throws Exception {
|
||||
if (component == null) {
|
||||
component = DaggerPlanBukkitComponent.builder().plan(getPlanMock()).build();
|
||||
PlanPlugin planMock = getPlanMock();
|
||||
component = DaggerPlanBukkitComponent.builder()
|
||||
.plan(planMock)
|
||||
.abstractionLayer(new TestPlatformAbstractionLayer(planMock))
|
||||
.server(mockServer())
|
||||
.build();
|
||||
}
|
||||
return component.system();
|
||||
}
|
||||
|
||||
private Server mockServer() {
|
||||
Server serverMock = Mockito.mock(Server.class);
|
||||
doReturn("").when(serverMock).getIp();
|
||||
doReturn("Bukkit").when(serverMock).getName();
|
||||
doReturn(25565).when(serverMock).getPort();
|
||||
doReturn("1.12.2").when(serverMock).getVersion();
|
||||
doReturn("32423").when(serverMock).getBukkitVersion();
|
||||
doReturn(TestConstants.SERVER_MAX_PLAYERS).when(serverMock).getMaxPlayers();
|
||||
|
||||
ConsoleCommandSender sender = Mockito.mock(ConsoleCommandSender.class);
|
||||
doReturn(sender).when(serverMock).getConsoleSender();
|
||||
|
||||
BukkitScheduler bukkitScheduler = Mockito.mock(BukkitScheduler.class);
|
||||
doReturn(bukkitScheduler).when(serverMock).getScheduler();
|
||||
return serverMock;
|
||||
}
|
||||
}
|
@ -1,128 +0,0 @@
|
||||
/*
|
||||
* This file is part of Player Analytics (Plan).
|
||||
*
|
||||
* Plan is free software: you can redistribute it and/or modify
|
||||
* it under the terms of the GNU Lesser General Public License v3 as published by
|
||||
* the Free Software Foundation, either version 3 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* Plan is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU Lesser General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU Lesser General Public License
|
||||
* along with Plan. If not, see <https://www.gnu.org/licenses/>.
|
||||
*/
|
||||
package utilities.mocks;
|
||||
|
||||
import com.djrapitops.plan.Plan;
|
||||
import com.djrapitops.plugin.benchmarking.Timings;
|
||||
import com.djrapitops.plugin.command.ColorScheme;
|
||||
import com.djrapitops.plugin.logging.console.PluginLogger;
|
||||
import com.djrapitops.plugin.logging.console.TestPluginLogger;
|
||||
import com.djrapitops.plugin.logging.debug.CombineDebugLogger;
|
||||
import com.djrapitops.plugin.logging.debug.DebugLogger;
|
||||
import com.djrapitops.plugin.logging.debug.MemoryDebugLogger;
|
||||
import com.djrapitops.plugin.logging.error.ConsoleErrorLogger;
|
||||
import com.djrapitops.plugin.logging.error.ErrorHandler;
|
||||
import com.djrapitops.plugin.task.RunnableFactory;
|
||||
import org.bukkit.Server;
|
||||
import org.bukkit.command.ConsoleCommandSender;
|
||||
import org.bukkit.plugin.InvalidDescriptionException;
|
||||
import org.bukkit.plugin.PluginDescriptionFile;
|
||||
import org.bukkit.scheduler.BukkitScheduler;
|
||||
import org.mockito.Mockito;
|
||||
import utilities.TestConstants;
|
||||
import utilities.mocks.objects.TestLogger;
|
||||
import utilities.mocks.objects.TestRunnableFactory;
|
||||
|
||||
import java.io.File;
|
||||
import java.io.IOException;
|
||||
import java.io.InputStream;
|
||||
import java.nio.file.Files;
|
||||
|
||||
import static org.mockito.Mockito.doReturn;
|
||||
|
||||
/**
|
||||
* Mocking Utility for Bukkit version of Plan.
|
||||
*
|
||||
* @author AuroraLS3
|
||||
*/
|
||||
public class PlanBukkitMocker extends Mocker {
|
||||
|
||||
private Plan planMock;
|
||||
|
||||
private PlanBukkitMocker() {
|
||||
}
|
||||
|
||||
public static PlanBukkitMocker setUp() {
|
||||
return new PlanBukkitMocker().mockPlugin();
|
||||
}
|
||||
|
||||
private PlanBukkitMocker mockPlugin() {
|
||||
planMock = Mockito.mock(Plan.class);
|
||||
super.planMock = planMock;
|
||||
|
||||
doReturn(new ColorScheme("§1", "§2", "§3")).when(planMock).getColorScheme();
|
||||
doReturn("1.0.0").when(planMock).getVersion();
|
||||
|
||||
TestLogger testLogger = new TestLogger();
|
||||
RunnableFactory runnableFactory = new TestRunnableFactory();
|
||||
PluginLogger testPluginLogger = new TestPluginLogger();
|
||||
DebugLogger debugLogger = new CombineDebugLogger(new MemoryDebugLogger());
|
||||
ErrorHandler consoleErrorLogger = new ConsoleErrorLogger(testPluginLogger);
|
||||
Timings timings = new Timings(debugLogger);
|
||||
|
||||
doReturn(testLogger).when(planMock).getLogger();
|
||||
doReturn(runnableFactory).when(planMock).getRunnableFactory();
|
||||
doReturn(testPluginLogger).when(planMock).getPluginLogger();
|
||||
doReturn(debugLogger).when(planMock).getDebugLogger();
|
||||
doReturn(consoleErrorLogger).when(planMock).getErrorHandler();
|
||||
doReturn(timings).when(planMock).getTimings();
|
||||
|
||||
return this;
|
||||
}
|
||||
|
||||
PlanBukkitMocker withDataFolder(File tempFolder) {
|
||||
doReturn(tempFolder).when(planMock).getDataFolder();
|
||||
return this;
|
||||
}
|
||||
|
||||
PlanBukkitMocker withPluginDescription() {
|
||||
try (InputStream in = Files.newInputStream(getFile("/plugin.yml").toPath())) {
|
||||
PluginDescriptionFile description = new PluginDescriptionFile(in);
|
||||
doReturn(description).when(planMock).getDescription();
|
||||
} catch (IOException | InvalidDescriptionException e) {
|
||||
System.out.println("Error while setting plugin description");
|
||||
}
|
||||
return this;
|
||||
}
|
||||
|
||||
PlanBukkitMocker withResourceFetchingFromJar() {
|
||||
withPluginFiles();
|
||||
return this;
|
||||
}
|
||||
|
||||
PlanBukkitMocker withServer() {
|
||||
Server serverMock = Mockito.mock(Server.class);
|
||||
doReturn("").when(serverMock).getIp();
|
||||
doReturn("Bukkit").when(serverMock).getName();
|
||||
doReturn(25565).when(serverMock).getPort();
|
||||
doReturn("1.12.2").when(serverMock).getVersion();
|
||||
doReturn("32423").when(serverMock).getBukkitVersion();
|
||||
doReturn(TestConstants.SERVER_MAX_PLAYERS).when(serverMock).getMaxPlayers();
|
||||
ConsoleCommandSender sender = Mockito.mock(ConsoleCommandSender.class);
|
||||
doReturn(sender).when(serverMock).getConsoleSender();
|
||||
|
||||
BukkitScheduler bukkitScheduler = Mockito.mock(BukkitScheduler.class);
|
||||
doReturn(bukkitScheduler).when(serverMock).getScheduler();
|
||||
|
||||
doReturn(serverMock).when(planMock).getServer();
|
||||
return this;
|
||||
}
|
||||
|
||||
Plan getPlanMock() {
|
||||
return planMock;
|
||||
}
|
||||
}
|
@ -3,7 +3,7 @@ dependencies {
|
||||
compile project(path: ":common", configuration: 'shadow')
|
||||
compileOnly project(":api")
|
||||
|
||||
compile "com.djrapitops:AbstractPluginFramework-bungeecord:$abstractPluginFrameworkVersion"
|
||||
compile "net.playeranalytics:platform-abstraction-layer-bungeecord:$palVersion"
|
||||
compile "org.bstats:bstats-bungeecord:$bstatsVersion"
|
||||
|
||||
compileOnly "net.md-5:bungeecord-api:$bungeeVersion"
|
||||
|
@ -17,30 +17,44 @@
|
||||
package com.djrapitops.plan;
|
||||
|
||||
import com.djrapitops.plan.command.use.BungeeCommand;
|
||||
import com.djrapitops.plan.commands.use.ColorScheme;
|
||||
import com.djrapitops.plan.commands.use.Subcommand;
|
||||
import com.djrapitops.plan.exceptions.EnableException;
|
||||
import com.djrapitops.plan.settings.locale.Locale;
|
||||
import com.djrapitops.plan.settings.locale.lang.PluginLang;
|
||||
import com.djrapitops.plan.settings.theme.PlanColorScheme;
|
||||
import com.djrapitops.plugin.BungeePlugin;
|
||||
import com.djrapitops.plugin.command.ColorScheme;
|
||||
import com.djrapitops.plugin.logging.L;
|
||||
import net.md_5.bungee.api.plugin.Plugin;
|
||||
import net.playeranalytics.plugin.BungeePlatformLayer;
|
||||
import net.playeranalytics.plugin.PlatformAbstractionLayer;
|
||||
import net.playeranalytics.plugin.scheduling.RunnableFactory;
|
||||
import net.playeranalytics.plugin.server.PluginLogger;
|
||||
|
||||
import java.io.InputStream;
|
||||
import java.util.logging.Level;
|
||||
import java.util.logging.Logger;
|
||||
|
||||
/**
|
||||
* Bungee Main class.
|
||||
*
|
||||
* @author AuroraLS3
|
||||
*/
|
||||
public class PlanBungee extends BungeePlugin implements PlanPlugin {
|
||||
public class PlanBungee extends Plugin implements PlanPlugin {
|
||||
|
||||
private PlanSystem system;
|
||||
private Locale locale;
|
||||
|
||||
private PluginLogger logger;
|
||||
private RunnableFactory runnableFactory;
|
||||
|
||||
@Override
|
||||
public void onEnable() {
|
||||
PlanBungeeComponent component = DaggerPlanBungeeComponent.builder().plan(this).build();
|
||||
PlatformAbstractionLayer abstractionLayer = new BungeePlatformLayer(this);
|
||||
logger = abstractionLayer.getPluginLogger();
|
||||
runnableFactory = abstractionLayer.getRunnableFactory();
|
||||
PlanBungeeComponent component = DaggerPlanBungeeComponent.builder()
|
||||
.plan(this)
|
||||
.abstractionLayer(abstractionLayer)
|
||||
.build();
|
||||
try {
|
||||
system = component.system();
|
||||
locale = system.getLocaleSystem().getLocale();
|
||||
@ -61,7 +75,8 @@ public class PlanBungee extends BungeePlugin implements PlanPlugin {
|
||||
logger.error("Plugin Failed to Initialize Correctly. If this issue is caused by config settings you can use /planbungee reload");
|
||||
onDisable();
|
||||
} catch (Exception e) {
|
||||
errorHandler.log(L.CRITICAL, this.getClass(), e);
|
||||
String version = abstractionLayer.getPluginInformation().getVersion();
|
||||
Logger.getGlobal().log(Level.SEVERE, e, () -> this.getClass().getSimpleName() + "-v" + version);
|
||||
logger.error("Plugin Failed to Initialize Correctly. If this issue is caused by config settings you can use /planbungee reload");
|
||||
logger.error("This error should be reported at https://github.com/plan-player-analytics/Plan/issues");
|
||||
onDisable();
|
||||
@ -74,22 +89,12 @@ public class PlanBungee extends BungeePlugin implements PlanPlugin {
|
||||
|
||||
@Override
|
||||
public void onDisable() {
|
||||
cancelAllTasks();
|
||||
runnableFactory.cancelAllKnownTasks();
|
||||
if (system != null) system.disable();
|
||||
|
||||
logger.info(locale.getString(PluginLang.DISABLED));
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getVersion() {
|
||||
return super.getDescription().getVersion();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onReload() {
|
||||
// Nothing to be done, systems are disabled
|
||||
}
|
||||
|
||||
@Override
|
||||
public void registerCommand(Subcommand command) {
|
||||
if (command == null) {
|
||||
@ -115,9 +120,4 @@ public class PlanBungee extends BungeePlugin implements PlanPlugin {
|
||||
public PlanSystem getSystem() {
|
||||
return system;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean isReloading() {
|
||||
return reloading;
|
||||
}
|
||||
}
|
||||
|
@ -21,6 +21,7 @@ import com.djrapitops.plan.modules.*;
|
||||
import com.djrapitops.plan.modules.bungee.*;
|
||||
import dagger.BindsInstance;
|
||||
import dagger.Component;
|
||||
import net.playeranalytics.plugin.PlatformAbstractionLayer;
|
||||
|
||||
import javax.inject.Singleton;
|
||||
|
||||
@ -34,7 +35,7 @@ import javax.inject.Singleton;
|
||||
BungeePlanModule.class,
|
||||
BungeeCommandModule.class,
|
||||
SystemObjectProvidingModule.class,
|
||||
APFModule.class,
|
||||
PlatformAbstractionLayerModule.class,
|
||||
FiltersModule.class,
|
||||
PlaceholderModule.class,
|
||||
|
||||
@ -55,6 +56,9 @@ public interface PlanBungeeComponent {
|
||||
@BindsInstance
|
||||
Builder plan(PlanBungee plan);
|
||||
|
||||
@BindsInstance
|
||||
Builder abstractionLayer(PlatformAbstractionLayer abstractionLayer);
|
||||
|
||||
PlanBungeeComponent build();
|
||||
}
|
||||
}
|
@ -21,13 +21,11 @@ import com.djrapitops.plan.commands.use.CMDSender;
|
||||
import com.djrapitops.plan.commands.use.Subcommand;
|
||||
import com.djrapitops.plan.utilities.logging.ErrorContext;
|
||||
import com.djrapitops.plan.utilities.logging.ErrorLogger;
|
||||
import com.djrapitops.plugin.logging.L;
|
||||
import com.djrapitops.plugin.task.AbsRunnable;
|
||||
import com.djrapitops.plugin.task.RunnableFactory;
|
||||
import net.md_5.bungee.api.CommandSender;
|
||||
import net.md_5.bungee.api.connection.ProxiedPlayer;
|
||||
import net.md_5.bungee.api.plugin.Command;
|
||||
import net.md_5.bungee.api.plugin.TabExecutor;
|
||||
import net.playeranalytics.plugin.scheduling.RunnableFactory;
|
||||
|
||||
import java.util.Arrays;
|
||||
import java.util.Collections;
|
||||
@ -61,17 +59,14 @@ public class BungeeCommand extends Command implements TabExecutor {
|
||||
|
||||
@Override
|
||||
public void execute(CommandSender sender, String[] args) {
|
||||
runnableFactory.create("", new AbsRunnable() {
|
||||
@Override
|
||||
public void run() {
|
||||
try {
|
||||
command.getExecutor().accept(getSender(sender), new Arguments(args));
|
||||
} catch (Exception e) {
|
||||
errorLogger.log(L.ERROR, e, ErrorContext.builder()
|
||||
.related(sender.getClass())
|
||||
.related(Arrays.toString(args))
|
||||
.build());
|
||||
}
|
||||
runnableFactory.create(() -> {
|
||||
try {
|
||||
command.getExecutor().accept(getSender(sender), new Arguments(args));
|
||||
} catch (Exception e) {
|
||||
errorLogger.error(e, ErrorContext.builder()
|
||||
.related(sender.getClass())
|
||||
.related(Arrays.toString(args))
|
||||
.build());
|
||||
}
|
||||
}).runTaskAsynchronously();
|
||||
}
|
||||
@ -81,7 +76,7 @@ public class BungeeCommand extends Command implements TabExecutor {
|
||||
try {
|
||||
return command.getArgumentResolver().apply(getSender(sender), new Arguments(args));
|
||||
} catch (Exception e) {
|
||||
errorLogger.log(L.ERROR, e, ErrorContext.builder()
|
||||
errorLogger.error(e, ErrorContext.builder()
|
||||
.related(sender.getClass())
|
||||
.related("tab completion")
|
||||
.related(Arrays.toString(args))
|
||||
|
@ -21,28 +21,29 @@ import com.djrapitops.plan.PlanPlugin;
|
||||
import com.djrapitops.plan.api.events.PlanBungeeEnableEvent;
|
||||
import com.djrapitops.plan.capability.CapabilitySvc;
|
||||
import com.djrapitops.plan.gathering.listeners.bungee.PlayerOnlineListener;
|
||||
import net.playeranalytics.plugin.server.Listeners;
|
||||
|
||||
import javax.inject.Inject;
|
||||
|
||||
public class BungeeListenerSystem extends ListenerSystem {
|
||||
|
||||
private final PlanBungee plugin;
|
||||
private PlayerOnlineListener playerOnlineListener;
|
||||
private final Listeners listeners;
|
||||
private final PlayerOnlineListener playerOnlineListener;
|
||||
|
||||
@Inject
|
||||
public BungeeListenerSystem(PlanBungee plugin, PlayerOnlineListener playerOnlineListener) {
|
||||
this.plugin = plugin;
|
||||
public BungeeListenerSystem(Listeners listeners, PlayerOnlineListener playerOnlineListener) {
|
||||
this.listeners = listeners;
|
||||
this.playerOnlineListener = playerOnlineListener;
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void registerListeners() {
|
||||
plugin.registerListener(playerOnlineListener);
|
||||
listeners.registerListener(playerOnlineListener);
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void unregisterListeners() {
|
||||
plugin.getProxy().getPluginManager().unregisterListeners(plugin);
|
||||
listeners.unregisterListeners();
|
||||
}
|
||||
|
||||
@Override
|
||||
|
@ -34,7 +34,6 @@ import com.djrapitops.plan.storage.database.transactions.events.GeoInfoStoreTran
|
||||
import com.djrapitops.plan.storage.database.transactions.events.PlayerRegisterTransaction;
|
||||
import com.djrapitops.plan.utilities.logging.ErrorContext;
|
||||
import com.djrapitops.plan.utilities.logging.ErrorLogger;
|
||||
import com.djrapitops.plugin.logging.L;
|
||||
import net.md_5.bungee.api.connection.ProxiedPlayer;
|
||||
import net.md_5.bungee.api.event.PlayerDisconnectEvent;
|
||||
import net.md_5.bungee.api.event.PostLoginEvent;
|
||||
@ -91,7 +90,7 @@ public class PlayerOnlineListener implements Listener {
|
||||
try {
|
||||
actOnLogin(event);
|
||||
} catch (Exception e) {
|
||||
errorLogger.log(L.ERROR, e, ErrorContext.builder().related(event).build());
|
||||
errorLogger.error(e, ErrorContext.builder().related(event).build());
|
||||
}
|
||||
}
|
||||
|
||||
@ -135,7 +134,7 @@ public class PlayerOnlineListener implements Listener {
|
||||
try {
|
||||
actOnLogout(event);
|
||||
} catch (Exception e) {
|
||||
errorLogger.log(L.ERROR, e, ErrorContext.builder().related(event).build());
|
||||
errorLogger.error(e, ErrorContext.builder().related(event).build());
|
||||
}
|
||||
}
|
||||
|
||||
@ -155,7 +154,7 @@ public class PlayerOnlineListener implements Listener {
|
||||
try {
|
||||
actOnServerSwitch(event);
|
||||
} catch (Exception e) {
|
||||
errorLogger.log(L.ERROR, e, ErrorContext.builder().related(event).build());
|
||||
errorLogger.error(e, ErrorContext.builder().related(event).build());
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -23,7 +23,6 @@
|
||||
*/
|
||||
package com.djrapitops.plan.gathering.timed;
|
||||
|
||||
import com.djrapitops.plan.PlanBungee;
|
||||
import com.djrapitops.plan.TaskSystem;
|
||||
import com.djrapitops.plan.delivery.domain.DateObj;
|
||||
import com.djrapitops.plan.identification.ServerInfo;
|
||||
@ -32,15 +31,15 @@ import com.djrapitops.plan.settings.config.paths.DataGatheringSettings;
|
||||
import com.djrapitops.plan.settings.config.paths.TimeSettings;
|
||||
import com.djrapitops.plan.storage.database.DBSystem;
|
||||
import com.djrapitops.plan.storage.database.transactions.events.PingStoreTransaction;
|
||||
import com.djrapitops.plugin.api.TimeAmount;
|
||||
import com.djrapitops.plugin.task.AbsRunnable;
|
||||
import com.djrapitops.plugin.task.RunnableFactory;
|
||||
import net.md_5.bungee.api.ProxyServer;
|
||||
import net.md_5.bungee.api.connection.ProxiedPlayer;
|
||||
import net.md_5.bungee.api.event.ServerConnectedEvent;
|
||||
import net.md_5.bungee.api.event.ServerDisconnectEvent;
|
||||
import net.md_5.bungee.api.plugin.Listener;
|
||||
import net.md_5.bungee.event.EventHandler;
|
||||
import net.playeranalytics.plugin.scheduling.RunnableFactory;
|
||||
import net.playeranalytics.plugin.scheduling.TimeAmount;
|
||||
import net.playeranalytics.plugin.server.Listeners;
|
||||
|
||||
import javax.inject.Inject;
|
||||
import javax.inject.Singleton;
|
||||
@ -57,7 +56,7 @@ public class BungeePingCounter extends TaskSystem.Task implements Listener {
|
||||
|
||||
private final Map<UUID, List<DateObj<Integer>>> playerHistory;
|
||||
|
||||
private final PlanBungee plugin;
|
||||
private final Listeners listeners;
|
||||
private final PlanConfig config;
|
||||
private final DBSystem dbSystem;
|
||||
private final ServerInfo serverInfo;
|
||||
@ -65,13 +64,13 @@ public class BungeePingCounter extends TaskSystem.Task implements Listener {
|
||||
|
||||
@Inject
|
||||
public BungeePingCounter(
|
||||
PlanBungee plugin,
|
||||
Listeners listeners,
|
||||
PlanConfig config,
|
||||
DBSystem dbSystem,
|
||||
ServerInfo serverInfo,
|
||||
RunnableFactory runnableFactory
|
||||
) {
|
||||
this.plugin = plugin;
|
||||
this.listeners = listeners;
|
||||
this.config = config;
|
||||
this.dbSystem = dbSystem;
|
||||
this.serverInfo = serverInfo;
|
||||
@ -112,11 +111,11 @@ public class BungeePingCounter extends TaskSystem.Task implements Listener {
|
||||
public void register(RunnableFactory runnableFactory) {
|
||||
Long startDelay = config.get(TimeSettings.PING_SERVER_ENABLE_DELAY);
|
||||
if (startDelay < TimeUnit.HOURS.toMillis(1L) && config.isTrue(DataGatheringSettings.PING)) {
|
||||
plugin.registerListener(this);
|
||||
listeners.registerListener(this);
|
||||
|
||||
long delay = TimeAmount.toTicks(startDelay, TimeUnit.MILLISECONDS);
|
||||
long period = 40L;
|
||||
runnableFactory.create(null, this).runTaskTimerAsynchronously(delay, period);
|
||||
runnableFactory.create(this).runTaskTimerAsynchronously(delay, period);
|
||||
}
|
||||
}
|
||||
|
||||
@ -139,12 +138,9 @@ public class BungeePingCounter extends TaskSystem.Task implements Listener {
|
||||
if (pingDelay >= TimeUnit.HOURS.toMillis(2L)) {
|
||||
return;
|
||||
}
|
||||
runnableFactory.create("Add Player to Ping list", new AbsRunnable() {
|
||||
@Override
|
||||
public void run() {
|
||||
if (player.isConnected()) {
|
||||
addPlayer(player);
|
||||
}
|
||||
runnableFactory.create(() -> {
|
||||
if (player.isConnected()) {
|
||||
addPlayer(player);
|
||||
}
|
||||
}).runTaskLater(TimeAmount.toTicks(pingDelay, TimeUnit.MILLISECONDS));
|
||||
}
|
||||
|
@ -23,7 +23,7 @@ import com.djrapitops.plan.identification.storage.ServerDBLoader;
|
||||
import com.djrapitops.plan.identification.storage.ServerFileLoader;
|
||||
import com.djrapitops.plan.identification.storage.ServerLoader;
|
||||
import com.djrapitops.plan.processing.Processing;
|
||||
import com.djrapitops.plugin.logging.console.PluginLogger;
|
||||
import net.playeranalytics.plugin.server.PluginLogger;
|
||||
|
||||
import javax.inject.Inject;
|
||||
import javax.inject.Singleton;
|
||||
|
@ -16,8 +16,6 @@
|
||||
*/
|
||||
package com.djrapitops.plan.identification.properties;
|
||||
|
||||
import com.djrapitops.plugin.api.Check;
|
||||
|
||||
/**
|
||||
* Utility class for checking if RedisBungee API is available.
|
||||
*
|
||||
@ -30,7 +28,12 @@ public class RedisCheck {
|
||||
}
|
||||
|
||||
public static boolean isClassAvailable() {
|
||||
return Check.isAvailable("com.imaginarycode.minecraft.redisbungee.RedisBungeeAPI");
|
||||
try {
|
||||
Class.forName("com.imaginarycode.minecraft.redisbungee.RedisBungeeAPI");
|
||||
return true;
|
||||
} catch (ClassNotFoundException e) {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
}
|
@ -53,7 +53,11 @@ public class BungeeMockComponent {
|
||||
|
||||
public PlanSystem getPlanSystem() throws Exception {
|
||||
if (component == null) {
|
||||
component = DaggerPlanBungeeComponent.builder().plan(getPlanMock()).build();
|
||||
PlanBungee planMock = getPlanMock();
|
||||
component = DaggerPlanBungeeComponent.builder()
|
||||
.plan(planMock)
|
||||
.abstractionLayer(new TestPlatformAbstractionLayer(this.planMock))
|
||||
.build();
|
||||
}
|
||||
return component.system();
|
||||
}
|
||||
|
@ -17,16 +17,7 @@
|
||||
package utilities.mocks;
|
||||
|
||||
import com.djrapitops.plan.PlanBungee;
|
||||
import com.djrapitops.plugin.benchmarking.Timings;
|
||||
import com.djrapitops.plugin.command.ColorScheme;
|
||||
import com.djrapitops.plugin.logging.console.PluginLogger;
|
||||
import com.djrapitops.plugin.logging.console.TestPluginLogger;
|
||||
import com.djrapitops.plugin.logging.debug.CombineDebugLogger;
|
||||
import com.djrapitops.plugin.logging.debug.DebugLogger;
|
||||
import com.djrapitops.plugin.logging.debug.MemoryDebugLogger;
|
||||
import com.djrapitops.plugin.logging.error.ConsoleErrorLogger;
|
||||
import com.djrapitops.plugin.logging.error.ErrorHandler;
|
||||
import com.djrapitops.plugin.task.RunnableFactory;
|
||||
import com.djrapitops.plan.commands.use.ColorScheme;
|
||||
import net.md_5.bungee.api.CommandSender;
|
||||
import net.md_5.bungee.api.ProxyConfig;
|
||||
import net.md_5.bungee.api.ProxyServer;
|
||||
@ -35,7 +26,6 @@ import net.md_5.bungee.api.plugin.PluginManager;
|
||||
import org.mockito.Mockito;
|
||||
import utilities.TestConstants;
|
||||
import utilities.mocks.objects.TestLogger;
|
||||
import utilities.mocks.objects.TestRunnableFactory;
|
||||
|
||||
import java.io.File;
|
||||
import java.util.HashSet;
|
||||
@ -64,21 +54,10 @@ public class PlanBungeeMocker extends Mocker {
|
||||
super.planMock = planMock;
|
||||
|
||||
doReturn(new ColorScheme("§1", "§2", "§3")).when(planMock).getColorScheme();
|
||||
doReturn("1.0.0").when(planMock).getVersion();
|
||||
|
||||
TestLogger testLogger = new TestLogger();
|
||||
RunnableFactory runnableFactory = new TestRunnableFactory();
|
||||
PluginLogger testPluginLogger = new TestPluginLogger();
|
||||
DebugLogger debugLogger = new CombineDebugLogger(new MemoryDebugLogger());
|
||||
ErrorHandler consoleErrorLogger = new ConsoleErrorLogger(testPluginLogger);
|
||||
Timings timings = new Timings(debugLogger);
|
||||
|
||||
doReturn(testLogger).when(planMock).getLogger();
|
||||
doReturn(runnableFactory).when(planMock).getRunnableFactory();
|
||||
doReturn(testPluginLogger).when(planMock).getPluginLogger();
|
||||
doReturn(debugLogger).when(planMock).getDebugLogger();
|
||||
doReturn(consoleErrorLogger).when(planMock).getErrorHandler();
|
||||
doReturn(timings).when(planMock).getTimings();
|
||||
|
||||
return this;
|
||||
}
|
||||
@ -89,7 +68,6 @@ public class PlanBungeeMocker extends Mocker {
|
||||
}
|
||||
|
||||
PlanBungeeMocker withResourceFetchingFromJar() throws Exception {
|
||||
withPluginFiles();
|
||||
return this;
|
||||
}
|
||||
|
||||
|
@ -1,5 +1,5 @@
|
||||
dependencies {
|
||||
compile "com.djrapitops:AbstractPluginFramework-api:$abstractPluginFrameworkVersion"
|
||||
compile "net.playeranalytics:platform-abstraction-layer-api:$palVersion"
|
||||
compile project(":api")
|
||||
compileOnly project(":extensions")
|
||||
compile project(path: ":extensions", configuration: 'shadow')
|
||||
|
@ -1,35 +0,0 @@
|
||||
/*
|
||||
* This file is part of Player Analytics (Plan).
|
||||
*
|
||||
* Plan is free software: you can redistribute it and/or modify
|
||||
* it under the terms of the GNU Lesser General Public License v3 as published by
|
||||
* the Free Software Foundation, either version 3 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* Plan is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU Lesser General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU Lesser General Public License
|
||||
* along with Plan. If not, see <https://www.gnu.org/licenses/>.
|
||||
*/
|
||||
package com.djrapitops.plan;
|
||||
|
||||
/**
|
||||
* Identifiers for different Debug channels.
|
||||
*
|
||||
* @author AuroraLS3
|
||||
*/
|
||||
public class DebugChannels {
|
||||
|
||||
private DebugChannels() {
|
||||
/* Static variable class */
|
||||
}
|
||||
|
||||
public static final String IMPORTING = "Importing";
|
||||
public static final String SQL = "SQL";
|
||||
public static final String DATA_EXTENSIONS = "DataExtensions";
|
||||
public static final String JSON_CACHE = "JSON Cache";
|
||||
|
||||
}
|
@ -16,9 +16,8 @@
|
||||
*/
|
||||
package com.djrapitops.plan;
|
||||
|
||||
import com.djrapitops.plan.commands.use.ColorScheme;
|
||||
import com.djrapitops.plan.commands.use.Subcommand;
|
||||
import com.djrapitops.plugin.IPlugin;
|
||||
import com.djrapitops.plugin.command.ColorScheme;
|
||||
|
||||
import java.io.File;
|
||||
import java.io.InputStream;
|
||||
@ -28,18 +27,12 @@ import java.io.InputStream;
|
||||
*
|
||||
* @author AuroraLS3
|
||||
*/
|
||||
public interface PlanPlugin extends IPlugin {
|
||||
|
||||
@Override
|
||||
File getDataFolder();
|
||||
public interface PlanPlugin {
|
||||
|
||||
InputStream getResource(String resource);
|
||||
|
||||
ColorScheme getColorScheme();
|
||||
|
||||
@Override
|
||||
boolean isReloading();
|
||||
|
||||
PlanSystem getSystem();
|
||||
|
||||
default boolean isSystemEnabled() {
|
||||
@ -48,7 +41,11 @@ public interface PlanPlugin extends IPlugin {
|
||||
|
||||
void registerCommand(Subcommand command);
|
||||
|
||||
default void cancelAllTasks() {
|
||||
getRunnableFactory().cancelAllKnownTasks();
|
||||
}
|
||||
void onEnable();
|
||||
|
||||
void onDisable();
|
||||
|
||||
@Deprecated
|
||||
File getDataFolder();
|
||||
|
||||
}
|
||||
|
@ -39,10 +39,7 @@ import com.djrapitops.plan.storage.file.PlanFiles;
|
||||
import com.djrapitops.plan.utilities.logging.ErrorContext;
|
||||
import com.djrapitops.plan.utilities.logging.ErrorLogger;
|
||||
import com.djrapitops.plan.version.VersionChecker;
|
||||
import com.djrapitops.plugin.benchmarking.Benchmark;
|
||||
import com.djrapitops.plugin.benchmarking.Timings;
|
||||
import com.djrapitops.plugin.logging.L;
|
||||
import com.djrapitops.plugin.logging.console.PluginLogger;
|
||||
import net.playeranalytics.plugin.server.PluginLogger;
|
||||
|
||||
import javax.inject.Inject;
|
||||
import javax.inject.Singleton;
|
||||
@ -81,7 +78,6 @@ public class PlanSystem implements SubSystem {
|
||||
private final QuerySvc queryService;
|
||||
private final SettingsSvc settingsService;
|
||||
private final PluginLogger logger;
|
||||
private final Timings timings;
|
||||
private final ErrorLogger errorLogger;
|
||||
|
||||
@Inject
|
||||
@ -106,7 +102,6 @@ public class PlanSystem implements SubSystem {
|
||||
QuerySvc queryService,
|
||||
SettingsSvc settingsService,
|
||||
PluginLogger logger,
|
||||
Timings timings,
|
||||
ErrorLogger errorLogger,
|
||||
PlanAPI.PlanAPIHolder apiHolder
|
||||
) {
|
||||
@ -130,17 +125,14 @@ public class PlanSystem implements SubSystem {
|
||||
this.queryService = queryService;
|
||||
this.settingsService = settingsService;
|
||||
this.logger = logger;
|
||||
this.timings = timings;
|
||||
this.errorLogger = errorLogger;
|
||||
|
||||
logger.log(L.INFO_COLOR,
|
||||
"",
|
||||
"§2 ██▌",
|
||||
"§2 ██▌ ██▌",
|
||||
"§2 ██▌██▌██▌██▌ §2Player Analytics",
|
||||
"§2 ██▌██▌██▌██▌ §fv" + versionChecker.getCurrentVersion(),
|
||||
""
|
||||
);
|
||||
logger.info("");
|
||||
logger.info("§2 ██▌");
|
||||
logger.info("§2 ██▌ ██▌");
|
||||
logger.info("§2 ██▌██▌██▌██▌ §2Player Analytics");
|
||||
logger.info("§2 ██▌██▌██▌██▌ §fv" + versionChecker.getCurrentVersion());
|
||||
logger.info("");
|
||||
}
|
||||
|
||||
@Deprecated
|
||||
@ -185,13 +177,7 @@ public class PlanSystem implements SubSystem {
|
||||
|
||||
private void enableSystems(SubSystem... systems) {
|
||||
for (SubSystem system : systems) {
|
||||
logger.debug("Enabling: " + system.getClass().getSimpleName());
|
||||
timings.start("subsystem-enable");
|
||||
system.enable();
|
||||
timings.end("subsystem-enable")
|
||||
.map(Benchmark::toDurationString)
|
||||
.map(duration -> "Took " + duration)
|
||||
.ifPresent(logger::debug);
|
||||
}
|
||||
}
|
||||
|
||||
@ -222,7 +208,7 @@ public class PlanSystem implements SubSystem {
|
||||
system.disable();
|
||||
}
|
||||
} catch (Exception e) {
|
||||
errorLogger.log(L.WARN, e, ErrorContext.builder().related("Disabling PlanSystem: " + system).build());
|
||||
errorLogger.warn(e, ErrorContext.builder().related("Disabling PlanSystem: " + system).build());
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -16,8 +16,8 @@
|
||||
*/
|
||||
package com.djrapitops.plan;
|
||||
|
||||
import com.djrapitops.plugin.task.AbsRunnable;
|
||||
import com.djrapitops.plugin.task.RunnableFactory;
|
||||
import net.playeranalytics.plugin.scheduling.PluginRunnable;
|
||||
import net.playeranalytics.plugin.scheduling.RunnableFactory;
|
||||
|
||||
import javax.inject.Inject;
|
||||
import javax.inject.Singleton;
|
||||
@ -54,7 +54,7 @@ public class TaskSystem implements SubSystem {
|
||||
runnableFactory.cancelAllKnownTasks();
|
||||
}
|
||||
|
||||
public static abstract class Task extends AbsRunnable {
|
||||
public static abstract class Task extends PluginRunnable {
|
||||
public abstract void register(RunnableFactory runnableFactory);
|
||||
}
|
||||
|
||||
|
@ -28,8 +28,7 @@ import com.djrapitops.plan.storage.database.queries.containers.ContainerFetchQue
|
||||
import com.djrapitops.plan.storage.database.queries.objects.ServerQueries;
|
||||
import com.djrapitops.plan.storage.database.queries.objects.UserIdentifierQueries;
|
||||
import com.djrapitops.plan.utilities.logging.ErrorLogger;
|
||||
import com.djrapitops.plugin.logging.L;
|
||||
import com.djrapitops.plugin.logging.console.PluginLogger;
|
||||
import net.playeranalytics.plugin.server.PluginLogger;
|
||||
|
||||
import javax.inject.Inject;
|
||||
import javax.inject.Singleton;
|
||||
@ -94,7 +93,7 @@ public class CommonAPI implements PlanAPI {
|
||||
try {
|
||||
return queryDB(UserIdentifierQueries.fetchAllPlayerNames());
|
||||
} catch (DBOpException e) {
|
||||
errorLogger.log(L.ERROR, this.getClass(), e);
|
||||
errorLogger.error(e);
|
||||
return new HashMap<>();
|
||||
}
|
||||
}
|
||||
|
@ -22,7 +22,7 @@ import com.djrapitops.plan.data.plugin.PluginData;
|
||||
import com.djrapitops.plan.identification.UUIDUtility;
|
||||
import com.djrapitops.plan.storage.database.DBSystem;
|
||||
import com.djrapitops.plan.utilities.logging.ErrorLogger;
|
||||
import com.djrapitops.plugin.logging.console.PluginLogger;
|
||||
import net.playeranalytics.plugin.server.PluginLogger;
|
||||
|
||||
import javax.inject.Inject;
|
||||
import javax.inject.Singleton;
|
||||
|
@ -17,10 +17,7 @@
|
||||
package com.djrapitops.plan.commands;
|
||||
|
||||
import com.djrapitops.plan.commands.subcommands.*;
|
||||
import com.djrapitops.plan.commands.use.Arguments;
|
||||
import com.djrapitops.plan.commands.use.CMDSender;
|
||||
import com.djrapitops.plan.commands.use.CommandWithSubcommands;
|
||||
import com.djrapitops.plan.commands.use.Subcommand;
|
||||
import com.djrapitops.plan.commands.use.*;
|
||||
import com.djrapitops.plan.gathering.importing.ImportSystem;
|
||||
import com.djrapitops.plan.settings.Permissions;
|
||||
import com.djrapitops.plan.settings.locale.Locale;
|
||||
@ -29,8 +26,6 @@ import com.djrapitops.plan.settings.locale.lang.HelpLang;
|
||||
import com.djrapitops.plan.storage.database.DBType;
|
||||
import com.djrapitops.plan.utilities.logging.ErrorContext;
|
||||
import com.djrapitops.plan.utilities.logging.ErrorLogger;
|
||||
import com.djrapitops.plugin.command.ColorScheme;
|
||||
import com.djrapitops.plugin.logging.L;
|
||||
|
||||
import javax.inject.Inject;
|
||||
import javax.inject.Named;
|
||||
@ -91,7 +86,7 @@ public class PlanCommand {
|
||||
if (error instanceof IllegalArgumentException) {
|
||||
sender.send("§c" + error.getMessage());
|
||||
} else {
|
||||
errorLogger.log(L.WARN, error, ErrorContext.builder().related(sender, arguments).build());
|
||||
errorLogger.warn(error, ErrorContext.builder().related(sender, arguments).build());
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -18,6 +18,7 @@ package com.djrapitops.plan.commands.subcommands;
|
||||
|
||||
import com.djrapitops.plan.commands.use.Arguments;
|
||||
import com.djrapitops.plan.commands.use.CMDSender;
|
||||
import com.djrapitops.plan.commands.use.ColorScheme;
|
||||
import com.djrapitops.plan.delivery.formatting.Formatter;
|
||||
import com.djrapitops.plan.delivery.formatting.Formatters;
|
||||
import com.djrapitops.plan.exceptions.database.DBOpException;
|
||||
@ -42,8 +43,6 @@ import com.djrapitops.plan.storage.database.transactions.commands.SetServerAsUni
|
||||
import com.djrapitops.plan.storage.file.PlanFiles;
|
||||
import com.djrapitops.plan.utilities.logging.ErrorContext;
|
||||
import com.djrapitops.plan.utilities.logging.ErrorLogger;
|
||||
import com.djrapitops.plugin.command.ColorScheme;
|
||||
import com.djrapitops.plugin.logging.L;
|
||||
|
||||
import javax.inject.Inject;
|
||||
import javax.inject.Singleton;
|
||||
@ -128,7 +127,7 @@ public class DatabaseCommands {
|
||||
toDB.init();
|
||||
toDB.executeTransaction(new BackupCopyTransaction(fromDB, toDB)).get();
|
||||
} catch (DBOpException | ExecutionException e) {
|
||||
errorLogger.log(L.ERROR, e, ErrorContext.builder().related(sender, arguments).build());
|
||||
errorLogger.error(e, ErrorContext.builder().related(sender, arguments).build());
|
||||
} catch (InterruptedException e) {
|
||||
toDB.close();
|
||||
Thread.currentThread().interrupt();
|
||||
@ -203,7 +202,7 @@ public class DatabaseCommands {
|
||||
} catch (InterruptedException e) {
|
||||
Thread.currentThread().interrupt();
|
||||
} catch (DBOpException | ExecutionException e) {
|
||||
errorLogger.log(L.ERROR, e, ErrorContext.builder().related(backupDBFile, toDB.getType(), toDB.getState()).build());
|
||||
errorLogger.error(e, ErrorContext.builder().related(backupDBFile, toDB.getType(), toDB.getState()).build());
|
||||
sender.send(locale.getString(CommandLang.PROGRESS_FAIL, e.getMessage()));
|
||||
}
|
||||
}
|
||||
@ -265,7 +264,7 @@ public class DatabaseCommands {
|
||||
} catch (InterruptedException e) {
|
||||
Thread.currentThread().interrupt();
|
||||
} catch (Exception e) {
|
||||
errorLogger.log(L.ERROR, e, ErrorContext.builder().related(sender, fromDB.getName() + "->" + toDB.getName()).build());
|
||||
errorLogger.error(e, ErrorContext.builder().related(sender, fromDB.getName() + "->" + toDB.getName()).build());
|
||||
sender.send(locale.getString(CommandLang.PROGRESS_FAIL, e.getMessage()));
|
||||
}
|
||||
}
|
||||
@ -320,7 +319,7 @@ public class DatabaseCommands {
|
||||
Thread.currentThread().interrupt();
|
||||
} catch (DBOpException | ExecutionException e) {
|
||||
sender.send(locale.getString(CommandLang.PROGRESS_FAIL, e.getMessage()));
|
||||
errorLogger.log(L.ERROR, e, ErrorContext.builder().related(sender, fromDB.getName()).build());
|
||||
errorLogger.error(e, ErrorContext.builder().related(sender, fromDB.getName()).build());
|
||||
}
|
||||
}
|
||||
|
||||
@ -372,7 +371,7 @@ public class DatabaseCommands {
|
||||
Thread.currentThread().interrupt();
|
||||
} catch (DBOpException | ExecutionException e) {
|
||||
sender.send(locale.getString(CommandLang.PROGRESS_FAIL, e.getMessage()));
|
||||
errorLogger.log(L.ERROR, e, ErrorContext.builder().related(sender, database.getType().getName(), playerToRemove).build());
|
||||
errorLogger.error(e, ErrorContext.builder().related(sender, database.getType().getName(), playerToRemove).build());
|
||||
}
|
||||
}
|
||||
|
||||
@ -415,7 +414,7 @@ public class DatabaseCommands {
|
||||
config.set(DatabaseSettings.TYPE, toDB.getName());
|
||||
config.save();
|
||||
} catch (DBOpException | IOException e) {
|
||||
errorLogger.log(L.WARN, e, ErrorContext.builder().related(toDB).build());
|
||||
errorLogger.warn(e, ErrorContext.builder().related(toDB).build());
|
||||
sender.send(locale.getString(CommandLang.PROGRESS_FAIL, e.getMessage()));
|
||||
return;
|
||||
}
|
||||
|
@ -18,6 +18,7 @@ package com.djrapitops.plan.commands.subcommands;
|
||||
|
||||
import com.djrapitops.plan.commands.use.Arguments;
|
||||
import com.djrapitops.plan.commands.use.CMDSender;
|
||||
import com.djrapitops.plan.commands.use.ColorScheme;
|
||||
import com.djrapitops.plan.commands.use.MessageBuilder;
|
||||
import com.djrapitops.plan.delivery.domain.auth.User;
|
||||
import com.djrapitops.plan.delivery.rendering.html.Html;
|
||||
@ -33,7 +34,6 @@ import com.djrapitops.plan.storage.database.Database;
|
||||
import com.djrapitops.plan.storage.database.queries.objects.ServerQueries;
|
||||
import com.djrapitops.plan.storage.database.queries.objects.UserIdentifierQueries;
|
||||
import com.djrapitops.plan.storage.database.queries.objects.WebUserQueries;
|
||||
import com.djrapitops.plugin.command.ColorScheme;
|
||||
|
||||
import javax.inject.Inject;
|
||||
import javax.inject.Singleton;
|
||||
|
@ -29,7 +29,7 @@ import com.djrapitops.plan.storage.database.queries.objects.ServerQueries;
|
||||
import com.djrapitops.plan.utilities.logging.ErrorContext;
|
||||
import com.djrapitops.plan.utilities.logging.ErrorLogger;
|
||||
import com.djrapitops.plan.version.VersionChecker;
|
||||
import com.djrapitops.plugin.logging.L;
|
||||
import net.playeranalytics.plugin.PluginInformation;
|
||||
|
||||
import javax.inject.Inject;
|
||||
import javax.inject.Singleton;
|
||||
@ -39,6 +39,7 @@ import java.util.Optional;
|
||||
public class PluginStatusCommands {
|
||||
|
||||
private final PlanPlugin plugin;
|
||||
private final PluginInformation pluginInformation;
|
||||
private final Locale locale;
|
||||
private final DBSystem dbSystem;
|
||||
private final Status status;
|
||||
@ -48,6 +49,7 @@ public class PluginStatusCommands {
|
||||
@Inject
|
||||
public PluginStatusCommands(
|
||||
PlanPlugin plugin,
|
||||
PluginInformation pluginInformation,
|
||||
Locale locale,
|
||||
DBSystem dbSystem,
|
||||
Status status,
|
||||
@ -55,6 +57,7 @@ public class PluginStatusCommands {
|
||||
ErrorLogger errorLogger
|
||||
) {
|
||||
this.plugin = plugin;
|
||||
this.pluginInformation = pluginInformation;
|
||||
this.locale = locale;
|
||||
this.dbSystem = dbSystem;
|
||||
this.status = status;
|
||||
@ -65,10 +68,11 @@ public class PluginStatusCommands {
|
||||
public void onReload(CMDSender sender) {
|
||||
new Thread(() -> {
|
||||
try {
|
||||
plugin.reloadPlugin(true);
|
||||
plugin.onDisable();
|
||||
plugin.onEnable();
|
||||
sender.send(locale.getString(CommandLang.RELOAD_COMPLETE));
|
||||
} catch (Exception e) {
|
||||
errorLogger.log(L.CRITICAL, e, ErrorContext.builder().related(sender, "reload", Thread.currentThread().getName()).build());
|
||||
errorLogger.critical(e, ErrorContext.builder().related(sender, "reload", Thread.currentThread().getName()).build());
|
||||
sender.send(locale.getString(CommandLang.RELOAD_FAILED));
|
||||
} finally {
|
||||
Thread.currentThread().interrupt();
|
||||
@ -105,7 +109,7 @@ public class PluginStatusCommands {
|
||||
String[] messages = {
|
||||
locale.getString(CommandLang.HEADER_INFO),
|
||||
"",
|
||||
locale.getString(CommandLang.INFO_VERSION, plugin.getVersion()),
|
||||
locale.getString(CommandLang.INFO_VERSION, pluginInformation.getVersion()),
|
||||
locale.getString(CommandLang.INFO_UPDATE, updateAvailable),
|
||||
locale.getString(CommandLang.INFO_DATABASE, database.getType().getName() + " (" + database.getState().name() + ")"),
|
||||
locale.getString(CommandLang.INFO_PROXY_CONNECTION, proxyAvailable),
|
||||
|
@ -18,6 +18,7 @@ package com.djrapitops.plan.commands.subcommands;
|
||||
|
||||
import com.djrapitops.plan.commands.use.Arguments;
|
||||
import com.djrapitops.plan.commands.use.CMDSender;
|
||||
import com.djrapitops.plan.commands.use.ColorScheme;
|
||||
import com.djrapitops.plan.delivery.domain.auth.User;
|
||||
import com.djrapitops.plan.delivery.webserver.auth.FailReason;
|
||||
import com.djrapitops.plan.delivery.webserver.auth.RegistrationBin;
|
||||
@ -34,9 +35,7 @@ import com.djrapitops.plan.storage.database.transactions.commands.RemoveWebUserT
|
||||
import com.djrapitops.plan.utilities.PassEncryptUtil;
|
||||
import com.djrapitops.plan.utilities.logging.ErrorContext;
|
||||
import com.djrapitops.plan.utilities.logging.ErrorLogger;
|
||||
import com.djrapitops.plugin.command.ColorScheme;
|
||||
import com.djrapitops.plugin.logging.L;
|
||||
import com.djrapitops.plugin.logging.console.PluginLogger;
|
||||
import net.playeranalytics.plugin.server.PluginLogger;
|
||||
|
||||
import javax.inject.Inject;
|
||||
import javax.inject.Singleton;
|
||||
@ -161,7 +160,7 @@ public class RegistrationCommands {
|
||||
} catch (InterruptedException e) {
|
||||
Thread.currentThread().interrupt();
|
||||
} catch (DBOpException | ExecutionException e) {
|
||||
errorLogger.log(L.WARN, e, ErrorContext.builder().related(sender, user, permissionLevel).build());
|
||||
errorLogger.warn(e, ErrorContext.builder().related(sender, user, permissionLevel).build());
|
||||
}
|
||||
}
|
||||
|
||||
@ -221,7 +220,7 @@ public class RegistrationCommands {
|
||||
} catch (InterruptedException e) {
|
||||
Thread.currentThread().interrupt();
|
||||
} catch (ExecutionException e) {
|
||||
errorLogger.log(L.WARN, e, ErrorContext.builder().related("unregister command", sender, sender.getPlayerName().orElse("console"), arguments).build());
|
||||
errorLogger.warn(e, ErrorContext.builder().related("unregister command", sender, sender.getPlayerName().orElse("console"), arguments).build());
|
||||
}
|
||||
} else {
|
||||
sender.send(colors.getMainColor() + locale.getString(CommandLang.CONFIRM_CANCELLED_UNREGISTER, presentUser.getUsername()));
|
||||
|
@ -0,0 +1,106 @@
|
||||
/*
|
||||
* The MIT License (MIT)
|
||||
*
|
||||
* Copyright (c) 2021 AuroraLS3
|
||||
*
|
||||
* Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
* of this software and associated documentation files (the "Software"), to deal
|
||||
* in the Software without restriction, including without limitation the rights
|
||||
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||
* copies of the Software, and to permit persons to whom the Software is
|
||||
* furnished to do so, subject to the following conditions:
|
||||
*
|
||||
* The above copyright notice and this permission notice shall be included in all
|
||||
* copies or substantial portions of the Software.
|
||||
*
|
||||
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||
* SOFTWARE.
|
||||
*/
|
||||
package com.djrapitops.plan.commands.use;
|
||||
|
||||
import java.util.Arrays;
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* Class that contains ChatColors for plugins.
|
||||
* <p>
|
||||
* Colors should be defined in MineCraft format, eg. "§1" "§a" "§o§3"
|
||||
*
|
||||
* @author AuroraLS3
|
||||
*/
|
||||
public class ColorScheme {
|
||||
|
||||
private final List<String> colors;
|
||||
|
||||
/**
|
||||
* Create a new ColorScheme.
|
||||
*
|
||||
* @param colors colors in MineCraft format, eg. "§1" "§a" "§o§3"
|
||||
*/
|
||||
public ColorScheme(String... colors) {
|
||||
this(Arrays.asList(colors));
|
||||
}
|
||||
|
||||
/**
|
||||
* Create a new ColorScheme.
|
||||
*
|
||||
* @param colors colors in MineCraft format, eg. "§1" "§a" "§o§3"
|
||||
*/
|
||||
public ColorScheme(List<String> colors) {
|
||||
this.colors = colors;
|
||||
}
|
||||
|
||||
/**
|
||||
* Get a color with a particular index.
|
||||
*
|
||||
* @param i Index of the color.
|
||||
* @return a color code, eg "§1" or empty string if index is out of bounds.
|
||||
*/
|
||||
public String getColor(int i) {
|
||||
if (i < colors.size()) {
|
||||
return colors.get(i);
|
||||
}
|
||||
return "";
|
||||
}
|
||||
|
||||
/**
|
||||
* Retrieve the first defined color.
|
||||
*
|
||||
* @return a color code, eg "§1" or empty string if index is out of bounds.
|
||||
*/
|
||||
public String getMainColor() {
|
||||
return getColor(0);
|
||||
}
|
||||
|
||||
/**
|
||||
* Retrieve the second defined color.
|
||||
*
|
||||
* @return a color code, eg "§1" or empty string if index is out of bounds.
|
||||
*/
|
||||
public String getSecondaryColor() {
|
||||
return getColor(1);
|
||||
}
|
||||
|
||||
/**
|
||||
* Retrieve the third defined color.
|
||||
*
|
||||
* @return a color code, eg "§1" or empty string if index is out of bounds.
|
||||
*/
|
||||
public String getTertiaryColor() {
|
||||
return getColor(2);
|
||||
}
|
||||
|
||||
/**
|
||||
* Retrieve the fourth defined color.
|
||||
*
|
||||
* @return a color code, eg "§1" or empty string if index is out of bounds.
|
||||
*/
|
||||
public String getExtraColor() {
|
||||
return getColor(3);
|
||||
}
|
||||
}
|
@ -19,7 +19,6 @@ package com.djrapitops.plan.commands.use;
|
||||
import com.djrapitops.plan.settings.locale.Locale;
|
||||
import com.djrapitops.plan.settings.locale.lang.CommandLang;
|
||||
import com.djrapitops.plan.utilities.java.TriConsumer;
|
||||
import com.djrapitops.plugin.command.ColorScheme;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.Collections;
|
||||
|
@ -16,7 +16,6 @@
|
||||
*/
|
||||
package com.djrapitops.plan.commands.use;
|
||||
|
||||
import com.djrapitops.plugin.command.ColorScheme;
|
||||
import org.apache.commons.text.TextStringBuilder;
|
||||
|
||||
import java.util.ArrayList;
|
||||
|
@ -17,8 +17,6 @@
|
||||
package com.djrapitops.plan.data.element;
|
||||
|
||||
import com.djrapitops.plan.delivery.formatting.Formatter;
|
||||
import com.djrapitops.plan.delivery.rendering.html.icon.Icon;
|
||||
import com.djrapitops.plugin.utilities.ArrayUtil;
|
||||
|
||||
import java.io.Serializable;
|
||||
import java.util.ArrayList;
|
||||
@ -53,9 +51,7 @@ public class TableContainer {
|
||||
}
|
||||
|
||||
public TableContainer(boolean players, String... header) {
|
||||
this(
|
||||
ArrayUtil.merge(new String[]{Icon.called("user").build() + " Player"}, header)
|
||||
);
|
||||
this(header);
|
||||
}
|
||||
|
||||
public final void addRow(Serializable... values) {
|
||||
|
@ -19,7 +19,6 @@ package com.djrapitops.plan.delivery.domain.mutators;
|
||||
import com.djrapitops.plan.delivery.rendering.json.graphs.line.LineGraph;
|
||||
import com.djrapitops.plan.delivery.rendering.json.graphs.line.Point;
|
||||
import com.djrapitops.plan.utilities.java.Lists;
|
||||
import com.djrapitops.plugin.utilities.Verify;
|
||||
|
||||
import java.util.*;
|
||||
|
||||
@ -30,7 +29,7 @@ public class MutatorFunctions {
|
||||
}
|
||||
|
||||
public static NavigableMap<Long, Integer> addMissing(NavigableMap<Long, Integer> points, long accuracy, Integer replacement) {
|
||||
if (Verify.isEmpty(points)) return points;
|
||||
if (points == null || points.isEmpty()) return points;
|
||||
|
||||
NavigableMap<Long, Integer> filled = new TreeMap<>();
|
||||
Long lastX = null;
|
||||
@ -45,7 +44,7 @@ public class MutatorFunctions {
|
||||
}
|
||||
|
||||
long now = System.currentTimeMillis();
|
||||
if (lastX != null && now - lastX > accuracy) {
|
||||
if (now - lastX > accuracy) {
|
||||
addMissing(lastX, now, filled, accuracy, replacement);
|
||||
}
|
||||
|
||||
@ -61,7 +60,7 @@ public class MutatorFunctions {
|
||||
}
|
||||
|
||||
public static List<Point> addMissing(List<Point> points, LineGraph.GapStrategy gapStrategy) {
|
||||
if (Verify.isEmpty(points)) return points;
|
||||
if (points == null || points.isEmpty()) return points;
|
||||
|
||||
List<Point> filled = new ArrayList<>();
|
||||
Long lastX = null;
|
||||
|
@ -27,7 +27,7 @@ import com.djrapitops.plan.gathering.domain.Ping;
|
||||
import com.djrapitops.plan.gathering.domain.Session;
|
||||
import com.djrapitops.plan.utilities.java.Lists;
|
||||
import com.djrapitops.plan.utilities.java.Maps;
|
||||
import com.djrapitops.plugin.api.TimeAmount;
|
||||
import net.playeranalytics.plugin.scheduling.TimeAmount;
|
||||
|
||||
import java.util.*;
|
||||
import java.util.function.Function;
|
||||
|
@ -22,8 +22,8 @@ import com.djrapitops.plan.settings.config.paths.ExportSettings;
|
||||
import com.djrapitops.plan.storage.database.DBSystem;
|
||||
import com.djrapitops.plan.storage.database.queries.objects.ServerQueries;
|
||||
import com.djrapitops.plan.utilities.logging.ErrorLogger;
|
||||
import com.djrapitops.plugin.api.TimeAmount;
|
||||
import com.djrapitops.plugin.task.RunnableFactory;
|
||||
import net.playeranalytics.plugin.scheduling.RunnableFactory;
|
||||
import net.playeranalytics.plugin.scheduling.TimeAmount;
|
||||
|
||||
import javax.inject.Inject;
|
||||
import javax.inject.Singleton;
|
||||
@ -68,7 +68,7 @@ public class ExportScheduler {
|
||||
|
||||
private void schedulePlayersPageExport() {
|
||||
long period = TimeAmount.toTicks(config.get(ExportSettings.EXPORT_PERIOD), TimeUnit.MILLISECONDS);
|
||||
runnableFactory.create("Players page export",
|
||||
runnableFactory.create(
|
||||
new ExportTask(exporter, Exporter::exportPlayersPage, errorLogger)
|
||||
).runTaskTimerAsynchronously(0L, period);
|
||||
}
|
||||
@ -84,14 +84,14 @@ public class ExportScheduler {
|
||||
long offset = period / serverCount;
|
||||
|
||||
Optional<Server> proxy = servers.stream().filter(Server::isProxy).findFirst();
|
||||
proxy.ifPresent(mainServer -> runnableFactory.create("Network export",
|
||||
proxy.ifPresent(mainServer -> runnableFactory.create(
|
||||
new ExportTask(exporter, same -> same.exportServerPage(mainServer), errorLogger))
|
||||
.runTaskTimerAsynchronously(0L, period)
|
||||
);
|
||||
|
||||
int offsetMultiplier = proxy.isPresent() ? 1 : 0; // Delay first server export if on a network.
|
||||
for (Server server : servers) {
|
||||
runnableFactory.create("Server export",
|
||||
runnableFactory.create(
|
||||
new ExportTask(exporter, same -> {
|
||||
same.exportServerPage(server);
|
||||
same.exportServerJSON(server);
|
||||
|
@ -21,10 +21,9 @@ import com.djrapitops.plan.exceptions.database.DBOpException;
|
||||
import com.djrapitops.plan.utilities.java.ThrowingConsumer;
|
||||
import com.djrapitops.plan.utilities.logging.ErrorContext;
|
||||
import com.djrapitops.plan.utilities.logging.ErrorLogger;
|
||||
import com.djrapitops.plugin.logging.L;
|
||||
import com.djrapitops.plugin.task.AbsRunnable;
|
||||
import net.playeranalytics.plugin.scheduling.PluginRunnable;
|
||||
|
||||
public class ExportTask extends AbsRunnable {
|
||||
public class ExportTask extends PluginRunnable {
|
||||
|
||||
private final Exporter exporter;
|
||||
private final ThrowingConsumer<Exporter, ExportException> exportAction;
|
||||
@ -45,11 +44,11 @@ public class ExportTask extends AbsRunnable {
|
||||
try {
|
||||
exportAction.accept(exporter);
|
||||
} catch (ExportException e) {
|
||||
errorLogger.log(L.WARN, e, ErrorContext.builder().related("Export task run").build());
|
||||
errorLogger.warn(e, ErrorContext.builder().related("Export task run").build());
|
||||
} catch (DBOpException dbException) {
|
||||
handleDBException(dbException);
|
||||
} catch (Exception | NoClassDefFoundError | NoSuchMethodError | NoSuchFieldError e) {
|
||||
errorLogger.log(L.ERROR, e, ErrorContext.builder()
|
||||
errorLogger.error(e, ErrorContext.builder()
|
||||
.whatToDo("Export Task Disabled due to error - reload Plan to re-enable.")
|
||||
.related("Export task run").build());
|
||||
cancel();
|
||||
@ -58,11 +57,11 @@ public class ExportTask extends AbsRunnable {
|
||||
|
||||
private void handleDBException(DBOpException dbException) {
|
||||
if (dbException.getMessage().contains("closed")) {
|
||||
errorLogger.log(L.ERROR, dbException, ErrorContext.builder()
|
||||
errorLogger.error(dbException, ErrorContext.builder()
|
||||
.whatToDo("Export Task Disabled due to error - database is closing, so this error can be ignored.).")
|
||||
.related("Export task run").build());
|
||||
} else {
|
||||
errorLogger.log(L.ERROR, dbException, ErrorContext.builder()
|
||||
errorLogger.error(dbException, ErrorContext.builder()
|
||||
.whatToDo("Export Task Disabled due to error - reload Plan to re-enable.")
|
||||
.related("Export task run").build());
|
||||
}
|
||||
|
@ -16,10 +16,10 @@
|
||||
*/
|
||||
package com.djrapitops.plan.delivery.formatting;
|
||||
|
||||
import com.djrapitops.plugin.utilities.Format;
|
||||
import org.apache.commons.lang3.StringUtils;
|
||||
|
||||
/**
|
||||
* Formatter for entity names, that capitalizes the first word and removes symbols and numbers.
|
||||
* Formatter for entity names, that capitalizes the first word and removes symbols.
|
||||
*
|
||||
* @author AuroraLS3
|
||||
*/
|
||||
@ -27,6 +27,8 @@ public class EntityNameFormatter implements Formatter<String> {
|
||||
|
||||
@Override
|
||||
public String apply(String name) {
|
||||
return new Format(name).removeNumbers().removeSymbols().capitalize().toString();
|
||||
return StringUtils.capitalize(
|
||||
StringUtils.removeAll(name, "[^a-zA-Z0-9_\\\\s]*").toLowerCase()
|
||||
);
|
||||
}
|
||||
}
|
@ -16,7 +16,6 @@
|
||||
*/
|
||||
package com.djrapitops.plan.delivery.formatting;
|
||||
|
||||
import com.djrapitops.plugin.utilities.Format;
|
||||
import org.apache.commons.lang3.StringUtils;
|
||||
import org.apache.commons.text.TextStringBuilder;
|
||||
|
||||
@ -33,7 +32,10 @@ public class ItemNameFormatter implements Formatter<String> {
|
||||
public String apply(String name) {
|
||||
String[] parts = StringUtils.split(name, '_');
|
||||
TextStringBuilder builder = new TextStringBuilder();
|
||||
builder.appendWithSeparators(Arrays.stream(parts).map(part -> new Format(part).capitalize()).iterator(), " ");
|
||||
builder.appendWithSeparators(Arrays.stream(parts)
|
||||
.map(StringUtils::lowerCase)
|
||||
.map(StringUtils::capitalize)
|
||||
.iterator(), " ");
|
||||
return builder.toString();
|
||||
}
|
||||
}
|
@ -16,8 +16,6 @@
|
||||
*/
|
||||
package com.djrapitops.plan.delivery.rendering.html.icon;
|
||||
|
||||
import com.djrapitops.plugin.utilities.Verify;
|
||||
|
||||
public class Icon {
|
||||
|
||||
private Family type;
|
||||
@ -107,7 +105,7 @@ public class Icon {
|
||||
}
|
||||
|
||||
public Icon build() {
|
||||
Verify.nullCheck(icon.name, () -> new IllegalStateException("'name' was not defined yet!"));
|
||||
if (icon.name == null) throw new IllegalStateException("'name' was not defined yet!");
|
||||
return icon;
|
||||
}
|
||||
|
||||
|
@ -16,7 +16,7 @@
|
||||
*/
|
||||
package com.djrapitops.plan.delivery.rendering.html.structure;
|
||||
|
||||
import com.djrapitops.plugin.utilities.Format;
|
||||
import org.apache.commons.lang3.StringUtils;
|
||||
|
||||
/**
|
||||
* Represents a structural HTML element that has Tabs on the top.
|
||||
@ -81,7 +81,7 @@ public class TabsElement {
|
||||
}
|
||||
|
||||
public String getId() {
|
||||
return "tab_" + new Format(navText).removeSymbols().removeWhitespace().lowerCase().toString();
|
||||
return "tab_" + StringUtils.removeAll(navText, "[^a-zA-Z0-9]*").toLowerCase();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -46,7 +46,7 @@ import com.djrapitops.plan.storage.database.queries.analysis.PlayerCountQueries;
|
||||
import com.djrapitops.plan.storage.database.queries.objects.*;
|
||||
import com.djrapitops.plan.utilities.java.Lists;
|
||||
import com.djrapitops.plan.utilities.java.Maps;
|
||||
import com.djrapitops.plugin.api.TimeAmount;
|
||||
import net.playeranalytics.plugin.scheduling.TimeAmount;
|
||||
|
||||
import javax.inject.Inject;
|
||||
import javax.inject.Singleton;
|
||||
|
@ -1,270 +0,0 @@
|
||||
/*
|
||||
* This file is part of Player Analytics (Plan).
|
||||
*
|
||||
* Plan is free software: you can redistribute it and/or modify
|
||||
* it under the terms of the GNU Lesser General Public License v3 as published by
|
||||
* the Free Software Foundation, either version 3 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* Plan is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU Lesser General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU Lesser General Public License
|
||||
* along with Plan. If not, see <https://www.gnu.org/licenses/>.
|
||||
*/
|
||||
package com.djrapitops.plan.delivery.rendering.pages;
|
||||
|
||||
import com.djrapitops.plan.delivery.domain.keys.SessionKeys;
|
||||
import com.djrapitops.plan.delivery.formatting.Formatter;
|
||||
import com.djrapitops.plan.delivery.formatting.Formatters;
|
||||
import com.djrapitops.plan.delivery.formatting.PlaceholderReplacer;
|
||||
import com.djrapitops.plan.delivery.rendering.html.Contributors;
|
||||
import com.djrapitops.plan.delivery.rendering.html.Html;
|
||||
import com.djrapitops.plan.delivery.rendering.html.icon.Icon;
|
||||
import com.djrapitops.plan.delivery.rendering.html.structure.TabsElement;
|
||||
import com.djrapitops.plan.gathering.cache.SessionCache;
|
||||
import com.djrapitops.plan.gathering.domain.Session;
|
||||
import com.djrapitops.plan.identification.ServerInfo;
|
||||
import com.djrapitops.plan.identification.properties.ServerProperties;
|
||||
import com.djrapitops.plan.storage.database.Database;
|
||||
import com.djrapitops.plan.storage.file.ResourceCache;
|
||||
import com.djrapitops.plan.utilities.logging.ErrorContext;
|
||||
import com.djrapitops.plan.utilities.logging.ErrorLogger;
|
||||
import com.djrapitops.plan.version.VersionChecker;
|
||||
import com.djrapitops.plugin.benchmarking.Benchmark;
|
||||
import com.djrapitops.plugin.benchmarking.Timings;
|
||||
import com.djrapitops.plugin.logging.L;
|
||||
import com.djrapitops.plugin.logging.debug.CombineDebugLogger;
|
||||
import com.djrapitops.plugin.logging.debug.DebugLogger;
|
||||
import com.djrapitops.plugin.logging.debug.MemoryDebugLogger;
|
||||
|
||||
import java.util.*;
|
||||
|
||||
/**
|
||||
* Html String generator for /debug page.
|
||||
*
|
||||
* @author AuroraLS3
|
||||
*/
|
||||
public class DebugPage implements Page {
|
||||
|
||||
private final String template;
|
||||
private final Database database;
|
||||
private final ServerInfo serverInfo;
|
||||
private final VersionChecker versionChecker;
|
||||
private final CombineDebugLogger debugLogger;
|
||||
private final Timings timings;
|
||||
private final ErrorLogger errorLogger;
|
||||
|
||||
private final Formatter<Long> yearFormatter;
|
||||
|
||||
DebugPage(
|
||||
String htmlTemplate,
|
||||
|
||||
Database database,
|
||||
ServerInfo serverInfo,
|
||||
Formatters formatters,
|
||||
VersionChecker versionChecker,
|
||||
DebugLogger debugLogger,
|
||||
Timings timings,
|
||||
ErrorLogger errorLogger
|
||||
) {
|
||||
this.template = htmlTemplate;
|
||||
|
||||
this.database = database;
|
||||
this.serverInfo = serverInfo;
|
||||
this.versionChecker = versionChecker;
|
||||
this.debugLogger = (CombineDebugLogger) debugLogger;
|
||||
this.timings = timings;
|
||||
this.errorLogger = errorLogger;
|
||||
|
||||
this.yearFormatter = formatters.yearLong();
|
||||
}
|
||||
|
||||
@Override
|
||||
public String toHtml() {
|
||||
PlaceholderReplacer placeholders = new PlaceholderReplacer();
|
||||
placeholders.put("title", Icon.called("bug") + " Debug Information");
|
||||
placeholders.put("titleText", "Debug Information");
|
||||
placeholders.put("paragraph", createContent());
|
||||
placeholders.put("version", versionChecker.getUpdateButton().orElse(versionChecker.getCurrentVersionButton()));
|
||||
placeholders.put("updateModal", versionChecker.getUpdateModal());
|
||||
placeholders.put("contributors", Contributors.generateContributorHtml());
|
||||
return placeholders.apply(template);
|
||||
}
|
||||
|
||||
private String createContent() {
|
||||
StringBuilder preContent = new StringBuilder();
|
||||
|
||||
String issueLink = Html.LINK_EXTERNAL.create("https://github.com/plan-player-analytics/Plan/issues/new", "Create new issue on Github");
|
||||
String hastebinLink = Html.LINK_EXTERNAL.create("https://hastebin.com/", "Create a new hastebin paste");
|
||||
|
||||
preContent.append("<p>")
|
||||
.append(Html.separateWithDots(issueLink, hastebinLink)).append("<br><br>")
|
||||
.append("This page contains debug information for an issue ticket. You can copy it directly into the issue, the info is pre-formatted.")
|
||||
.append("</p>");
|
||||
|
||||
TabsElement.Tab info = new TabsElement.Tab(Icon.called("server") + " Server Information", createServerInfoContent());
|
||||
TabsElement.Tab errors = new TabsElement.Tab(Icon.called("exclamation-circle") + " Errors", createErrorContent());
|
||||
TabsElement.Tab debugLog = new TabsElement.Tab(Icon.called("bug") + " Debug Log", createDebugLogContent());
|
||||
TabsElement.Tab caches = new TabsElement.Tab(Icon.called("archive") + " Plan Caches", createCacheContent());
|
||||
|
||||
TabsElement tabs = new TabsElement(info, errors, debugLog, caches);
|
||||
|
||||
return preContent + tabs.toHtmlFull();
|
||||
}
|
||||
|
||||
private String createCacheContent() {
|
||||
StringBuilder content = new StringBuilder();
|
||||
appendResourceCache(content);
|
||||
appendSessionCache(content);
|
||||
return content.toString();
|
||||
}
|
||||
|
||||
private void appendResourceCache(StringBuilder content) {
|
||||
try {
|
||||
content.append("<pre>### Cached Resources (from File or Jar):<br><br>");
|
||||
List<String> cacheKeys = ResourceCache.getCachedResourceNames();
|
||||
if (cacheKeys.isEmpty()) {
|
||||
content.append("Empty");
|
||||
}
|
||||
for (String cacheKey : cacheKeys) {
|
||||
content.append("- ").append(cacheKey).append("<br>");
|
||||
}
|
||||
content.append("</pre>");
|
||||
} catch (Exception e) {
|
||||
errorLogger.log(L.WARN, e, ErrorContext.builder().related("/debug page access, resource cache").build());
|
||||
}
|
||||
}
|
||||
|
||||
private void appendSessionCache(StringBuilder content) {
|
||||
try {
|
||||
content.append("<pre>### Session Cache:<br><br>");
|
||||
content.append("Name | Session Started <br>")
|
||||
.append("-- | -- <br>");
|
||||
Set<Map.Entry<UUID, Session>> sessions = SessionCache.getActiveSessions().entrySet();
|
||||
if (sessions.isEmpty()) {
|
||||
content.append("Empty");
|
||||
}
|
||||
for (Map.Entry<UUID, Session> entry : sessions) {
|
||||
Session session = entry.getValue();
|
||||
String name = session.getValue(SessionKeys.NAME).orElse(entry.getKey().toString());
|
||||
String start = session.getValue(SessionKeys.START).map(yearFormatter).orElse("Unknown");
|
||||
content.append(name).append(" | ").append(start).append("<br>");
|
||||
}
|
||||
content.append("</pre>");
|
||||
} catch (Exception e) {
|
||||
errorLogger.log(L.WARN, e, ErrorContext.builder().related("/debug page access, Session cache").build());
|
||||
}
|
||||
}
|
||||
|
||||
private String createDebugLogContent() {
|
||||
StringBuilder content = new StringBuilder();
|
||||
appendDebugLog(content);
|
||||
return content.toString();
|
||||
}
|
||||
|
||||
private String createErrorContent() {
|
||||
StringBuilder content = new StringBuilder();
|
||||
appendLoggedErrors(content);
|
||||
return content.toString();
|
||||
}
|
||||
|
||||
private String createServerInfoContent() {
|
||||
StringBuilder content = new StringBuilder();
|
||||
|
||||
appendServerInformation(content);
|
||||
appendBenchmarks(content);
|
||||
|
||||
return content.toString();
|
||||
}
|
||||
|
||||
private void appendServerInformation(StringBuilder content) {
|
||||
ServerProperties serverProperties = serverInfo.getServerProperties();
|
||||
|
||||
content.append("<pre>### Server Information<br>")
|
||||
.append("**Plan Version:** ")
|
||||
.append(versionChecker.getCurrentVersion())
|
||||
.append("<br>");
|
||||
|
||||
content.append("**Server:** ");
|
||||
content.append(serverProperties.getName())
|
||||
.append(" ").append(serverProperties.getImplVersion())
|
||||
.append(" (").append(serverProperties.getVersion());
|
||||
content.append(")<br>");
|
||||
|
||||
content.append("**Database:** ").append(database.getType().getName());
|
||||
content.append("<br><br>");
|
||||
|
||||
Properties properties = System.getProperties();
|
||||
|
||||
String osName = properties.getProperty("os.name");
|
||||
String osVersion = properties.getProperty("os.version");
|
||||
String osArch = properties.getProperty("os.arch");
|
||||
|
||||
String javaVendor = properties.getProperty("java.vendor");
|
||||
String javaVersion = properties.getProperty("java.version");
|
||||
|
||||
String javaVMVendor = properties.getProperty("java.vm.vendor");
|
||||
String javaVMName = properties.getProperty("java.vm.name");
|
||||
String javaVMVersion = properties.getProperty("java.vm.version");
|
||||
|
||||
content.append("**Operating SubSystem:** ").append(osName).append(" (").append(osArch)
|
||||
.append(") version ").append(osVersion).append("<br>");
|
||||
|
||||
content.append("**Java Version:** ").append(javaVersion).append(", ").append(javaVendor).append("<br>");
|
||||
content.append("**Java VM Version:** ").append(javaVMName).append(" version ").append(javaVMVersion)
|
||||
.append(", ").append(javaVMVendor).append("<br>");
|
||||
|
||||
content.append("</pre>");
|
||||
}
|
||||
|
||||
private void appendBenchmarks(StringBuilder content) {
|
||||
content.append("<pre>### Benchmarks<br>```<br>");
|
||||
try {
|
||||
for (Benchmark result : timings.getAverageResults()) {
|
||||
content.append(result.toString()).append("<br>");
|
||||
}
|
||||
} catch (Exception e) {
|
||||
content.append("Exception on Timings#getAverageResults");
|
||||
}
|
||||
content.append("```</pre>");
|
||||
}
|
||||
|
||||
private void appendLoggedErrors(StringBuilder content) {
|
||||
content.append("<pre>### Logged Errors<br>");
|
||||
content.append("Using incompatible ErrorHandler");
|
||||
content.append("</pre>");
|
||||
}
|
||||
|
||||
private void appendDebugLog(StringBuilder content) {
|
||||
Optional<MemoryDebugLogger> memoryDebugLogger = this.debugLogger.getDebugLogger(MemoryDebugLogger.class);
|
||||
Map<String, List<String>> channels = memoryDebugLogger.map(MemoryDebugLogger::getChannels).orElse(new HashMap<>());
|
||||
|
||||
if (channels.isEmpty()) {
|
||||
content.append("Incompatible Debug Logger in use (No MemoryDebugLogger)");
|
||||
return;
|
||||
}
|
||||
|
||||
TabsElement.Tab[] tabs = channels.entrySet().stream()
|
||||
.sorted((one, two) -> String.CASE_INSENSITIVE_ORDER.compare(one.getKey(), two.getKey()))
|
||||
.map(channel -> {
|
||||
String name = channel.getKey().isEmpty() ? "Default" : channel.getKey();
|
||||
return new TabsElement.Tab(name, debugChannelContent(name, channel.getValue()));
|
||||
})
|
||||
.toArray(TabsElement.Tab[]::new);
|
||||
|
||||
content.append(new TabsElement(tabs).toHtmlFull());
|
||||
}
|
||||
|
||||
private String debugChannelContent(String channelName, List<String> lines) {
|
||||
StringBuilder content = new StringBuilder();
|
||||
content.append("<pre>### Debug (").append(channelName).append(")<br>```<br>");
|
||||
for (String line : lines) {
|
||||
content.append(line).append("<br>");
|
||||
}
|
||||
content.append("```</pre>");
|
||||
return content.toString();
|
||||
}
|
||||
}
|
@ -21,7 +21,6 @@ import com.djrapitops.plan.identification.ServerInfo;
|
||||
import com.djrapitops.plan.settings.locale.Locale;
|
||||
import com.djrapitops.plan.settings.theme.Theme;
|
||||
import com.djrapitops.plan.utilities.java.UnaryChain;
|
||||
import com.djrapitops.plugin.api.Check;
|
||||
|
||||
/**
|
||||
* Html String generator for /login and /register page.
|
||||
@ -59,9 +58,7 @@ public class LoginPage implements Page {
|
||||
}
|
||||
|
||||
private String getCommand() {
|
||||
if (serverInfo.getServer().isNotProxy()) return "plan";
|
||||
if (Check.isBungeeAvailable()) return "planbungee";
|
||||
if (Check.isVelocityAvailable()) return "planvelocity";
|
||||
if (serverInfo.getServer().isProxy()) return "planproxy";
|
||||
return "plan";
|
||||
}
|
||||
}
|
@ -34,10 +34,7 @@ import com.djrapitops.plan.storage.database.Database;
|
||||
import com.djrapitops.plan.storage.database.queries.containers.ContainerFetchQueries;
|
||||
import com.djrapitops.plan.storage.database.queries.objects.ServerQueries;
|
||||
import com.djrapitops.plan.storage.file.PlanFiles;
|
||||
import com.djrapitops.plan.utilities.logging.ErrorLogger;
|
||||
import com.djrapitops.plan.version.VersionChecker;
|
||||
import com.djrapitops.plugin.benchmarking.Timings;
|
||||
import com.djrapitops.plugin.logging.debug.DebugLogger;
|
||||
import dagger.Lazy;
|
||||
|
||||
import javax.inject.Inject;
|
||||
@ -63,9 +60,6 @@ public class PageFactory {
|
||||
private final Lazy<ServerInfo> serverInfo;
|
||||
private final Lazy<JSONStorage> jsonStorage;
|
||||
private final Lazy<Formatters> formatters;
|
||||
private final Lazy<DebugLogger> debugLogger;
|
||||
private final Lazy<Timings> timings;
|
||||
private final Lazy<ErrorLogger> errorLogger;
|
||||
|
||||
@Inject
|
||||
public PageFactory(
|
||||
@ -77,10 +71,7 @@ public class PageFactory {
|
||||
Lazy<DBSystem> dbSystem,
|
||||
Lazy<ServerInfo> serverInfo,
|
||||
Lazy<JSONStorage> jsonStorage,
|
||||
Lazy<Formatters> formatters,
|
||||
Lazy<DebugLogger> debugLogger,
|
||||
Lazy<Timings> timings,
|
||||
Lazy<ErrorLogger> errorLogger
|
||||
Lazy<Formatters> formatters
|
||||
) {
|
||||
this.versionChecker = versionChecker;
|
||||
this.files = files;
|
||||
@ -91,17 +82,6 @@ public class PageFactory {
|
||||
this.serverInfo = serverInfo;
|
||||
this.jsonStorage = jsonStorage;
|
||||
this.formatters = formatters;
|
||||
this.debugLogger = debugLogger;
|
||||
this.timings = timings;
|
||||
this.errorLogger = errorLogger;
|
||||
}
|
||||
|
||||
public DebugPage debugPage() throws IOException {
|
||||
return new DebugPage(
|
||||
getResource("error.html"),
|
||||
dbSystem.get().getDatabase(), serverInfo.get(), formatters.get(), versionChecker.get(),
|
||||
debugLogger.get(), timings.get(), errorLogger.get()
|
||||
);
|
||||
}
|
||||
|
||||
public PlayersPage playersPage() throws IOException {
|
||||
|
@ -156,7 +156,7 @@ public class PlayerPluginTab implements Comparable<PlayerPluginTab> {
|
||||
private String buildContentHtml(ExtensionTabData tabData) {
|
||||
TabInformation tabInformation = tabData.getTabInformation();
|
||||
|
||||
ElementOrder[] order = tabInformation.getTabElementOrder().orElse(ElementOrder.values());
|
||||
List<ElementOrder> order = tabInformation.getTabElementOrder();
|
||||
String values = buildValuesHtml(tabData);
|
||||
String valuesHtml = values.isEmpty() ? "" : "<div class=\"card-body\">" + values + "</div>";
|
||||
String tablesHtml = buildTablesHtml(tabData);
|
||||
|
@ -181,7 +181,7 @@ public class ServerPluginTabs {
|
||||
private String buildContentHtml(ExtensionTabData tabData) {
|
||||
TabInformation tabInformation = tabData.getTabInformation();
|
||||
|
||||
ElementOrder[] order = tabInformation.getTabElementOrder().orElse(ElementOrder.values());
|
||||
List<ElementOrder> order = tabInformation.getTabElementOrder();
|
||||
String values = buildValuesHtml(tabData);
|
||||
String valuesHtml = values.isEmpty() ? "" : "<div class=\"card-body\">" + values + "</div>";
|
||||
String tablesHtml = buildTablesHtml(tabData);
|
||||
|
@ -25,8 +25,7 @@ import com.djrapitops.plan.storage.file.PlanFiles;
|
||||
import com.djrapitops.plan.storage.file.Resource;
|
||||
import com.djrapitops.plan.utilities.logging.ErrorContext;
|
||||
import com.djrapitops.plan.utilities.logging.ErrorLogger;
|
||||
import com.djrapitops.plugin.logging.L;
|
||||
import com.djrapitops.plugin.logging.console.PluginLogger;
|
||||
import net.playeranalytics.plugin.server.PluginLogger;
|
||||
import org.apache.commons.lang3.StringUtils;
|
||||
import org.apache.commons.text.TextStringBuilder;
|
||||
|
||||
@ -146,7 +145,7 @@ public class ResourceSvc implements ResourceService {
|
||||
return getOrWriteCustomized(fileName, source);
|
||||
}
|
||||
} catch (IOException e) {
|
||||
errorLogger.log(L.WARN, e, ErrorContext.builder()
|
||||
errorLogger.warn(e, ErrorContext.builder()
|
||||
.whatToDo("Report this or provide " + fileName + " in " + files.getCustomizationDirectory())
|
||||
.related("Fetching resource", "Of: " + pluginName, fileName).build());
|
||||
}
|
||||
|
@ -21,8 +21,7 @@ import com.djrapitops.plan.settings.config.paths.PluginSettings;
|
||||
import com.djrapitops.plan.settings.config.paths.WebserverSettings;
|
||||
import com.djrapitops.plan.utilities.logging.ErrorContext;
|
||||
import com.djrapitops.plan.utilities.logging.ErrorLogger;
|
||||
import com.djrapitops.plugin.logging.L;
|
||||
import com.djrapitops.plugin.logging.console.PluginLogger;
|
||||
import net.playeranalytics.plugin.server.PluginLogger;
|
||||
|
||||
import java.io.IOException;
|
||||
|
||||
@ -75,7 +74,7 @@ public class NonProxyWebserverDisableChecker implements Runnable {
|
||||
config.save();
|
||||
logger.warn("Note: Set '" + WebserverSettings.DISABLED.getPath() + "' to true");
|
||||
} catch (IOException e) {
|
||||
errorLogger.log(L.WARN, e, ErrorContext.builder()
|
||||
errorLogger.warn(e, ErrorContext.builder()
|
||||
.whatToDo("Set '" + WebserverSettings.DISABLED.getPath() + "' to true manually.")
|
||||
.related("Disabling webserver in config setting", WebserverSettings.DISABLED.getPath()).build());
|
||||
}
|
||||
|
@ -35,12 +35,10 @@ import com.djrapitops.plan.settings.locale.lang.PluginLang;
|
||||
import com.djrapitops.plan.storage.database.DBSystem;
|
||||
import com.djrapitops.plan.utilities.logging.ErrorContext;
|
||||
import com.djrapitops.plan.utilities.logging.ErrorLogger;
|
||||
import com.djrapitops.plugin.logging.L;
|
||||
import com.djrapitops.plugin.logging.console.PluginLogger;
|
||||
import com.djrapitops.plugin.utilities.Verify;
|
||||
import com.sun.net.httpserver.Headers;
|
||||
import com.sun.net.httpserver.HttpExchange;
|
||||
import com.sun.net.httpserver.HttpHandler;
|
||||
import net.playeranalytics.plugin.server.PluginLogger;
|
||||
import org.apache.commons.lang3.StringUtils;
|
||||
import org.apache.commons.text.TextStringBuilder;
|
||||
|
||||
@ -107,7 +105,7 @@ public class RequestHandler implements HttpHandler {
|
||||
} catch (Exception e) {
|
||||
if (config.isTrue(PluginSettings.DEV_MODE)) {
|
||||
logger.warn("THIS ERROR IS ONLY LOGGED IN DEV MODE:");
|
||||
errorLogger.log(L.WARN, e, ErrorContext.builder()
|
||||
errorLogger.warn(e, ErrorContext.builder()
|
||||
.whatToDo("THIS ERROR IS ONLY LOGGED IN DEV MODE")
|
||||
.related(exchange.getRequestMethod(), exchange.getRemoteAddress(), exchange.getRequestHeaders(), exchange.getResponseHeaders(), exchange.getRequestURI())
|
||||
.build());
|
||||
@ -177,10 +175,9 @@ public class RequestHandler implements HttpHandler {
|
||||
private void warnAboutXForwardedForSecurityIssue() {
|
||||
if (!warnedAboutXForwardedSecurityIssue.get()) {
|
||||
logger.warn("Security Vulnerability due to misconfiguration: X-Forwarded-For header was not present in a request & '" +
|
||||
WebserverSettings.IP_WHITELIST_X_FORWARDED.getPath() + "' is 'true'!",
|
||||
"This could mean non-reverse-proxy access is not blocked & someone can use IP Spoofing to bypass security!",
|
||||
"Make sure you can only access Plan panel from your reverse-proxy or disable this setting."
|
||||
);
|
||||
WebserverSettings.IP_WHITELIST_X_FORWARDED.getPath() + "' is 'true'!");
|
||||
logger.warn("This could mean non-reverse-proxy access is not blocked & someone can use IP Spoofing to bypass security!");
|
||||
logger.warn("Make sure you can only access Plan panel from your reverse-proxy or disable this setting.");
|
||||
}
|
||||
warnedAboutXForwardedSecurityIssue.set(true);
|
||||
}
|
||||
@ -228,7 +225,7 @@ public class RequestHandler implements HttpHandler {
|
||||
}
|
||||
|
||||
List<String> authorization = requestHeaders.get("Authorization");
|
||||
if (Verify.isEmpty(authorization)) return Optional.empty();
|
||||
if (authorization == null || authorization.isEmpty()) return Optional.empty();
|
||||
|
||||
String authLine = authorization.get(0);
|
||||
if (StringUtils.contains(authLine, "Basic ")) {
|
||||
|
@ -81,14 +81,6 @@ public class ResponseFactory {
|
||||
() -> files.getResourceFromJar("web/" + resourceName).asWebResource());
|
||||
}
|
||||
|
||||
public Response debugPageResponse() {
|
||||
try {
|
||||
return forPage(pageFactory.debugPage());
|
||||
} catch (IOException e) {
|
||||
return forInternalError(e, "Failed to generate debug page");
|
||||
}
|
||||
}
|
||||
|
||||
private Response forPage(Page page) {
|
||||
return Response.builder()
|
||||
.setMimeType(MimeType.HTML)
|
||||
|
@ -33,7 +33,6 @@ import com.djrapitops.plan.exceptions.WebUserAuthException;
|
||||
import com.djrapitops.plan.exceptions.connection.ForbiddenException;
|
||||
import com.djrapitops.plan.utilities.logging.ErrorContext;
|
||||
import com.djrapitops.plan.utilities.logging.ErrorLogger;
|
||||
import com.djrapitops.plugin.logging.L;
|
||||
import dagger.Lazy;
|
||||
|
||||
import javax.inject.Inject;
|
||||
@ -53,7 +52,6 @@ import java.util.regex.Pattern;
|
||||
@Singleton
|
||||
public class ResponseResolver {
|
||||
|
||||
private final DebugPageResolver debugPageResolver;
|
||||
private final QueryPageResolver queryPageResolver;
|
||||
private final PlayersPageResolver playersPageResolver;
|
||||
private final PlayerPageResolver playerPageResolver;
|
||||
@ -78,7 +76,6 @@ public class ResponseResolver {
|
||||
ResponseFactory responseFactory,
|
||||
Lazy<WebServer> webServer,
|
||||
|
||||
DebugPageResolver debugPageResolver,
|
||||
QueryPageResolver queryPageResolver,
|
||||
PlayersPageResolver playersPageResolver,
|
||||
PlayerPageResolver playerPageResolver,
|
||||
@ -98,7 +95,6 @@ public class ResponseResolver {
|
||||
this.resolverService = resolverService;
|
||||
this.responseFactory = responseFactory;
|
||||
this.webServer = webServer;
|
||||
this.debugPageResolver = debugPageResolver;
|
||||
this.queryPageResolver = queryPageResolver;
|
||||
this.playersPageResolver = playersPageResolver;
|
||||
this.playerPageResolver = playerPageResolver;
|
||||
@ -117,7 +113,6 @@ public class ResponseResolver {
|
||||
public void registerPages() {
|
||||
String plugin = "Plan";
|
||||
resolverService.registerResolver(plugin, "/robots.txt", (NoAuthResolver) request -> Optional.of(responseFactory.robotsResponse()));
|
||||
resolverService.registerResolver(plugin, "/debug", debugPageResolver);
|
||||
resolverService.registerResolver(plugin, "/query", queryPageResolver);
|
||||
resolverService.registerResolver(plugin, "/players", playersPageResolver);
|
||||
resolverService.registerResolver(plugin, "/player", playerPageResolver);
|
||||
@ -149,7 +144,7 @@ public class ResponseResolver {
|
||||
} catch (WebUserAuthException e) {
|
||||
throw e; // Pass along
|
||||
} catch (Exception e) {
|
||||
errorLogger.log(L.ERROR, e, ErrorContext.builder().related(request).build());
|
||||
errorLogger.error(e, ErrorContext.builder().related(request).build());
|
||||
return responseFactory.internalErrorResponse(e, "Failed to get a response");
|
||||
}
|
||||
}
|
||||
|
@ -25,12 +25,11 @@ import com.djrapitops.plan.settings.locale.lang.PluginLang;
|
||||
import com.djrapitops.plan.storage.file.PlanFiles;
|
||||
import com.djrapitops.plan.utilities.logging.ErrorContext;
|
||||
import com.djrapitops.plan.utilities.logging.ErrorLogger;
|
||||
import com.djrapitops.plugin.logging.L;
|
||||
import com.djrapitops.plugin.logging.console.PluginLogger;
|
||||
import com.sun.net.httpserver.HttpServer;
|
||||
import com.sun.net.httpserver.HttpsConfigurator;
|
||||
import com.sun.net.httpserver.HttpsParameters;
|
||||
import com.sun.net.httpserver.HttpsServer;
|
||||
import net.playeranalytics.plugin.server.PluginLogger;
|
||||
import org.apache.commons.lang3.concurrent.BasicThreadFactory;
|
||||
|
||||
import javax.inject.Inject;
|
||||
@ -129,13 +128,11 @@ public class WebServer implements SubSystem {
|
||||
try {
|
||||
usingHttps = startHttpsServer();
|
||||
|
||||
logger.debug(usingHttps ? "Https Start Successful." : "Https Start Failed.");
|
||||
|
||||
if (!usingHttps) {
|
||||
logger.log(L.INFO_COLOR, "§e" + locale.getString(PluginLang.WEB_SERVER_NOTIFY_HTTP_USER_AUTH));
|
||||
logger.info("§e" + locale.getString(PluginLang.WEB_SERVER_NOTIFY_HTTP_USER_AUTH));
|
||||
server = HttpServer.create(new InetSocketAddress(config.get(WebserverSettings.INTERNAL_IP), port), 10);
|
||||
} else if (server == null) {
|
||||
logger.log(L.INFO_COLOR, "§e" + locale.getString(PluginLang.WEB_SERVER_NOTIFY_USING_PROXY_MODE));
|
||||
logger.info("§e" + locale.getString(PluginLang.WEB_SERVER_NOTIFY_USING_PROXY_MODE));
|
||||
server = HttpServer.create(new InetSocketAddress(config.get(WebserverSettings.INTERNAL_IP), port), 10);
|
||||
} else if (config.isTrue(WebserverSettings.DISABLED_AUTHENTICATION)) {
|
||||
logger.info(locale.getString(PluginLang.WEB_SERVER_NOTIFY_HTTPS_USER_AUTH));
|
||||
@ -148,7 +145,7 @@ public class WebServer implements SubSystem {
|
||||
.namingPattern("Plan WebServer Thread-%d")
|
||||
.uncaughtExceptionHandler((thread, throwable) -> {
|
||||
if (config.isTrue(PluginSettings.DEV_MODE)) {
|
||||
errorLogger.log(L.WARN, throwable, ErrorContext.builder()
|
||||
errorLogger.warn(throwable, ErrorContext.builder()
|
||||
.whatToDo("THIS ERROR IS ONLY LOGGED IN DEV MODE")
|
||||
.build());
|
||||
}
|
||||
@ -164,13 +161,13 @@ public class WebServer implements SubSystem {
|
||||
|
||||
boolean usingAlternativeIP = config.isTrue(WebserverSettings.SHOW_ALTERNATIVE_IP);
|
||||
if (!usingAlternativeIP && !addresses.getAccessAddress().isPresent()) {
|
||||
logger.log(L.INFO_COLOR, "§e" + locale.getString(PluginLang.ENABLE_NOTIFY_EMPTY_IP));
|
||||
logger.info("§e" + locale.getString(PluginLang.ENABLE_NOTIFY_EMPTY_IP));
|
||||
}
|
||||
} catch (BindException failedToBind) {
|
||||
logger.error("Webserver failed to bind port: " + failedToBind.toString());
|
||||
enabled = false;
|
||||
} catch (IllegalArgumentException | IllegalStateException | IOException e) {
|
||||
errorLogger.log(L.ERROR, e, ErrorContext.builder().related("Trying to enable webserver", config.get(WebserverSettings.INTERNAL_IP) + ":" + port).build());
|
||||
errorLogger.error(e, ErrorContext.builder().related("Trying to enable webserver", config.get(WebserverSettings.INTERNAL_IP) + ":" + port).build());
|
||||
enabled = false;
|
||||
}
|
||||
}
|
||||
@ -188,7 +185,7 @@ public class WebServer implements SubSystem {
|
||||
}
|
||||
} catch (InvalidPathException e) {
|
||||
logger.error("WebServer: Could not find Keystore: " + e.getMessage());
|
||||
errorLogger.log(L.ERROR, e, ErrorContext.builder()
|
||||
errorLogger.error(e, ErrorContext.builder()
|
||||
.whatToDo(e.getMessage() + ", Fix this path to point to a valid keystore file: " + keyStorePath)
|
||||
.related(keyStorePath).build());
|
||||
}
|
||||
@ -239,7 +236,7 @@ public class WebServer implements SubSystem {
|
||||
logger.error(e.getMessage());
|
||||
} catch (KeyManagementException | NoSuchAlgorithmException e) {
|
||||
logger.error(locale.getString(PluginLang.WEB_SERVER_FAIL_SSL_CONTEXT));
|
||||
errorLogger.log(L.ERROR, e, ErrorContext.builder().related(keyStoreKind).build());
|
||||
errorLogger.error(e, ErrorContext.builder().related(keyStoreKind).build());
|
||||
} catch (EOFException e) {
|
||||
logger.error(locale.getString(PluginLang.WEB_SERVER_FAIL_EMPTY_FILE));
|
||||
} catch (FileNotFoundException e) {
|
||||
@ -248,10 +245,10 @@ public class WebServer implements SubSystem {
|
||||
} catch (BindException e) {
|
||||
throw e; // Pass to above error handler
|
||||
} catch (IOException e) {
|
||||
errorLogger.log(L.ERROR, e, ErrorContext.builder().related(config.get(WebserverSettings.INTERNAL_IP) + ":" + port).build());
|
||||
errorLogger.error(e, ErrorContext.builder().related(config.get(WebserverSettings.INTERNAL_IP) + ":" + port).build());
|
||||
} catch (KeyStoreException | CertificateException | UnrecoverableKeyException e) {
|
||||
logger.error(locale.getString(PluginLang.WEB_SERVER_FAIL_STORE_LOAD));
|
||||
errorLogger.log(L.ERROR, e, ErrorContext.builder()
|
||||
errorLogger.error(e, ErrorContext.builder()
|
||||
.whatToDo("Make sure the Certificate settings are correct / You can try remaking the keystore without -passin or -passout parameters.")
|
||||
.related(keyStorePath).build());
|
||||
}
|
||||
|
@ -16,17 +16,15 @@
|
||||
*/
|
||||
package com.djrapitops.plan.delivery.webserver.cache;
|
||||
|
||||
import com.djrapitops.plan.DebugChannels;
|
||||
import com.djrapitops.plan.TaskSystem;
|
||||
import com.djrapitops.plan.delivery.formatting.Formatter;
|
||||
import com.djrapitops.plan.delivery.formatting.Formatters;
|
||||
import com.djrapitops.plan.settings.config.PlanConfig;
|
||||
import com.djrapitops.plan.settings.config.paths.WebserverSettings;
|
||||
import com.djrapitops.plan.storage.file.PlanFiles;
|
||||
import com.djrapitops.plugin.api.TimeAmount;
|
||||
import com.djrapitops.plugin.logging.console.PluginLogger;
|
||||
import com.djrapitops.plugin.logging.debug.DebugLogger;
|
||||
import com.djrapitops.plugin.task.RunnableFactory;
|
||||
import net.playeranalytics.plugin.scheduling.RunnableFactory;
|
||||
import net.playeranalytics.plugin.scheduling.TimeAmount;
|
||||
import net.playeranalytics.plugin.server.PluginLogger;
|
||||
import org.apache.commons.lang3.StringUtils;
|
||||
|
||||
import javax.inject.Inject;
|
||||
@ -61,7 +59,6 @@ public class JSONFileStorage implements JSONStorage {
|
||||
|
||||
private final Pattern timestampRegex = Pattern.compile(".*-([0-9]*).json");
|
||||
private static final String JSON_FILE_EXTENSION = ".json";
|
||||
private final DebugLogger debugLogger;
|
||||
|
||||
private final Formatter<Long> dateFormatter;
|
||||
|
||||
@ -72,7 +69,6 @@ public class JSONFileStorage implements JSONStorage {
|
||||
PluginLogger logger
|
||||
) {
|
||||
this.logger = logger;
|
||||
debugLogger = logger.getDebugLogger();
|
||||
|
||||
dateFormatter = formatters.yearLong();
|
||||
|
||||
@ -84,7 +80,6 @@ public class JSONFileStorage implements JSONStorage {
|
||||
PlanFiles files, Formatter<Long> dateFormatter, PluginLogger logger
|
||||
) {
|
||||
this.logger = logger;
|
||||
debugLogger = logger.getDebugLogger();
|
||||
|
||||
this.dateFormatter = dateFormatter;
|
||||
|
||||
@ -256,7 +251,6 @@ public class JSONFileStorage implements JSONStorage {
|
||||
private void deleteFiles(List<File> toDelete) {
|
||||
for (File fileToDelete : toDelete) {
|
||||
try {
|
||||
debugLogger.logOn(DebugChannels.JSON_CACHE, "Deleting " + fileToDelete.getAbsolutePath());
|
||||
Files.delete(fileToDelete.toPath());
|
||||
} catch (IOException e) {
|
||||
// Failed to delete, set for deletion on next server shutdown.
|
||||
@ -269,24 +263,21 @@ public class JSONFileStorage implements JSONStorage {
|
||||
public static class CleanTask extends TaskSystem.Task {
|
||||
private final PlanConfig config;
|
||||
private final JSONFileStorage jsonFileStorage;
|
||||
private final DebugLogger debugLogger;
|
||||
|
||||
@Inject
|
||||
public CleanTask(
|
||||
PlanConfig config,
|
||||
JSONFileStorage jsonFileStorage,
|
||||
DebugLogger debugLogger
|
||||
JSONFileStorage jsonFileStorage
|
||||
) {
|
||||
this.config = config;
|
||||
this.jsonFileStorage = jsonFileStorage;
|
||||
this.debugLogger = debugLogger;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void register(RunnableFactory runnableFactory) {
|
||||
long delay = TimeAmount.toTicks(ThreadLocalRandom.current().nextInt(60), TimeUnit.SECONDS);
|
||||
long period = TimeAmount.toTicks(1, TimeUnit.HOURS);
|
||||
runnableFactory.create(null, this).runTaskTimerAsynchronously(delay, period);
|
||||
runnableFactory.create(this).runTaskTimerAsynchronously(delay, period);
|
||||
}
|
||||
|
||||
@Override
|
||||
@ -294,14 +285,9 @@ public class JSONFileStorage implements JSONStorage {
|
||||
long now = System.currentTimeMillis();
|
||||
long invalidateDiskCacheAfterMs = config.get(WebserverSettings.INVALIDATE_DISK_CACHE);
|
||||
long invalidateQueriesAfterMs = config.get(WebserverSettings.INVALIDATE_QUERY_RESULTS);
|
||||
debugLogger.logOn(DebugChannels.JSON_CACHE, "Running clean task..");
|
||||
|
||||
jsonFileStorage.invalidateOlder("query", now - invalidateQueriesAfterMs);
|
||||
jsonFileStorage.invalidateOlderButIgnore(now - invalidateDiskCacheAfterMs, "query");
|
||||
}
|
||||
|
||||
public DebugLogger getDebugLogger() {
|
||||
return debugLogger;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -1,52 +0,0 @@
|
||||
/*
|
||||
* This file is part of Player Analytics (Plan).
|
||||
*
|
||||
* Plan is free software: you can redistribute it and/or modify
|
||||
* it under the terms of the GNU Lesser General Public License v3 as published by
|
||||
* the Free Software Foundation, either version 3 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* Plan is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU Lesser General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU Lesser General Public License
|
||||
* along with Plan. If not, see <https://www.gnu.org/licenses/>.
|
||||
*/
|
||||
package com.djrapitops.plan.delivery.webserver.resolver;
|
||||
|
||||
import com.djrapitops.plan.delivery.web.resolver.Resolver;
|
||||
import com.djrapitops.plan.delivery.web.resolver.Response;
|
||||
import com.djrapitops.plan.delivery.web.resolver.request.Request;
|
||||
import com.djrapitops.plan.delivery.webserver.ResponseFactory;
|
||||
|
||||
import javax.inject.Inject;
|
||||
import javax.inject.Singleton;
|
||||
import java.util.Optional;
|
||||
|
||||
/**
|
||||
* Resolves /debug URL.
|
||||
*
|
||||
* @author AuroraLS3
|
||||
*/
|
||||
@Singleton
|
||||
public class DebugPageResolver implements Resolver {
|
||||
|
||||
private final ResponseFactory responseFactory;
|
||||
|
||||
@Inject
|
||||
public DebugPageResolver(ResponseFactory responseFactory) {
|
||||
this.responseFactory = responseFactory;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean canAccess(Request request) {
|
||||
return request.getUser().map(user -> user.hasPermission("page.debug")).orElse(false);
|
||||
}
|
||||
|
||||
@Override
|
||||
public Optional<Response> resolve(Request request) {
|
||||
return Optional.of(responseFactory.debugPageResponse());
|
||||
}
|
||||
}
|
@ -31,8 +31,8 @@ import java.util.Optional;
|
||||
@Singleton
|
||||
public class RegisterPageResolver implements NoAuthResolver {
|
||||
|
||||
private ResponseFactory responseFactory;
|
||||
private Lazy<WebServer> webServer;
|
||||
private final ResponseFactory responseFactory;
|
||||
private final Lazy<WebServer> webServer;
|
||||
|
||||
@Inject
|
||||
public RegisterPageResolver(
|
||||
|
@ -44,8 +44,8 @@ import com.djrapitops.plan.storage.database.queries.objects.GeoInfoQueries;
|
||||
import com.djrapitops.plan.storage.database.queries.objects.SessionQueries;
|
||||
import com.djrapitops.plan.storage.database.queries.objects.playertable.QueryTablePlayersQuery;
|
||||
import com.djrapitops.plan.utilities.java.Maps;
|
||||
import com.djrapitops.plugin.api.TimeAmount;
|
||||
import com.google.gson.Gson;
|
||||
import net.playeranalytics.plugin.scheduling.TimeAmount;
|
||||
|
||||
import javax.inject.Inject;
|
||||
import javax.inject.Singleton;
|
||||
|
@ -19,8 +19,8 @@ package com.djrapitops.plan.extension;
|
||||
import com.djrapitops.plan.TaskSystem;
|
||||
import com.djrapitops.plan.settings.config.PlanConfig;
|
||||
import com.djrapitops.plan.settings.config.paths.TimeSettings;
|
||||
import com.djrapitops.plugin.api.TimeAmount;
|
||||
import com.djrapitops.plugin.task.RunnableFactory;
|
||||
import net.playeranalytics.plugin.scheduling.RunnableFactory;
|
||||
import net.playeranalytics.plugin.scheduling.TimeAmount;
|
||||
|
||||
import javax.inject.Inject;
|
||||
import javax.inject.Singleton;
|
||||
@ -55,6 +55,6 @@ public class ExtensionServerDataUpdater extends TaskSystem.Task {
|
||||
public void register(RunnableFactory runnableFactory) {
|
||||
long period = TimeAmount.toTicks(config.get(TimeSettings.EXTENSION_DATA_REFRESH_PERIOD), TimeUnit.MILLISECONDS);
|
||||
long delay = TimeAmount.toTicks(30, TimeUnit.SECONDS);
|
||||
runnableFactory.create(null, this).runTaskTimerAsynchronously(delay, period);
|
||||
runnableFactory.create(this).runTaskTimerAsynchronously(delay, period);
|
||||
}
|
||||
}
|
@ -16,7 +16,6 @@
|
||||
*/
|
||||
package com.djrapitops.plan.extension;
|
||||
|
||||
import com.djrapitops.plan.DebugChannels;
|
||||
import com.djrapitops.plan.exceptions.DataExtensionMethodCallException;
|
||||
import com.djrapitops.plan.extension.implementation.CallerImplementation;
|
||||
import com.djrapitops.plan.extension.implementation.ExtensionRegister;
|
||||
@ -30,8 +29,7 @@ import com.djrapitops.plan.settings.config.PlanConfig;
|
||||
import com.djrapitops.plan.storage.database.DBSystem;
|
||||
import com.djrapitops.plan.utilities.logging.ErrorContext;
|
||||
import com.djrapitops.plan.utilities.logging.ErrorLogger;
|
||||
import com.djrapitops.plugin.logging.L;
|
||||
import com.djrapitops.plugin.logging.console.PluginLogger;
|
||||
import net.playeranalytics.plugin.server.PluginLogger;
|
||||
|
||||
import javax.inject.Inject;
|
||||
import javax.inject.Singleton;
|
||||
@ -95,7 +93,7 @@ public class ExtensionSvc implements ExtensionService {
|
||||
}
|
||||
|
||||
logger.warn("One or more extensions failed to register (They can be disabled in Plan config).");
|
||||
errorLogger.log(L.WARN, failedToRegisterOne, context.build());
|
||||
errorLogger.warn(failedToRegisterOne, context.build());
|
||||
}
|
||||
}
|
||||
|
||||
@ -124,9 +122,7 @@ public class ExtensionSvc implements ExtensionService {
|
||||
public void unregister(DataExtension extension) {
|
||||
ExtensionWrapper extractor = new ExtensionWrapper(extension);
|
||||
String pluginName = extractor.getPluginName();
|
||||
if (extensionGatherers.remove(pluginName) != null) {
|
||||
logger.getDebugLogger().logOn(DebugChannels.DATA_EXTENSIONS, pluginName + " extension unregistered.");
|
||||
}
|
||||
extensionGatherers.remove(pluginName);
|
||||
}
|
||||
|
||||
private boolean shouldNotAllowRegistration(String pluginName) {
|
||||
@ -136,7 +132,7 @@ public class ExtensionSvc implements ExtensionService {
|
||||
try {
|
||||
pluginsConfig.createSection(pluginName);
|
||||
} catch (IOException e) {
|
||||
errorLogger.log(L.WARN, e, ErrorContext.builder()
|
||||
errorLogger.warn(e, ErrorContext.builder()
|
||||
.whatToDo("Create 'Plugins." + pluginName + ".Enabled: true' setting manually.")
|
||||
.related("Section: " + pluginName).build());
|
||||
logger.warn("Could not register DataExtension for " + pluginName + " due to " + e.toString());
|
||||
@ -144,11 +140,8 @@ public class ExtensionSvc implements ExtensionService {
|
||||
}
|
||||
}
|
||||
|
||||
if (!pluginsConfig.isEnabled(pluginName)) {
|
||||
logger.getDebugLogger().logOn(DebugChannels.DATA_EXTENSIONS, pluginName + " extension disabled in the config.");
|
||||
return true;
|
||||
}
|
||||
return false; // Should register.
|
||||
// Should the extension not be registered?
|
||||
return !pluginsConfig.isEnabled(pluginName);
|
||||
}
|
||||
|
||||
public void updatePlayerValues(UUID playerUUID, String playerName, CallEvents event) {
|
||||
@ -162,11 +155,7 @@ public class ExtensionSvc implements ExtensionService {
|
||||
if (playerUUID == null && playerName == null) return;
|
||||
|
||||
try {
|
||||
logger.getDebugLogger().logOn(DebugChannels.DATA_EXTENSIONS, "Gathering values for: " + playerName);
|
||||
|
||||
gatherer.updateValues(playerUUID, playerName);
|
||||
|
||||
logger.getDebugLogger().logOn(DebugChannels.DATA_EXTENSIONS, "Gathering completed: " + playerName);
|
||||
} catch (DataExtensionMethodCallException methodCallFailed) {
|
||||
logFailure(playerName, methodCallFailed);
|
||||
methodCallFailed.getMethod().ifPresent(gatherer::disableMethodFromUse);
|
||||
@ -176,7 +165,7 @@ public class ExtensionSvc implements ExtensionService {
|
||||
.related(gatherer.getPluginName())
|
||||
.related(event)
|
||||
.related("Player: " + playerName + " " + playerUUID);
|
||||
errorLogger.log(L.WARN, unexpectedError, context.build());
|
||||
errorLogger.warn(unexpectedError, context.build());
|
||||
}
|
||||
}
|
||||
|
||||
@ -187,7 +176,7 @@ public class ExtensionSvc implements ExtensionService {
|
||||
.related(methodCallFailed.getPluginName())
|
||||
.related("Method:" + methodCallFailed.getMethod().map(MethodWrapper::getMethodName).orElse("-"))
|
||||
.related("Player: " + playerName);
|
||||
errorLogger.log(L.WARN, cause, context.build());
|
||||
errorLogger.warn(cause, context.build());
|
||||
}
|
||||
|
||||
public void updateServerValues(CallEvents event) {
|
||||
@ -200,11 +189,7 @@ public class ExtensionSvc implements ExtensionService {
|
||||
if (gatherer.shouldSkipEvent(event)) return;
|
||||
|
||||
try {
|
||||
logger.getDebugLogger().logOn(DebugChannels.DATA_EXTENSIONS, "Gathering values for server");
|
||||
|
||||
gatherer.updateValues();
|
||||
|
||||
logger.getDebugLogger().logOn(DebugChannels.DATA_EXTENSIONS, "Gathering completed for server");
|
||||
} catch (DataExtensionMethodCallException methodCallFailed) {
|
||||
logFailure("server", methodCallFailed);
|
||||
methodCallFailed.getMethod().ifPresent(gatherer::disableMethodFromUse);
|
||||
@ -214,7 +199,7 @@ public class ExtensionSvc implements ExtensionService {
|
||||
.related(gatherer.getPluginName())
|
||||
.related(event)
|
||||
.related("Gathering for server");
|
||||
errorLogger.log(L.WARN, unexpectedError, context.build());
|
||||
errorLogger.warn(unexpectedError, context.build());
|
||||
}
|
||||
}
|
||||
}
|
@ -20,11 +20,12 @@ import com.djrapitops.plan.extension.ElementOrder;
|
||||
import com.djrapitops.plan.extension.icon.Color;
|
||||
import com.djrapitops.plan.extension.icon.Family;
|
||||
import com.djrapitops.plan.extension.icon.Icon;
|
||||
import com.djrapitops.plugin.utilities.ArrayUtil;
|
||||
import org.apache.commons.lang3.StringUtils;
|
||||
import org.apache.commons.text.TextStringBuilder;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.Arrays;
|
||||
import java.util.Optional;
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* Represents a tab of {@link com.djrapitops.plan.extension.DataExtension} defined by {@link com.djrapitops.plan.extension.annotation.Tab} and
|
||||
@ -36,10 +37,19 @@ public class TabInformation {
|
||||
|
||||
private final String tabName;
|
||||
private final Icon icon; // can be null
|
||||
private ElementOrder[] elementOrder; // can be null / miss values
|
||||
private final List<ElementOrder> elementOrder; // can be null / miss values
|
||||
private final int tabPriority;
|
||||
|
||||
public TabInformation(String tabName, Icon icon, ElementOrder[] elementOrder, int tabPriority) {
|
||||
this(
|
||||
tabName,
|
||||
icon,
|
||||
elementOrder == null ? new ArrayList<>() : Arrays.asList(elementOrder),
|
||||
tabPriority
|
||||
);
|
||||
}
|
||||
|
||||
public TabInformation(String tabName, Icon icon, List<ElementOrder> elementOrder, int tabPriority) {
|
||||
this.tabName = tabName;
|
||||
this.icon = icon;
|
||||
this.elementOrder = elementOrder;
|
||||
@ -62,23 +72,23 @@ public class TabInformation {
|
||||
return tabPriority;
|
||||
}
|
||||
|
||||
public Optional<ElementOrder[]> getTabElementOrder() {
|
||||
if (elementOrder == null) {
|
||||
return Optional.empty();
|
||||
public List<ElementOrder> getTabElementOrder() {
|
||||
if (elementOrder.isEmpty()) {
|
||||
return ElementOrder.valuesAsList();
|
||||
}
|
||||
|
||||
ElementOrder[] possibleValues = ElementOrder.values();
|
||||
if (elementOrder.length < possibleValues.length) {
|
||||
if (elementOrder.size() < possibleValues.length) {
|
||||
addMissingElements(possibleValues);
|
||||
}
|
||||
|
||||
return Optional.of(elementOrder);
|
||||
return elementOrder;
|
||||
}
|
||||
|
||||
private void addMissingElements(ElementOrder[] possibleValues) {
|
||||
for (ElementOrder possibleValue : possibleValues) {
|
||||
if (Arrays.binarySearch(elementOrder, possibleValue) < 0) {
|
||||
elementOrder = ArrayUtil.merge(elementOrder, new ElementOrder[]{possibleValue});
|
||||
if (!elementOrder.contains(possibleValue)) {
|
||||
elementOrder.add(possibleValue);
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -88,8 +98,12 @@ public class TabInformation {
|
||||
return "TabInformation{" +
|
||||
"tabName='" + tabName + '\'' +
|
||||
", icon=" + icon +
|
||||
", elementOrder=" + Arrays.toString(elementOrder) +
|
||||
", elementOrder=" + elementOrder +
|
||||
", tabPriority=" + tabPriority +
|
||||
'}';
|
||||
}
|
||||
|
||||
public String getSerializedTabElementOrder() {
|
||||
return new TextStringBuilder().appendWithSeparators(getTabElementOrder(), ",").build();
|
||||
}
|
||||
}
|
@ -16,7 +16,6 @@
|
||||
*/
|
||||
package com.djrapitops.plan.extension.implementation.storage.transactions;
|
||||
|
||||
import com.djrapitops.plan.extension.ElementOrder;
|
||||
import com.djrapitops.plan.extension.implementation.TabInformation;
|
||||
import com.djrapitops.plan.storage.database.sql.tables.ExtensionIconTable;
|
||||
import com.djrapitops.plan.storage.database.sql.tables.ExtensionPluginTable;
|
||||
@ -75,7 +74,7 @@ public class StoreTabInformationTransaction extends ThrowawayTransaction {
|
||||
@Override
|
||||
public void prepare(PreparedStatement statement) throws SQLException {
|
||||
statement.setInt(1, tabInformation.getTabPriority());
|
||||
statement.setString(2, ElementOrder.serialize(tabInformation.getTabElementOrder().orElse(ElementOrder.values())));
|
||||
statement.setString(2, tabInformation.getSerializedTabElementOrder());
|
||||
ExtensionIconTable.set3IconValuesToStatement(statement, 3, tabInformation.getTabIcon());
|
||||
ExtensionPluginTable.set2PluginValuesToStatement(statement, 6, pluginName, serverUUID);
|
||||
statement.setString(8, tabInformation.getTabName());
|
||||
@ -95,7 +94,7 @@ public class StoreTabInformationTransaction extends ThrowawayTransaction {
|
||||
@Override
|
||||
public void prepare(PreparedStatement statement) throws SQLException {
|
||||
statement.setString(1, tabInformation.getTabName());
|
||||
statement.setString(2, ElementOrder.serialize(tabInformation.getTabElementOrder().orElse(ElementOrder.values())));
|
||||
statement.setString(2, tabInformation.getSerializedTabElementOrder());
|
||||
statement.setInt(3, tabInformation.getTabPriority());
|
||||
ExtensionIconTable.set3IconValuesToStatement(statement, 4, tabInformation.getTabIcon());
|
||||
ExtensionPluginTable.set2PluginValuesToStatement(statement, 7, pluginName, serverUUID);
|
||||
|
@ -27,8 +27,7 @@ import com.djrapitops.plan.storage.database.Database;
|
||||
import com.djrapitops.plan.storage.database.transactions.events.ServerShutdownTransaction;
|
||||
import com.djrapitops.plan.utilities.logging.ErrorContext;
|
||||
import com.djrapitops.plan.utilities.logging.ErrorLogger;
|
||||
import com.djrapitops.plugin.logging.L;
|
||||
import com.djrapitops.plugin.logging.console.PluginLogger;
|
||||
import net.playeranalytics.plugin.server.PluginLogger;
|
||||
|
||||
import java.util.Map;
|
||||
import java.util.Optional;
|
||||
@ -91,7 +90,7 @@ public abstract class ServerShutdownSave {
|
||||
prepareSessionsForStorage(activeSessions, System.currentTimeMillis());
|
||||
return Optional.of(saveActiveSessions(activeSessions));
|
||||
} catch (DBInitException e) {
|
||||
errorLogger.log(L.ERROR, e, ErrorContext.builder()
|
||||
errorLogger.error(e, ErrorContext.builder()
|
||||
.whatToDo("Find the sessions in the error file and save them manually or ignore. Report & delete the error file after.")
|
||||
.related("Shutdown save failed to init database.")
|
||||
.related(activeSessions)
|
||||
|
@ -17,7 +17,7 @@
|
||||
package com.djrapitops.plan.gathering;
|
||||
|
||||
import com.djrapitops.plan.TaskSystem;
|
||||
import com.djrapitops.plugin.task.RunnableFactory;
|
||||
import net.playeranalytics.plugin.scheduling.RunnableFactory;
|
||||
|
||||
import javax.inject.Inject;
|
||||
import javax.inject.Singleton;
|
||||
@ -96,7 +96,7 @@ public class ShutdownHook extends Thread {
|
||||
|
||||
@Override
|
||||
public void register(RunnableFactory runnableFactory) {
|
||||
runnableFactory.create(null, this).runTaskAsynchronously();
|
||||
runnableFactory.create(this).runTaskAsynchronously();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -23,7 +23,6 @@ import com.djrapitops.plan.identification.ServerInfo;
|
||||
import com.djrapitops.plan.storage.database.DBSystem;
|
||||
import com.djrapitops.plan.storage.database.queries.objects.NicknameQueries;
|
||||
import com.djrapitops.plan.utilities.logging.ErrorLogger;
|
||||
import com.djrapitops.plugin.logging.L;
|
||||
|
||||
import javax.inject.Inject;
|
||||
import javax.inject.Singleton;
|
||||
@ -99,7 +98,7 @@ public class NicknameCache implements SubSystem {
|
||||
NicknameQueries.fetchLastSeenNicknameOfPlayer(uuid, serverInfo.getServerUUID())
|
||||
).map(Nickname::getName);
|
||||
} catch (DBOpException e) {
|
||||
errorLogger.log(L.ERROR, e);
|
||||
errorLogger.error(e);
|
||||
}
|
||||
return Optional.empty();
|
||||
}
|
||||
|
@ -16,8 +16,6 @@
|
||||
*/
|
||||
package com.djrapitops.plan.gathering.domain;
|
||||
|
||||
import com.djrapitops.plugin.utilities.Verify;
|
||||
|
||||
import java.util.Objects;
|
||||
import java.util.UUID;
|
||||
|
||||
@ -36,8 +34,8 @@ public class BaseUser {
|
||||
private final int timesKicked;
|
||||
|
||||
public BaseUser(UUID uuid, String name, long registered, int timesKicked) {
|
||||
Verify.nullCheck(uuid, () -> new IllegalArgumentException("'uuid' can not be null"));
|
||||
Verify.nullCheck(name, () -> new IllegalArgumentException("'name' can not be null"));
|
||||
if (uuid == null) throw new IllegalArgumentException("'uuid' can not be null");
|
||||
if (name == null) throw new IllegalArgumentException("'name' can not be null");
|
||||
|
||||
this.uuid = uuid;
|
||||
this.name = name;
|
||||
|
@ -16,8 +16,6 @@
|
||||
*/
|
||||
package com.djrapitops.plan.gathering.domain;
|
||||
|
||||
import com.djrapitops.plugin.utilities.Verify;
|
||||
|
||||
import java.util.Map;
|
||||
import java.util.Optional;
|
||||
|
||||
@ -92,7 +90,7 @@ public class GMTimes extends TimeKeeper {
|
||||
* @throws IllegalArgumentException If any parameter is null.
|
||||
*/
|
||||
public void setAllGMTimes(long... times) {
|
||||
Verify.nullCheck(times);
|
||||
if (times == null) throw new IllegalArgumentException("'times' should not be null!");
|
||||
String[] gms = getGMKeyArray();
|
||||
int size = times.length;
|
||||
for (int i = 0; i < 4; i++) {
|
||||
|
@ -16,8 +16,6 @@
|
||||
*/
|
||||
package com.djrapitops.plan.gathering.domain;
|
||||
|
||||
import com.djrapitops.plugin.utilities.Verify;
|
||||
|
||||
import java.util.HashMap;
|
||||
import java.util.Map;
|
||||
import java.util.Objects;
|
||||
@ -63,11 +61,14 @@ public class TimeKeeper {
|
||||
* @throws IllegalArgumentException If given state is null
|
||||
*/
|
||||
public void setTime(String state, long time) {
|
||||
times.put(Verify.nullCheck(state), time);
|
||||
if (state == null) throw new IllegalArgumentException("'state' should not be null");
|
||||
times.put(state, time);
|
||||
}
|
||||
|
||||
public void renameState(String state, String renameTo) {
|
||||
Verify.nullCheck(state, renameTo);
|
||||
if (state == null) throw new IllegalArgumentException("'state' should not be null");
|
||||
if (renameTo == null) throw new IllegalArgumentException("'renameTo' should not be null");
|
||||
|
||||
Long time = times.get(state);
|
||||
if (time != null) {
|
||||
times.put(renameTo, time);
|
||||
@ -82,11 +83,12 @@ public class TimeKeeper {
|
||||
* Adds time to the last state while updating the status of other parameters.
|
||||
*
|
||||
* @param newState New State seen in.
|
||||
* @param ms Epoch ms the change occurred.
|
||||
* @param ms Epoch ms the change occurred.
|
||||
* @throws IllegalArgumentException If newState is null.
|
||||
*/
|
||||
public void changeState(String newState, long ms) {
|
||||
Verify.nullCheck(newState);
|
||||
if (newState == null) throw new IllegalArgumentException("'newState' should not be null");
|
||||
|
||||
if (state == null) {
|
||||
state = newState;
|
||||
}
|
||||
@ -98,12 +100,14 @@ public class TimeKeeper {
|
||||
}
|
||||
|
||||
protected void resetState(String state) {
|
||||
times.remove(Verify.nullCheck(state));
|
||||
if (state == null) throw new IllegalArgumentException("'state' should not be null");
|
||||
times.remove(state);
|
||||
}
|
||||
|
||||
protected void resetState(String state, long time) {
|
||||
if (state == null) throw new IllegalArgumentException("'state' should not be null");
|
||||
if (time > 0) {
|
||||
times.put(Verify.nullCheck(state), time);
|
||||
times.put(state, time);
|
||||
lastStateChange = time;
|
||||
this.state = state;
|
||||
} else {
|
||||
|
@ -22,11 +22,10 @@ import com.djrapitops.plan.settings.config.PlanConfig;
|
||||
import com.djrapitops.plan.settings.config.paths.DataGatheringSettings;
|
||||
import com.djrapitops.plan.settings.locale.Locale;
|
||||
import com.djrapitops.plan.settings.locale.lang.PluginLang;
|
||||
import com.djrapitops.plugin.logging.console.PluginLogger;
|
||||
import com.djrapitops.plugin.task.AbsRunnable;
|
||||
import com.djrapitops.plugin.task.RunnableFactory;
|
||||
import com.github.benmanes.caffeine.cache.Cache;
|
||||
import com.github.benmanes.caffeine.cache.Caffeine;
|
||||
import net.playeranalytics.plugin.scheduling.RunnableFactory;
|
||||
import net.playeranalytics.plugin.server.PluginLogger;
|
||||
|
||||
import javax.inject.Inject;
|
||||
import javax.inject.Singleton;
|
||||
@ -77,12 +76,9 @@ public class GeolocationCache implements SubSystem {
|
||||
@Override
|
||||
public void enable() {
|
||||
if (config.isTrue(DataGatheringSettings.GEOLOCATIONS)) {
|
||||
runnableFactory.create("Geolocator init", new AbsRunnable() {
|
||||
@Override
|
||||
public void run() {
|
||||
if (inUseGeolocator == null) tryToPrepareGeoLite2();
|
||||
if (inUseGeolocator == null) logger.error("Failed to enable geolocation.");
|
||||
}
|
||||
runnableFactory.create(() -> {
|
||||
if (inUseGeolocator == null) tryToPrepareGeoLite2();
|
||||
if (inUseGeolocator == null) logger.error("Failed to enable geolocation.");
|
||||
}).runTaskAsynchronously();
|
||||
} else {
|
||||
logger.info(locale.getString(PluginLang.ENABLE_NOTIFY_GEOLOCATIONS_DISABLED));
|
||||
|
@ -18,7 +18,6 @@ package com.djrapitops.plan.gathering.importing;
|
||||
|
||||
import com.djrapitops.plan.SubSystem;
|
||||
import com.djrapitops.plan.gathering.importing.importers.Importer;
|
||||
import com.djrapitops.plugin.utilities.Verify;
|
||||
|
||||
import javax.inject.Inject;
|
||||
import javax.inject.Singleton;
|
||||
@ -49,7 +48,7 @@ public class ImportSystem implements SubSystem {
|
||||
}
|
||||
|
||||
public void registerImporter(Importer importer) {
|
||||
Verify.nullCheck(importer, () -> new IllegalArgumentException("Importer cannot be null"));
|
||||
if (importer == null) throw new IllegalArgumentException("Importer cannot be null");
|
||||
|
||||
importers.put(importer.getName(), importer);
|
||||
}
|
||||
|
@ -25,7 +25,7 @@ import com.djrapitops.plan.utilities.analysis.Average;
|
||||
import com.djrapitops.plan.utilities.analysis.Maximum;
|
||||
import com.djrapitops.plan.utilities.analysis.TimerAverage;
|
||||
import com.djrapitops.plan.utilities.logging.ErrorLogger;
|
||||
import com.djrapitops.plugin.logging.console.PluginLogger;
|
||||
import net.playeranalytics.plugin.server.PluginLogger;
|
||||
|
||||
import javax.inject.Inject;
|
||||
import javax.inject.Singleton;
|
||||
|
@ -25,7 +25,7 @@ import com.djrapitops.plan.utilities.analysis.Average;
|
||||
import com.djrapitops.plan.utilities.analysis.Maximum;
|
||||
import com.djrapitops.plan.utilities.analysis.TimerAverage;
|
||||
import com.djrapitops.plan.utilities.logging.ErrorLogger;
|
||||
import com.djrapitops.plugin.logging.console.PluginLogger;
|
||||
import net.playeranalytics.plugin.server.PluginLogger;
|
||||
|
||||
import javax.inject.Inject;
|
||||
import javax.inject.Singleton;
|
||||
|
@ -22,10 +22,9 @@ import com.djrapitops.plan.settings.config.PlanConfig;
|
||||
import com.djrapitops.plan.settings.config.paths.DataGatheringSettings;
|
||||
import com.djrapitops.plan.utilities.logging.ErrorContext;
|
||||
import com.djrapitops.plan.utilities.logging.ErrorLogger;
|
||||
import com.djrapitops.plugin.api.TimeAmount;
|
||||
import com.djrapitops.plugin.logging.L;
|
||||
import com.djrapitops.plugin.logging.console.PluginLogger;
|
||||
import com.djrapitops.plugin.task.RunnableFactory;
|
||||
import net.playeranalytics.plugin.scheduling.RunnableFactory;
|
||||
import net.playeranalytics.plugin.scheduling.TimeAmount;
|
||||
import net.playeranalytics.plugin.server.PluginLogger;
|
||||
|
||||
import javax.inject.Inject;
|
||||
import javax.inject.Singleton;
|
||||
@ -92,7 +91,7 @@ public class SystemUsageBuffer {
|
||||
public void register(RunnableFactory runnableFactory) {
|
||||
long delay = TimeAmount.toTicks(1, TimeUnit.MINUTES) - TimeAmount.toTicks(500, TimeUnit.MILLISECONDS);
|
||||
long period = TimeAmount.toTicks(1, TimeUnit.SECONDS);
|
||||
runnableFactory.create(null, this).runTaskTimerAsynchronously(delay, period);
|
||||
runnableFactory.create(this).runTaskTimerAsynchronously(delay, period);
|
||||
}
|
||||
}
|
||||
|
||||
@ -122,7 +121,7 @@ public class SystemUsageBuffer {
|
||||
buffer.freeDiskSpace = SystemUsage.getFreeDiskSpace();
|
||||
} catch (SecurityException noPermission) {
|
||||
if (!diskErrored) {
|
||||
errorLogger.log(L.WARN, noPermission, ErrorContext.builder()
|
||||
errorLogger.warn(noPermission, ErrorContext.builder()
|
||||
.whatToDo("Resolve " + noPermission.getMessage() + " via OS or JVM permissions").build());
|
||||
}
|
||||
diskErrored = true;
|
||||
@ -136,7 +135,7 @@ public class SystemUsageBuffer {
|
||||
public void register(RunnableFactory runnableFactory) {
|
||||
long delay = TimeAmount.toTicks(50, TimeUnit.SECONDS);
|
||||
long period = TimeAmount.toTicks(1, TimeUnit.SECONDS);
|
||||
runnableFactory.create(null, this).runTaskTimerAsynchronously(delay, period);
|
||||
runnableFactory.create(this).runTaskTimerAsynchronously(delay, period);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -19,10 +19,9 @@ package com.djrapitops.plan.gathering.timed;
|
||||
import com.djrapitops.plan.TaskSystem;
|
||||
import com.djrapitops.plan.utilities.logging.ErrorContext;
|
||||
import com.djrapitops.plan.utilities.logging.ErrorLogger;
|
||||
import com.djrapitops.plugin.api.TimeAmount;
|
||||
import com.djrapitops.plugin.logging.L;
|
||||
import com.djrapitops.plugin.logging.console.PluginLogger;
|
||||
import com.djrapitops.plugin.task.RunnableFactory;
|
||||
import net.playeranalytics.plugin.scheduling.RunnableFactory;
|
||||
import net.playeranalytics.plugin.scheduling.TimeAmount;
|
||||
import net.playeranalytics.plugin.server.PluginLogger;
|
||||
|
||||
import java.util.concurrent.TimeUnit;
|
||||
|
||||
@ -50,7 +49,7 @@ public abstract class TPSCounter extends TaskSystem.Task {
|
||||
pulse();
|
||||
} catch (Exception | NoClassDefFoundError | NoSuchMethodError | NoSuchFieldError e) {
|
||||
logger.error("TPS Count Task Disabled due to error, reload Plan to re-enable.");
|
||||
errorLogger.log(L.ERROR, e, ErrorContext.builder().whatToDo("See if a restart fixes this or Report this").build());
|
||||
errorLogger.error(e, ErrorContext.builder().whatToDo("See if a restart fixes this or Report this").build());
|
||||
cancel();
|
||||
}
|
||||
}
|
||||
@ -58,7 +57,7 @@ public abstract class TPSCounter extends TaskSystem.Task {
|
||||
public void register(RunnableFactory runnableFactory) {
|
||||
long delay = TimeAmount.toTicks(1L, TimeUnit.MINUTES);
|
||||
long period = TimeAmount.toTicks(1L, TimeUnit.SECONDS);
|
||||
runnableFactory.create(null, this).runTaskTimer(delay, period);
|
||||
runnableFactory.create(this).runTaskTimer(delay, period);
|
||||
}
|
||||
|
||||
public abstract void pulse();
|
||||
|
@ -20,8 +20,7 @@ import com.djrapitops.plan.exceptions.database.DBOpException;
|
||||
import com.djrapitops.plan.storage.database.DBSystem;
|
||||
import com.djrapitops.plan.storage.database.queries.objects.UserIdentifierQueries;
|
||||
import com.djrapitops.plan.utilities.logging.ErrorLogger;
|
||||
import com.djrapitops.plugin.api.utility.UUIDFetcher;
|
||||
import com.djrapitops.plugin.logging.L;
|
||||
import net.playeranalytics.plugin.player.UUIDFetcher;
|
||||
|
||||
import javax.inject.Inject;
|
||||
import javax.inject.Singleton;
|
||||
@ -93,7 +92,7 @@ public class UUIDUtility {
|
||||
try {
|
||||
return dbSystem.getDatabase().query(UserIdentifierQueries.fetchPlayerUUIDOf(playerName));
|
||||
} catch (DBOpException e) {
|
||||
errorLogger.log(L.ERROR, e);
|
||||
errorLogger.error(e);
|
||||
return Optional.empty();
|
||||
}
|
||||
}
|
||||
|
@ -1,90 +0,0 @@
|
||||
/*
|
||||
* This file is part of Player Analytics (Plan).
|
||||
*
|
||||
* Plan is free software: you can redistribute it and/or modify
|
||||
* it under the terms of the GNU Lesser General Public License v3 as published by
|
||||
* the Free Software Foundation, either version 3 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* Plan is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU Lesser General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU Lesser General Public License
|
||||
* along with Plan. If not, see <https://www.gnu.org/licenses/>.
|
||||
*/
|
||||
package com.djrapitops.plan.modules;
|
||||
|
||||
import com.djrapitops.plan.PlanPlugin;
|
||||
import com.djrapitops.plan.utilities.logging.ErrorLogger;
|
||||
import com.djrapitops.plugin.IPlugin;
|
||||
import com.djrapitops.plugin.benchmarking.Timings;
|
||||
import com.djrapitops.plugin.command.ColorScheme;
|
||||
import com.djrapitops.plugin.logging.console.PluginLogger;
|
||||
import com.djrapitops.plugin.logging.debug.DebugLogger;
|
||||
import com.djrapitops.plugin.logging.error.ErrorHandler;
|
||||
import com.djrapitops.plugin.task.RunnableFactory;
|
||||
import dagger.Module;
|
||||
import dagger.Provides;
|
||||
|
||||
import javax.inject.Named;
|
||||
import javax.inject.Singleton;
|
||||
|
||||
/**
|
||||
* Dagger module for defining Abstract Plugin Framework utilities.
|
||||
*
|
||||
* @author AuroraLS3
|
||||
*/
|
||||
@Module
|
||||
public class APFModule {
|
||||
@Provides
|
||||
@Singleton
|
||||
IPlugin provideIPlugin(PlanPlugin plugin) {
|
||||
return plugin;
|
||||
}
|
||||
|
||||
@Provides
|
||||
@Named("currentVersion")
|
||||
@Singleton
|
||||
String provideCurrentVersion(IPlugin plugin) {
|
||||
return plugin.getVersion().replace("%buildNumber%", "?");
|
||||
}
|
||||
|
||||
@Provides
|
||||
@Singleton
|
||||
ColorScheme provideColorScheme(PlanPlugin plugin) {
|
||||
return plugin.getColorScheme();
|
||||
}
|
||||
|
||||
@Provides
|
||||
@Singleton
|
||||
DebugLogger provideDebugLogger(IPlugin plugin) {
|
||||
return plugin.getDebugLogger();
|
||||
}
|
||||
|
||||
@Provides
|
||||
@Singleton
|
||||
PluginLogger providePluginLogger(IPlugin plugin) {
|
||||
return plugin.getPluginLogger();
|
||||
}
|
||||
|
||||
@Provides
|
||||
@Singleton
|
||||
ErrorHandler provideErrorHandler(ErrorLogger errorLogger) {
|
||||
return errorLogger;
|
||||
}
|
||||
|
||||
@Provides
|
||||
@Singleton
|
||||
Timings provideTimings(IPlugin plugin) {
|
||||
return plugin.getTimings();
|
||||
}
|
||||
|
||||
@Provides
|
||||
@Singleton
|
||||
RunnableFactory provideRunnableFactory(IPlugin plugin) {
|
||||
return plugin.getRunnableFactory();
|
||||
}
|
||||
|
||||
}
|
@ -0,0 +1,83 @@
|
||||
/*
|
||||
* This file is part of Player Analytics (Plan).
|
||||
*
|
||||
* Plan is free software: you can redistribute it and/or modify
|
||||
* it under the terms of the GNU Lesser General Public License v3 as published by
|
||||
* the Free Software Foundation, either version 3 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* Plan is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU Lesser General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU Lesser General Public License
|
||||
* along with Plan. If not, see <https://www.gnu.org/licenses/>.
|
||||
*/
|
||||
package com.djrapitops.plan.modules;
|
||||
|
||||
import com.djrapitops.plan.PlanPlugin;
|
||||
import com.djrapitops.plan.commands.use.ColorScheme;
|
||||
import dagger.Module;
|
||||
import dagger.Provides;
|
||||
import net.playeranalytics.plugin.PlatformAbstractionLayer;
|
||||
import net.playeranalytics.plugin.PluginInformation;
|
||||
import net.playeranalytics.plugin.dependencies.DependencyLoader;
|
||||
import net.playeranalytics.plugin.scheduling.RunnableFactory;
|
||||
import net.playeranalytics.plugin.server.Listeners;
|
||||
import net.playeranalytics.plugin.server.PluginLogger;
|
||||
|
||||
import javax.inject.Named;
|
||||
import javax.inject.Singleton;
|
||||
|
||||
/**
|
||||
* Dagger module for defining Platform Abstraction Layer utilities.
|
||||
*
|
||||
* @author AuroraLS3
|
||||
*/
|
||||
@Module
|
||||
public class PlatformAbstractionLayerModule {
|
||||
|
||||
@Provides
|
||||
@Named("currentVersion")
|
||||
@Singleton
|
||||
String provideCurrentVersion(PluginInformation pluginInformation) {
|
||||
return pluginInformation.getVersion();
|
||||
}
|
||||
|
||||
@Provides
|
||||
@Singleton
|
||||
ColorScheme provideColorScheme(PlanPlugin plugin) {
|
||||
return plugin.getColorScheme();
|
||||
}
|
||||
|
||||
@Provides
|
||||
@Singleton
|
||||
PluginLogger providePluginLogger(PlatformAbstractionLayer abstractionLayer) {
|
||||
return abstractionLayer.getPluginLogger();
|
||||
}
|
||||
|
||||
@Provides
|
||||
@Singleton
|
||||
RunnableFactory provideRunnableFactory(PlatformAbstractionLayer abstractionLayer) {
|
||||
return abstractionLayer.getRunnableFactory();
|
||||
}
|
||||
|
||||
@Provides
|
||||
@Singleton
|
||||
DependencyLoader provideDependencyLoader(PlatformAbstractionLayer abstractionLayer) {
|
||||
return abstractionLayer.getDependencyLoader();
|
||||
}
|
||||
|
||||
@Provides
|
||||
@Singleton
|
||||
Listeners provideListeners(PlatformAbstractionLayer abstractionLayer) {
|
||||
return abstractionLayer.getListeners();
|
||||
}
|
||||
|
||||
@Provides
|
||||
@Singleton
|
||||
PluginInformation providePluginInformation(PlatformAbstractionLayer abstractionLayer) {
|
||||
return abstractionLayer.getPluginInformation();
|
||||
}
|
||||
}
|
@ -18,7 +18,6 @@ package com.djrapitops.plan.modules;
|
||||
|
||||
import com.djrapitops.plan.DataService;
|
||||
import com.djrapitops.plan.DataSvc;
|
||||
import com.djrapitops.plan.PlanPlugin;
|
||||
import com.djrapitops.plan.delivery.webserver.cache.JSONFileStorage;
|
||||
import com.djrapitops.plan.delivery.webserver.cache.JSONMemoryStorageShim;
|
||||
import com.djrapitops.plan.delivery.webserver.cache.JSONStorage;
|
||||
@ -33,6 +32,7 @@ import com.djrapitops.plan.utilities.logging.PluginErrorLogger;
|
||||
import dagger.Module;
|
||||
import dagger.Provides;
|
||||
import dagger.multibindings.ElementsIntoSet;
|
||||
import net.playeranalytics.plugin.PluginInformation;
|
||||
|
||||
import javax.inject.Named;
|
||||
import javax.inject.Singleton;
|
||||
@ -76,15 +76,15 @@ public class SystemObjectProvidingModule {
|
||||
|
||||
@Provides
|
||||
@Singleton
|
||||
JarResource.StreamFunction provideJarStreamFunction(PlanPlugin plugin) {
|
||||
return plugin::getResource;
|
||||
JarResource.StreamFunction provideJarStreamFunction(PluginInformation pluginInformation) {
|
||||
return pluginInformation::getResourceFromJar;
|
||||
}
|
||||
|
||||
@Provides
|
||||
@Singleton
|
||||
@Named("dataFolder")
|
||||
File provideDataFolder(PlanPlugin plugin) {
|
||||
return plugin.getDataFolder();
|
||||
File provideDataFolder(PluginInformation pluginInformation) {
|
||||
return pluginInformation.getDataFolder();
|
||||
}
|
||||
|
||||
@Provides
|
||||
|
@ -21,9 +21,8 @@ import com.djrapitops.plan.settings.locale.Locale;
|
||||
import com.djrapitops.plan.settings.locale.lang.PluginLang;
|
||||
import com.djrapitops.plan.utilities.logging.ErrorContext;
|
||||
import com.djrapitops.plan.utilities.logging.ErrorLogger;
|
||||
import com.djrapitops.plugin.logging.L;
|
||||
import com.djrapitops.plugin.logging.console.PluginLogger;
|
||||
import dagger.Lazy;
|
||||
import net.playeranalytics.plugin.server.PluginLogger;
|
||||
import org.apache.commons.lang3.concurrent.BasicThreadFactory;
|
||||
|
||||
import javax.inject.Inject;
|
||||
@ -59,7 +58,7 @@ public class Processing implements SubSystem {
|
||||
new BasicThreadFactory.Builder()
|
||||
.namingPattern(s)
|
||||
.uncaughtExceptionHandler((thread, throwable) ->
|
||||
errorLogger.log(L.WARN, throwable, ErrorContext.builder().build())
|
||||
errorLogger.warn(throwable, ErrorContext.builder().build())
|
||||
).build());
|
||||
}
|
||||
|
||||
@ -111,14 +110,14 @@ public class Processing implements SubSystem {
|
||||
|
||||
private <T> T exceptionHandlerNonCritical(T t, Throwable throwable) {
|
||||
if (throwable != null) {
|
||||
errorLogger.log(L.WARN, throwable.getCause(), ErrorContext.builder().build());
|
||||
errorLogger.warn(throwable.getCause(), ErrorContext.builder().build());
|
||||
}
|
||||
return t;
|
||||
}
|
||||
|
||||
private <T> T exceptionHandlerCritical(T t, Throwable throwable) {
|
||||
if (throwable != null) {
|
||||
errorLogger.log(L.ERROR, throwable.getCause(), ErrorContext.builder().build());
|
||||
errorLogger.error(throwable.getCause(), ErrorContext.builder().build());
|
||||
}
|
||||
return t;
|
||||
}
|
||||
@ -164,7 +163,7 @@ public class Processing implements SubSystem {
|
||||
try {
|
||||
runnable.run();
|
||||
} catch (Exception | NoClassDefFoundError | NoSuchMethodError | NoSuchFieldError e) {
|
||||
errorLogger.log(L.WARN, e, ErrorContext.builder().build());
|
||||
errorLogger.warn(e, ErrorContext.builder().build());
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -26,7 +26,6 @@ import com.djrapitops.plan.storage.database.queries.QueryAPIQuery;
|
||||
import com.djrapitops.plan.storage.database.transactions.Transaction;
|
||||
import com.djrapitops.plan.utilities.logging.ErrorContext;
|
||||
import com.djrapitops.plan.utilities.logging.ErrorLogger;
|
||||
import com.djrapitops.plugin.logging.L;
|
||||
|
||||
import javax.inject.Inject;
|
||||
import javax.inject.Singleton;
|
||||
@ -108,7 +107,7 @@ public class QuerySvc implements QueryService {
|
||||
try {
|
||||
subscriber.accept(playerUUID);
|
||||
} catch (DBOpException e) {
|
||||
errorLogger.log(L.WARN, e, ErrorContext.builder()
|
||||
errorLogger.warn(e, ErrorContext.builder()
|
||||
.whatToDo("Report to this Query API user " + subscriber.getClass().getName())
|
||||
.related("Subscriber: " + subscriber.getClass().getName()).build());
|
||||
}
|
||||
@ -120,7 +119,7 @@ public class QuerySvc implements QueryService {
|
||||
try {
|
||||
function.apply();
|
||||
} catch (DBOpException e) {
|
||||
errorLogger.log(L.WARN, e, ErrorContext.builder()
|
||||
errorLogger.warn(e, ErrorContext.builder()
|
||||
.whatToDo("Report to this Query API user " + function.getClass().getName())
|
||||
.related("Subscriber: " + function.getClass().getName()).build());
|
||||
}
|
||||
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue
Block a user