From d23c3240356d80c8bb5dc18fe80af8e35b544573 Mon Sep 17 00:00:00 2001 From: KHobbits Date: Mon, 10 Dec 2012 17:30:12 +0000 Subject: Metrics Diff --- .../com/earth2me/essentials/metrics/Metrics.java | 72 ++++++++++++++-------- 1 file changed, 45 insertions(+), 27 deletions(-) diff --git a/Essentials/src/com/earth2me/essentials/metrics/Metrics.java b/Essentials/src/com/earth2me/essentials/metrics/Metrics.java index a0bf103e8..646c8ad82 100644 --- a/Essentials/src/com/earth2me/essentials/metrics/Metrics.java +++ b/Essentials/src/com/earth2me/essentials/metrics/Metrics.java @@ -126,7 +126,7 @@ public class Metrics // Do we need to create the file? if (configuration.get("guid", null) == null) { - configuration.options().header("http://metrics.griefcraft.com").copyDefaults(true); + configuration.options().header("http://mcstats.org").copyDefaults(true); configuration.save(configurationFile); } @@ -138,7 +138,7 @@ public class Metrics * Construct and create a Graph that can be used to separate specific plotters to their own graphs on the metrics * website. Plotters can be added to the graph object returned. * - * @param name + * @param name The name of the graph * @return Graph object created. Will never return NULL under normal circumstances unless bad parameters are given */ public Graph createGraph(final String name) @@ -161,7 +161,7 @@ public class Metrics /** * Adds a custom data plotter to the default graph * - * @param plotter + * @param plotter The plotter to use to plot custom data */ public void addCustomData(final Plotter plotter) { @@ -209,6 +209,11 @@ public class Metrics { plugin.getServer().getScheduler().cancelTask(taskId); taskId = -1; + // Tell all plotters to stop gathering information. + for (Graph graph : graphs) + { + graph.onOptOut(); + } } } @@ -233,7 +238,7 @@ public class Metrics /** * Has the server owner denied plugin metrics? * - * @return + * @return true if metrics should be opted out of it */ public boolean isOptOut() { @@ -242,7 +247,7 @@ public class Metrics try { // Reload the metrics file - configuration.load(CONFIG_FILE); + configuration.load(getConfigFile()); } catch (IOException ex) { @@ -297,8 +302,7 @@ public class Metrics if (!isOptOut()) { configuration.set("opt-out", true); - final File file = new File(CONFIG_FILE); - configuration.save(file); + configuration.save(configurationFile); } // Disable Task, if it is running @@ -310,6 +314,24 @@ public class Metrics } } + /** + * Gets the File object of the config file that should be used to store data such as the GUID and opt-out status + * + * @return the File object for the config file + */ + public File getConfigFile() + { + // I believe the easiest way to get the base folder (e.g craftbukkit set via -P) for plugins to use + // is to abuse the plugin object we already have + // plugin.getDataFolder() => base/plugins/PluginA/ + // pluginsFolder => base/plugins/ + // The base is not necessarily relative to the startup directory. + File pluginsFolder = plugin.getDataFolder().getParentFile(); + + // return => base/plugins/PluginMetrics/config.yml + return new File(new File(pluginsFolder, "PluginMetrics"), "config.yml"); + } + /** * Generic method that posts a plugin to the metrics website */ @@ -342,10 +364,6 @@ public class Metrics { final Graph graph = iter.next(); - // Because we have a lock on the graphs set already, it is reasonable to assume - // that our lock transcends down to the individual plotters in the graphs also. - // Because our methods are private, no one but us can reasonably access this list - // without reflection so this is a safe assumption without adding more code. for (Plotter plotter : graph.getPlotters()) { // The key name to send to the metrics server @@ -364,7 +382,7 @@ public class Metrics } // Create the url - final URL url = new URL(BASE_URL + String.format(REPORT_URL, description.getName())); + URL url = new URL(BASE_URL + String.format(REPORT_URL, encode(plugin.getDescription().getName()))); // Connect to the website URLConnection connection; @@ -420,13 +438,12 @@ public class Metrics } } } - //if (response.startsWith("OK")) - We should get "OK" followed by an optional description if everything goes right } /** * Check if mineshafter is present. If it is, we need to bypass it to send POST requests * - * @return + * @return true if mineshafter is installed on the server */ private boolean isMineshafterPresent() { @@ -450,10 +467,9 @@ public class Metrics * encodeDataPair(data, "version", description.getVersion()); * * - * @param buffer - * @param key - * @param value - * @return + * @param buffer the stringbuilder to append the data pair onto + * @param key the key value + * @param value the value */ private static void encodeDataPair(final StringBuilder buffer, final String key, final String value) throws UnsupportedEncodingException { @@ -463,8 +479,8 @@ public class Metrics /** * Encode text as UTF-8 * - * @param text - * @return + * @param text the text to encode + * @return the encoded text, as UTF-8 */ private static String encode(final String text) throws UnsupportedEncodingException { @@ -495,7 +511,7 @@ public class Metrics /** * Gets the graph's name * - * @return + * @return the Graph's name */ public String getName() { @@ -505,7 +521,7 @@ public class Metrics /** * Add a plotter to the graph, which will be used to plot entries * - * @param plotter + * @param plotter the plotter to add to the graph */ public void addPlotter(final Plotter plotter) { @@ -515,7 +531,7 @@ public class Metrics /** * Remove a plotter from the graph * - * @param plotter + * @param plotter the plotter to remove from the graph */ public void removePlotter(final Plotter plotter) { @@ -525,7 +541,7 @@ public class Metrics /** * Gets an unmodifiable set of the plotter objects in the graph * - * @return + * @return an unmodifiable {@link Set} of the plotter objects */ public Set getPlotters() { @@ -573,7 +589,7 @@ public class Metrics /** * Construct a plotter with a specific plot name * - * @param name + * @param name the name of the plotter to use, which will show up on the website */ public Plotter(final String name) { @@ -581,9 +597,11 @@ public class Metrics } /** - * Get the current value for the plotted point + * Get the current value for the plotted point. Since this function defers to an external function it may or may + * not return immediately thus cannot be guaranteed to be thread friendly or safe. This function can be called + * from any thread so care should be taken when accessing resources that need to be synchronized. * - * @return + * @return the current value for the point to be plotted. */ public abstract int getValue(); -- cgit v1.2.3