From c3ad15ee5d68524492fdb301f9e010a8572b4a25 Mon Sep 17 00:00:00 2001 From: Jeremy Wood Date: Sat, 13 Jun 2020 00:10:36 -0400 Subject: [PATCH 1/4] Refactor metrics initialization into its own class. --- .../MultiverseCore/MultiverseCore.java | 42 +----------- .../utils/MetricsConfigurator.java | 67 +++++++++++++++++++ 2 files changed, 70 insertions(+), 39 deletions(-) create mode 100644 src/main/java/com/onarandombox/MultiverseCore/utils/MetricsConfigurator.java diff --git a/src/main/java/com/onarandombox/MultiverseCore/MultiverseCore.java b/src/main/java/com/onarandombox/MultiverseCore/MultiverseCore.java index 52b9074af..fe545926f 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.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/MetricsConfigurator.java b/src/main/java/com/onarandombox/MultiverseCore/utils/MetricsConfigurator.java new file mode 100644 index 000000000..a30371155 --- /dev/null +++ b/src/main/java/com/onarandombox/MultiverseCore/utils/MetricsConfigurator.java @@ -0,0 +1,67 @@ +package com.onarandombox.MultiverseCore.utils; + +import java.util.HashMap; +import java.util.Map; + +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; + +public class MetricsConfigurator { + + private static final int PLUGIN_ID = 7765; + + 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 { + createCustomGeneratorsMetric(); + createEnvironmentsMetric(); + + Logging.fine("Metrics enabled."); + } catch (Exception e) { + Logging.warning("There was an issue while enabling metrics:"); + e.printStackTrace(); + } + } + + private void createCustomGeneratorsMetric() { + metrics.addCustomChart(new Metrics.AdvancedPie("custom_generators", () -> { + Map map = new HashMap<>(); + for (MultiverseWorld w : plugin.getMVWorldManager().getMVWorlds()) { + String gen = w.getGenerator() != null ? w.getGenerator() : "N/A"; + map.putIfAbsent(gen, 0); + map.put(gen, map.get(gen) + 1); + } + + return map; + })); + } + + private void createEnvironmentsMetric() { + metrics.addCustomChart(new Metrics.AdvancedPie("environments", () -> { + Map map = new HashMap<>(); + for (MultiverseWorld w : plugin.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; + })); + } +} From dd484b5584ddbedc96a674b72bfc0b59d59cd816 Mon Sep 17 00:00:00 2001 From: Jeremy Wood Date: Sat, 13 Jun 2020 00:26:02 -0400 Subject: [PATCH 2/4] Simplify the creation of metrics. --- .../MultiverseCore/MultiverseCore.java | 2 +- .../{ => metrics}/MetricsConfigurator.java | 24 +++++++++---------- .../utils/metrics/MetricsHelper.java | 18 ++++++++++++++ 3 files changed, 30 insertions(+), 14 deletions(-) rename src/main/java/com/onarandombox/MultiverseCore/utils/{ => metrics}/MetricsConfigurator.java (76%) 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 fe545926f..772a4c722 100644 --- a/src/main/java/com/onarandombox/MultiverseCore/MultiverseCore.java +++ b/src/main/java/com/onarandombox/MultiverseCore/MultiverseCore.java @@ -93,7 +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.MetricsConfigurator; +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; diff --git a/src/main/java/com/onarandombox/MultiverseCore/utils/MetricsConfigurator.java b/src/main/java/com/onarandombox/MultiverseCore/utils/metrics/MetricsConfigurator.java similarity index 76% rename from src/main/java/com/onarandombox/MultiverseCore/utils/MetricsConfigurator.java rename to src/main/java/com/onarandombox/MultiverseCore/utils/metrics/MetricsConfigurator.java index a30371155..3497089bd 100644 --- a/src/main/java/com/onarandombox/MultiverseCore/utils/MetricsConfigurator.java +++ b/src/main/java/com/onarandombox/MultiverseCore/utils/metrics/MetricsConfigurator.java @@ -1,7 +1,7 @@ -package com.onarandombox.MultiverseCore.utils; +package com.onarandombox.MultiverseCore.utils.metrics; -import java.util.HashMap; import java.util.Map; +import java.util.function.Consumer; import com.dumptruckman.minecraft.util.Logging; import com.onarandombox.MultiverseCore.MultiverseCore; @@ -28,7 +28,7 @@ private MetricsConfigurator(MultiverseCore plugin) { private void initMetrics() { try { - createCustomGeneratorsMetric(); + addCustomGeneratorsMetric(); createEnvironmentsMetric(); Logging.fine("Metrics enabled."); @@ -38,30 +38,28 @@ private void initMetrics() { } } - private void createCustomGeneratorsMetric() { - metrics.addCustomChart(new Metrics.AdvancedPie("custom_generators", () -> { - Map map = new HashMap<>(); + private void addCustomGeneratorsMetric() { + addAdvancedPieMetric("custom_generators", map -> { for (MultiverseWorld w : plugin.getMVWorldManager().getMVWorlds()) { String gen = w.getGenerator() != null ? w.getGenerator() : "N/A"; map.putIfAbsent(gen, 0); map.put(gen, map.get(gen) + 1); } - - return map; - })); + }); } private void createEnvironmentsMetric() { - metrics.addCustomChart(new Metrics.AdvancedPie("environments", () -> { - Map map = new HashMap<>(); + addAdvancedPieMetric("environments", map -> { for (MultiverseWorld w : plugin.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; - })); + 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..a92927858 --- /dev/null +++ b/src/main/java/com/onarandombox/MultiverseCore/utils/metrics/MetricsHelper.java @@ -0,0 +1,18 @@ +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 { + ; + + static Metrics.AdvancedPie createAdvancedPieChart(String chartId, Consumer> metricsFunc) { + Map map = new HashMap<>(); + metricsFunc.accept(map); + return new Metrics.AdvancedPie(chartId, () -> map); + } + +} From 4915f7f4b8c560903ad3bf0f5c8819fd2ed503aa Mon Sep 17 00:00:00 2001 From: Jeremy Wood Date: Sat, 13 Jun 2020 00:34:39 -0400 Subject: [PATCH 3/4] Clean up new metrics. --- .../utils/metrics/MetricsConfigurator.java | 24 +++++++++++++------ 1 file changed, 17 insertions(+), 7 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 3497089bd..81223d4dd 100644 --- a/src/main/java/com/onarandombox/MultiverseCore/utils/metrics/MetricsConfigurator.java +++ b/src/main/java/com/onarandombox/MultiverseCore/utils/metrics/MetricsConfigurator.java @@ -8,10 +8,12 @@ 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); @@ -41,24 +43,32 @@ private void initMetrics() { private void addCustomGeneratorsMetric() { addAdvancedPieMetric("custom_generators", map -> { for (MultiverseWorld w : plugin.getMVWorldManager().getMVWorlds()) { - String gen = w.getGenerator() != null ? w.getGenerator() : "N/A"; - map.putIfAbsent(gen, 0); - map.put(gen, map.get(gen) + 1); + String gen = getGeneratorName(w); + Integer count = map.getOrDefault(gen, 0); + map.put(gen, count + 1); } }); } + 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()) { - String env = w.getEnvironment().name().replace('_', ' '); - env = StringUtils.capitalize(env.toLowerCase()); - map.putIfAbsent(env, 0); - map.put(env, map.get(env) + 1); + String env = titleCaseEnv(w.getEnvironment()); + Integer count = map.getOrDefault(env, 0); + map.put(env, count + 1); } }); } + 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)); } From 715532fa8d658658da6889abe758a641e853bad5 Mon Sep 17 00:00:00 2001 From: Jeremy Wood Date: Sat, 13 Jun 2020 00:47:43 -0400 Subject: [PATCH 4/4] Refactor out duplicate metrics code. --- .../MultiverseCore/utils/metrics/MetricsConfigurator.java | 8 ++------ .../MultiverseCore/utils/metrics/MetricsHelper.java | 8 ++++++++ 2 files changed, 10 insertions(+), 6 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 81223d4dd..30cc0353e 100644 --- a/src/main/java/com/onarandombox/MultiverseCore/utils/metrics/MetricsConfigurator.java +++ b/src/main/java/com/onarandombox/MultiverseCore/utils/metrics/MetricsConfigurator.java @@ -43,9 +43,7 @@ private void initMetrics() { private void addCustomGeneratorsMetric() { addAdvancedPieMetric("custom_generators", map -> { for (MultiverseWorld w : plugin.getMVWorldManager().getMVWorlds()) { - String gen = getGeneratorName(w); - Integer count = map.getOrDefault(gen, 0); - map.put(gen, count + 1); + MetricsHelper.incrementCount(map, getGeneratorName(w)); } }); } @@ -57,9 +55,7 @@ private String getGeneratorName(MultiverseWorld world) { private void createEnvironmentsMetric() { addAdvancedPieMetric("environments", map -> { for (MultiverseWorld w : plugin.getMVWorldManager().getMVWorlds()) { - String env = titleCaseEnv(w.getEnvironment()); - Integer count = map.getOrDefault(env, 0); - map.put(env, count + 1); + MetricsHelper.incrementCount(map, titleCaseEnv(w.getEnvironment())); } }); } 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 a92927858..b7a92a5e2 100644 --- a/src/main/java/com/onarandombox/MultiverseCore/utils/metrics/MetricsHelper.java +++ b/src/main/java/com/onarandombox/MultiverseCore/utils/metrics/MetricsHelper.java @@ -9,6 +9,14 @@ 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);