From 4894abd1f1b66a87f7793487cd772cc5d3b7e0fd Mon Sep 17 00:00:00 2001 From: Kermina Awad Date: Sat, 6 Jun 2020 13:36:53 -0400 Subject: [PATCH 1/6] switch to bStats --- pom.xml | 15 +-- .../MultiverseCore/MultiverseCore.java | 120 +++++------------- 2 files changed, 42 insertions(+), 93 deletions(-) diff --git a/pom.xml b/pom.xml index 477573893..0949061fc 100644 --- a/pom.xml +++ b/pom.xml @@ -33,10 +33,9 @@ minebench-repo https://repo.minebench.de/ - - elmakers-repo - http://maven.elmakers.com/repository/ + CodeMC + https://repo.codemc.org/repository/maven-public @@ -203,8 +202,8 @@ com.onarandombox.buscript - org.mcstats - com.onarandombox.mcstats + org.bstats + com.onarandombox.bstats com.dumptruckman.minecraft.util.Logging @@ -283,9 +282,9 @@ 2.0-SNAPSHOT - org.mcstats.bukkit - metrics - R8-SNAPSHOT + org.bstats + bstats-bukkit + 1.7 org.bukkit diff --git a/src/main/java/com/onarandombox/MultiverseCore/MultiverseCore.java b/src/main/java/com/onarandombox/MultiverseCore/MultiverseCore.java index dbe1ca568..be090a6c1 100644 --- a/src/main/java/com/onarandombox/MultiverseCore/MultiverseCore.java +++ b/src/main/java/com/onarandombox/MultiverseCore/MultiverseCore.java @@ -17,11 +17,9 @@ import java.util.Arrays; import java.util.Collections; import java.util.HashMap; -import java.util.HashSet; import java.util.LinkedHashMap; import java.util.List; import java.util.Map; -import java.util.Set; import java.util.logging.Level; import buscript.Buscript; @@ -105,11 +103,11 @@ import com.pneumaticraft.commandhandler.CommandHandler; import me.main__.util.SerializationConfig.NoSuchPropertyException; import me.main__.util.SerializationConfig.SerializationConfig; +import org.bstats.bukkit.Metrics; import org.bukkit.ChatColor; import org.bukkit.Difficulty; import org.bukkit.GameMode; import org.bukkit.Location; -import org.bukkit.World.Environment; import org.bukkit.command.Command; import org.bukkit.command.CommandSender; import org.bukkit.configuration.Configuration; @@ -122,7 +120,6 @@ import org.bukkit.plugin.PluginManager; import org.bukkit.plugin.java.JavaPlugin; import org.bukkit.plugin.java.JavaPluginLoader; -import org.mcstats.Metrics; /** * The implementation of the Multiverse-{@link Core}. @@ -355,95 +352,48 @@ private void initializeBuscript() { buscript.setScriptVariable("multiverse", this); } - /** - * Plotter for Environment-Values. - */ - private static final class EnvironmentPlotter extends Metrics.Plotter { - private MultiverseCore core; - private final Environment env; - - public EnvironmentPlotter(MultiverseCore core, Environment env) { - super(envToString(env)); - this.core = core; - this.env = env; - } + private void setupMetrics() { + try { + Metrics metrics = new Metrics(this, 7765); + + metrics.addCustomChart(new Metrics.AdvancedPie("custom_generators", () -> { + Map map = new HashMap<>(); + for (MultiverseWorld w : this.getMVWorldManager().getMVWorlds()) { + if (w.getGenerator() != null && !w.getGenerator().equalsIgnoreCase("null")) { + map.putIfAbsent(w.getGenerator(), 0); + map.put(w.getGenerator(), map.get(w.getGenerator()) + 1); + } + } - private static String envToString(Environment env) { - return new StringBuilder().append(env.name().toUpperCase().charAt(0)) - .append(env.name().toLowerCase().substring(1)).toString(); - } + return map; + })); - @Override - public int getValue() { - int count = 0; - for (MultiverseWorld w : core.getMVWorldManager().getMVWorlds()) - if (w.getEnvironment() == env) - count++; - core.log(Level.FINE, String.format("Tracking %d worlds of type %s", count, env)); - return count; - } - } + metrics.addCustomChart(new Metrics.AdvancedPie("environments", () -> { + Map map = new HashMap<>(); + for (MultiverseWorld w : this.getMVWorldManager().getMVWorlds()) { + StringBuilder environment = new StringBuilder(); + String[] environmentArray = w.getEnvironment().name().split("_"); - /** - * Plotter for Generator-Values. - */ - private static final class GeneratorPlotter extends Metrics.Plotter { - private MultiverseCore core; - private final String gen; - - public GeneratorPlotter(MultiverseCore core, String gen) { - super(gen); - this.core = core; - this.gen = gen; - } + for (int i = 0; i < environmentArray.length; i++) { + environment.append(environmentArray[i].substring(0, 1).toUpperCase()); + environment.append(environmentArray[i].substring(1).toLowerCase()); + if (i != environmentArray.length - 1) environment.append(" "); + } - @Override - public int getValue() { - int count = 0; - for (MultiverseWorld w : core.getMVWorldManager().getMVWorlds()) - if (gen.equals(w.getGenerator())) - count++; - core.log(Level.FINE, String.format("Tracking %d worlds of type %s", count, gen)); - return count; - } - } + String e = environment.toString(); + map.putIfAbsent(e, 0); + map.put(e, map.get(e) + 1); + } - private void setupMetrics() { - try { - Metrics m = new Metrics(this); + // TODO: add Worlds vs Loaded Worlds once bStats adds support for multi-line charts - Metrics.Graph envGraph = m.createGraph("Worlds by environment"); - for (Environment env : Environment.values()) - envGraph.addPlotter(new EnvironmentPlotter(this, env)); + return map; + })); - Metrics.Graph loadedWorldsGraph = m.createGraph("Worlds by environment"); - loadedWorldsGraph.addPlotter(new Metrics.Plotter("Loaded worlds") { - @Override - public int getValue() { - return getMVWorldManager().getMVWorlds().size(); - } - }); - loadedWorldsGraph.addPlotter(new Metrics.Plotter("Total number of worlds") { - @Override - public int getValue() { - return getMVWorldManager().getMVWorlds().size() - + getMVWorldManager().getUnloadedWorlds().size(); - } - }); - - Set gens = new HashSet(); - for (MultiverseWorld w : this.getMVWorldManager().getMVWorlds()) - gens.add(w.getGenerator()); - gens.remove(null); - gens.remove("null"); - Metrics.Graph genGraph = m.createGraph("Custom Generators"); - for (String gen : gens) - genGraph.addPlotter(new GeneratorPlotter(this, gen)); - - m.start(); - log(Level.FINE, "Metrics have run!"); + log(Level.FINE, "Metrics were set up!"); } catch (Exception e) { - log(Level.WARNING, "There was an issue while enabling metrics: " + e.getMessage()); + log(Level.WARNING, "There was an issue while enabling metrics:"); + e.printStackTrace(); } } From 1cbe901e4df8e8c66a558b9681008b96a234180c Mon Sep 17 00:00:00 2001 From: Kermina Awad Date: Sat, 6 Jun 2020 13:38:03 -0400 Subject: [PATCH 2/6] lead dev should be the first author listed --- src/main/resources/plugin.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/resources/plugin.yml b/src/main/resources/plugin.yml index d65a37791..5a4dfeba3 100644 --- a/src/main/resources/plugin.yml +++ b/src/main/resources/plugin.yml @@ -1,6 +1,6 @@ name: Multiverse-Core main: com.onarandombox.MultiverseCore.MultiverseCore -authors: ['Rigby', 'fernferret', 'lithium3141', 'main--', 'dumptruckman'] +authors: ['dumptruckman', 'Rigby', 'fernferret', 'lithium3141', 'main--'] website: 'https://dev.bukkit.org/projects/multiverse-core' api-version: 1.13 version: maven-version-number From 8983a0c0244acc53a7241604cd341562fae91a5f Mon Sep 17 00:00:00 2001 From: Kermina Awad Date: Sun, 7 Jun 2020 19:31:51 -0400 Subject: [PATCH 3/6] add vault as softdepend --- src/main/resources/plugin.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/src/main/resources/plugin.yml b/src/main/resources/plugin.yml index 5a4dfeba3..5359af214 100644 --- a/src/main/resources/plugin.yml +++ b/src/main/resources/plugin.yml @@ -2,6 +2,7 @@ name: Multiverse-Core main: com.onarandombox.MultiverseCore.MultiverseCore authors: ['dumptruckman', 'Rigby', 'fernferret', 'lithium3141', 'main--'] website: 'https://dev.bukkit.org/projects/multiverse-core' +softdepend: ['Vault'] api-version: 1.13 version: maven-version-number commands: From 268c4982c3b392784297725dba1160710797be00 Mon Sep 17 00:00:00 2001 From: Kermina Awad Date: Fri, 12 Jun 2020 23:50:17 -0400 Subject: [PATCH 4/6] update metric implementations --- .../MultiverseCore/MultiverseCore.java | 27 +++++++------------ 1 file changed, 9 insertions(+), 18 deletions(-) diff --git a/src/main/java/com/onarandombox/MultiverseCore/MultiverseCore.java b/src/main/java/com/onarandombox/MultiverseCore/MultiverseCore.java index be090a6c1..52b9074af 100644 --- a/src/main/java/com/onarandombox/MultiverseCore/MultiverseCore.java +++ b/src/main/java/com/onarandombox/MultiverseCore/MultiverseCore.java @@ -103,6 +103,7 @@ import com.pneumaticraft.commandhandler.CommandHandler; import me.main__.util.SerializationConfig.NoSuchPropertyException; import me.main__.util.SerializationConfig.SerializationConfig; +import org.apache.commons.lang.StringUtils; import org.bstats.bukkit.Metrics; import org.bukkit.ChatColor; import org.bukkit.Difficulty; @@ -359,10 +360,9 @@ private void setupMetrics() { metrics.addCustomChart(new Metrics.AdvancedPie("custom_generators", () -> { Map map = new HashMap<>(); for (MultiverseWorld w : this.getMVWorldManager().getMVWorlds()) { - if (w.getGenerator() != null && !w.getGenerator().equalsIgnoreCase("null")) { - map.putIfAbsent(w.getGenerator(), 0); - map.put(w.getGenerator(), map.get(w.getGenerator()) + 1); - } + String gen = w.getGenerator() != null ? w.getGenerator() : "N/A"; + map.putIfAbsent(gen, 0); + map.put(gen, map.get(gen) + 1); } return map; @@ -371,25 +371,16 @@ private void setupMetrics() { metrics.addCustomChart(new Metrics.AdvancedPie("environments", () -> { Map map = new HashMap<>(); for (MultiverseWorld w : this.getMVWorldManager().getMVWorlds()) { - StringBuilder environment = new StringBuilder(); - String[] environmentArray = w.getEnvironment().name().split("_"); - - for (int i = 0; i < environmentArray.length; i++) { - environment.append(environmentArray[i].substring(0, 1).toUpperCase()); - environment.append(environmentArray[i].substring(1).toLowerCase()); - if (i != environmentArray.length - 1) environment.append(" "); - } - - String e = environment.toString(); - map.putIfAbsent(e, 0); - map.put(e, map.get(e) + 1); + String env = w.getEnvironment().name().replace('_', ' '); + env = StringUtils.capitalize(env.toLowerCase()); + map.putIfAbsent(env, 0); + map.put(env, map.get(env) + 1); } - // TODO: add Worlds vs Loaded Worlds once bStats adds support for multi-line charts - return map; })); + // TODO: add Worlds vs Loaded Worlds once bStats adds support for multi-line charts log(Level.FINE, "Metrics were set up!"); } catch (Exception e) { log(Level.WARNING, "There was an issue while enabling metrics:"); From 04c65cc59e5949cb2138654e4f7482ba081883ef Mon Sep 17 00:00:00 2001 From: Jeremy Wood Date: Sat, 13 Jun 2020 00:51:18 -0400 Subject: [PATCH 5/6] Cleanup new metrics implementation. (#2286) * Refactor metrics initialization into its own class. * Simplify the creation of metrics. * Clean up new metrics. * Refactor out duplicate metrics code. --- .../MultiverseCore/MultiverseCore.java | 42 +---------- .../utils/metrics/MetricsConfigurator.java | 71 +++++++++++++++++++ .../utils/metrics/MetricsHelper.java | 26 +++++++ 3 files changed, 100 insertions(+), 39 deletions(-) create mode 100644 src/main/java/com/onarandombox/MultiverseCore/utils/metrics/MetricsConfigurator.java create mode 100644 src/main/java/com/onarandombox/MultiverseCore/utils/metrics/MetricsHelper.java diff --git a/src/main/java/com/onarandombox/MultiverseCore/MultiverseCore.java b/src/main/java/com/onarandombox/MultiverseCore/MultiverseCore.java index 52b9074af..772a4c722 100644 --- a/src/main/java/com/onarandombox/MultiverseCore/MultiverseCore.java +++ b/src/main/java/com/onarandombox/MultiverseCore/MultiverseCore.java @@ -32,7 +32,6 @@ import com.onarandombox.MultiverseCore.api.MVWorldManager; import com.onarandombox.MultiverseCore.api.MultiverseCoreConfig; import com.onarandombox.MultiverseCore.api.MultiverseMessaging; -import com.onarandombox.MultiverseCore.api.MultiverseWorld; import com.onarandombox.MultiverseCore.api.SafeTTeleporter; import com.onarandombox.MultiverseCore.commands.AnchorCommand; import com.onarandombox.MultiverseCore.commands.CheckCommand; @@ -94,6 +93,7 @@ import com.onarandombox.MultiverseCore.utils.MVPermissions; import com.onarandombox.MultiverseCore.utils.MVPlayerSession; import com.onarandombox.MultiverseCore.utils.MaterialConverter; +import com.onarandombox.MultiverseCore.utils.metrics.MetricsConfigurator; import com.onarandombox.MultiverseCore.utils.SimpleBlockSafety; import com.onarandombox.MultiverseCore.utils.SimpleLocationManipulation; import com.onarandombox.MultiverseCore.utils.SimpleSafeTTeleporter; @@ -103,8 +103,6 @@ import com.pneumaticraft.commandhandler.CommandHandler; import me.main__.util.SerializationConfig.NoSuchPropertyException; import me.main__.util.SerializationConfig.SerializationConfig; -import org.apache.commons.lang.StringUtils; -import org.bstats.bukkit.Metrics; import org.bukkit.ChatColor; import org.bukkit.Difficulty; import org.bukkit.GameMode; @@ -333,7 +331,8 @@ public void onEnable() { getServer().getPluginManager().registerEvents(this.chatListener, this); this.initializeBuscript(); - this.setupMetrics(); + + MetricsConfigurator.configureMetrics(this); // Output a little snippet to show it's enabled. Logging.config("Version %s (API v%s) Enabled - By %s", this.getDescription().getVersion(), PROTOCOL, getAuthors()); @@ -353,41 +352,6 @@ private void initializeBuscript() { buscript.setScriptVariable("multiverse", this); } - private void setupMetrics() { - try { - Metrics metrics = new Metrics(this, 7765); - - metrics.addCustomChart(new Metrics.AdvancedPie("custom_generators", () -> { - Map map = new HashMap<>(); - for (MultiverseWorld w : this.getMVWorldManager().getMVWorlds()) { - String gen = w.getGenerator() != null ? w.getGenerator() : "N/A"; - map.putIfAbsent(gen, 0); - map.put(gen, map.get(gen) + 1); - } - - return map; - })); - - metrics.addCustomChart(new Metrics.AdvancedPie("environments", () -> { - Map map = new HashMap<>(); - for (MultiverseWorld w : this.getMVWorldManager().getMVWorlds()) { - String env = w.getEnvironment().name().replace('_', ' '); - env = StringUtils.capitalize(env.toLowerCase()); - map.putIfAbsent(env, 0); - map.put(env, map.get(env) + 1); - } - - return map; - })); - - // TODO: add Worlds vs Loaded Worlds once bStats adds support for multi-line charts - log(Level.FINE, "Metrics were set up!"); - } catch (Exception e) { - log(Level.WARNING, "There was an issue while enabling metrics:"); - e.printStackTrace(); - } - } - private void initializeDestinationFactory() { this.destFactory = new DestinationFactory(this); this.destFactory.registerDestinationType(WorldDestination.class, ""); diff --git a/src/main/java/com/onarandombox/MultiverseCore/utils/metrics/MetricsConfigurator.java b/src/main/java/com/onarandombox/MultiverseCore/utils/metrics/MetricsConfigurator.java new file mode 100644 index 000000000..30cc0353e --- /dev/null +++ b/src/main/java/com/onarandombox/MultiverseCore/utils/metrics/MetricsConfigurator.java @@ -0,0 +1,71 @@ +package com.onarandombox.MultiverseCore.utils.metrics; + +import java.util.Map; +import java.util.function.Consumer; + +import com.dumptruckman.minecraft.util.Logging; +import com.onarandombox.MultiverseCore.MultiverseCore; +import com.onarandombox.MultiverseCore.api.MultiverseWorld; +import org.apache.commons.lang.StringUtils; +import org.bstats.bukkit.Metrics; +import org.bukkit.World; + +public class MetricsConfigurator { + + private static final int PLUGIN_ID = 7765; + private static final String NO_GENERATOR_NAME = "N/A"; + + public static void configureMetrics(MultiverseCore plugin) { + MetricsConfigurator configurator = new MetricsConfigurator(plugin); + configurator.initMetrics(); + } + + private final MultiverseCore plugin; + private final Metrics metrics; + + private MetricsConfigurator(MultiverseCore plugin) { + this.plugin = plugin; + this.metrics = new Metrics(plugin, PLUGIN_ID); + } + + private void initMetrics() { + try { + addCustomGeneratorsMetric(); + createEnvironmentsMetric(); + + Logging.fine("Metrics enabled."); + } catch (Exception e) { + Logging.warning("There was an issue while enabling metrics:"); + e.printStackTrace(); + } + } + + private void addCustomGeneratorsMetric() { + addAdvancedPieMetric("custom_generators", map -> { + for (MultiverseWorld w : plugin.getMVWorldManager().getMVWorlds()) { + MetricsHelper.incrementCount(map, getGeneratorName(w)); + } + }); + } + + private String getGeneratorName(MultiverseWorld world) { + return world.getGenerator() != null ? world.getGenerator() : NO_GENERATOR_NAME; + } + + private void createEnvironmentsMetric() { + addAdvancedPieMetric("environments", map -> { + for (MultiverseWorld w : plugin.getMVWorldManager().getMVWorlds()) { + MetricsHelper.incrementCount(map, titleCaseEnv(w.getEnvironment())); + } + }); + } + + private String titleCaseEnv(World.Environment env) { + String envName = env.name().replaceAll("_+", " "); + return StringUtils.capitalize(envName.toLowerCase()); + } + + private void addAdvancedPieMetric(String chartId, Consumer> metricsFunc) { + metrics.addCustomChart(MetricsHelper.createAdvancedPieChart(chartId, metricsFunc)); + } +} diff --git a/src/main/java/com/onarandombox/MultiverseCore/utils/metrics/MetricsHelper.java b/src/main/java/com/onarandombox/MultiverseCore/utils/metrics/MetricsHelper.java new file mode 100644 index 000000000..b7a92a5e2 --- /dev/null +++ b/src/main/java/com/onarandombox/MultiverseCore/utils/metrics/MetricsHelper.java @@ -0,0 +1,26 @@ +package com.onarandombox.MultiverseCore.utils.metrics; + +import java.util.HashMap; +import java.util.Map; +import java.util.function.Consumer; + +import org.bstats.bukkit.Metrics; + +enum MetricsHelper { + ; + + /** + * Adds one to the value in the given map with the given key. If the key does not exist in the map, it will be added with a value of 1. + */ + static void incrementCount(Map map, String key) { + Integer count = map.getOrDefault(key, 0); + map.put(key, count + 1); + } + + static Metrics.AdvancedPie createAdvancedPieChart(String chartId, Consumer> metricsFunc) { + Map map = new HashMap<>(); + metricsFunc.accept(map); + return new Metrics.AdvancedPie(chartId, () -> map); + } + +} From 582d6bef1aea750e1f802e45c13102e13c4fbc6f Mon Sep 17 00:00:00 2001 From: Jeremy Wood Date: Sat, 13 Jun 2020 01:17:00 -0400 Subject: [PATCH 6/6] Readd world count metric as multiline chart (for future use). --- .../utils/metrics/MetricsConfigurator.java | 31 ++++++++++++++++--- .../utils/metrics/MetricsHelper.java | 6 ++++ 2 files changed, 33 insertions(+), 4 deletions(-) diff --git a/src/main/java/com/onarandombox/MultiverseCore/utils/metrics/MetricsConfigurator.java b/src/main/java/com/onarandombox/MultiverseCore/utils/metrics/MetricsConfigurator.java index 30cc0353e..25aaf009f 100644 --- a/src/main/java/com/onarandombox/MultiverseCore/utils/metrics/MetricsConfigurator.java +++ b/src/main/java/com/onarandombox/MultiverseCore/utils/metrics/MetricsConfigurator.java @@ -1,10 +1,12 @@ package com.onarandombox.MultiverseCore.utils.metrics; +import java.util.Collection; import java.util.Map; import java.util.function.Consumer; import com.dumptruckman.minecraft.util.Logging; import com.onarandombox.MultiverseCore.MultiverseCore; +import com.onarandombox.MultiverseCore.api.MVWorldManager; import com.onarandombox.MultiverseCore.api.MultiverseWorld; import org.apache.commons.lang.StringUtils; import org.bstats.bukkit.Metrics; @@ -28,10 +30,19 @@ private MetricsConfigurator(MultiverseCore plugin) { this.metrics = new Metrics(plugin, PLUGIN_ID); } + private MVWorldManager getWorldManager() { + return plugin.getMVWorldManager(); + } + + private Collection getMVWorlds() { + return getWorldManager().getMVWorlds(); + } + private void initMetrics() { try { addCustomGeneratorsMetric(); - createEnvironmentsMetric(); + addEnvironmentsMetric(); + addWorldCountMetric(); Logging.fine("Metrics enabled."); } catch (Exception e) { @@ -42,7 +53,7 @@ private void initMetrics() { private void addCustomGeneratorsMetric() { addAdvancedPieMetric("custom_generators", map -> { - for (MultiverseWorld w : plugin.getMVWorldManager().getMVWorlds()) { + for (MultiverseWorld w : getMVWorlds()) { MetricsHelper.incrementCount(map, getGeneratorName(w)); } }); @@ -52,9 +63,9 @@ private String getGeneratorName(MultiverseWorld world) { return world.getGenerator() != null ? world.getGenerator() : NO_GENERATOR_NAME; } - private void createEnvironmentsMetric() { + private void addEnvironmentsMetric() { addAdvancedPieMetric("environments", map -> { - for (MultiverseWorld w : plugin.getMVWorldManager().getMVWorlds()) { + for (MultiverseWorld w : getMVWorlds()) { MetricsHelper.incrementCount(map, titleCaseEnv(w.getEnvironment())); } }); @@ -65,7 +76,19 @@ private String titleCaseEnv(World.Environment env) { return StringUtils.capitalize(envName.toLowerCase()); } + private void addWorldCountMetric() { + addMultiLineMetric("world_count", map -> { + int loadedWorldsCount = getMVWorlds().size(); + map.put("Loaded worlds", loadedWorldsCount); + map.put("Total number of worlds", loadedWorldsCount + getWorldManager().getUnloadedWorlds().size()); + }); + } + private void addAdvancedPieMetric(String chartId, Consumer> metricsFunc) { metrics.addCustomChart(MetricsHelper.createAdvancedPieChart(chartId, metricsFunc)); } + + private void addMultiLineMetric(String chartId, Consumer> metricsFunc) { + metrics.addCustomChart(MetricsHelper.createMultiLineChart(chartId, metricsFunc)); + } } diff --git a/src/main/java/com/onarandombox/MultiverseCore/utils/metrics/MetricsHelper.java b/src/main/java/com/onarandombox/MultiverseCore/utils/metrics/MetricsHelper.java index b7a92a5e2..23fb6eba6 100644 --- a/src/main/java/com/onarandombox/MultiverseCore/utils/metrics/MetricsHelper.java +++ b/src/main/java/com/onarandombox/MultiverseCore/utils/metrics/MetricsHelper.java @@ -23,4 +23,10 @@ static Metrics.AdvancedPie createAdvancedPieChart(String chartId, Consumer map); } + static Metrics.MultiLineChart createMultiLineChart(String chartId, Consumer> metricsFunc) { + Map map = new HashMap<>(); + metricsFunc.accept(map); + return new Metrics.MultiLineChart(chartId, () -> map); + } + }