Add metric opt out toggle ingame.

This commit is contained in:
KHobbits 2012-03-15 03:49:17 +00:00
parent 5d79863cfc
commit d0d0117411
6 changed files with 69 additions and 16 deletions

View File

@ -24,6 +24,7 @@ import com.earth2me.essentials.commands.EssentialsCommand;
import com.earth2me.essentials.commands.IEssentialsCommand; import com.earth2me.essentials.commands.IEssentialsCommand;
import com.earth2me.essentials.commands.NoChargeException; import com.earth2me.essentials.commands.NoChargeException;
import com.earth2me.essentials.commands.NotEnoughArgumentsException; import com.earth2me.essentials.commands.NotEnoughArgumentsException;
import com.earth2me.essentials.metrics.Metrics;
import com.earth2me.essentials.metrics.MetricsListener; import com.earth2me.essentials.metrics.MetricsListener;
import com.earth2me.essentials.metrics.MetricsStarter; import com.earth2me.essentials.metrics.MetricsStarter;
import com.earth2me.essentials.perm.PermissionsHandler; import com.earth2me.essentials.perm.PermissionsHandler;
@ -84,6 +85,7 @@ public class Essentials extends JavaPlugin implements IEssentials
private transient UserMap userMap; private transient UserMap userMap;
private transient ExecuteTimer execTimer; private transient ExecuteTimer execTimer;
private transient I18n i18n; private transient I18n i18n;
private transient Metrics metrics;
@Override @Override
public ISettings getSettings() public ISettings getSettings()
@ -239,13 +241,13 @@ public class Essentials extends JavaPlugin implements IEssentials
getScheduler().scheduleSyncRepeatingTask(this, timer, 1, 100); getScheduler().scheduleSyncRepeatingTask(this, timer, 1, 100);
Economy.setEss(this); Economy.setEss(this);
execTimer.mark("RegListeners"); execTimer.mark("RegListeners");
final MetricsStarter metricsStarter = new MetricsStarter(this); final MetricsStarter metricsStarter = new MetricsStarter(this);
if (metricsStarter.getStart()) if (metricsStarter.getStart() != null && metricsStarter.getStart() == true)
{ {
getScheduler().scheduleAsyncDelayedTask(this, metricsStarter, 1); getScheduler().scheduleAsyncDelayedTask(this, metricsStarter, 1);
} }
else if (metricsStarter.getStart() == false) else if (metricsStarter.getStart() != null && metricsStarter.getStart() == false)
{ {
final MetricsListener metricsListener = new MetricsListener(this, metricsStarter); final MetricsListener metricsListener = new MetricsListener(this, metricsStarter);
pm.registerEvents(metricsListener, this); pm.registerEvents(metricsListener, this);
@ -449,6 +451,16 @@ public class Essentials extends JavaPlugin implements IEssentials
return backup; return backup;
} }
public Metrics getMetrics()
{
return metrics;
}
public void setMetrics(Metrics metrics)
{
this.metrics = metrics;
}
@Override @Override
public User getUser(final Object base) public User getUser(final Object base)
{ {

View File

@ -1,6 +1,7 @@
package com.earth2me.essentials; package com.earth2me.essentials;
import com.earth2me.essentials.api.IJails; import com.earth2me.essentials.api.IJails;
import com.earth2me.essentials.metrics.Metrics;
import com.earth2me.essentials.perm.PermissionsHandler; import com.earth2me.essentials.perm.PermissionsHandler;
import com.earth2me.essentials.register.payment.Methods; import com.earth2me.essentials.register.payment.Methods;
import org.bukkit.World; import org.bukkit.World;
@ -65,4 +66,9 @@ public interface IEssentials extends Plugin
ItemDb getItemDb(); ItemDb getItemDb();
UserMap getUserMap(); UserMap getUserMap();
Metrics getMetrics();
void setMetrics(Metrics metrics);
} }

View File

@ -2,8 +2,12 @@ package com.earth2me.essentials.commands;
import static com.earth2me.essentials.I18n._; import static com.earth2me.essentials.I18n._;
import com.earth2me.essentials.Util; import com.earth2me.essentials.Util;
import com.earth2me.essentials.metrics.Metrics;
import java.io.IOException;
import java.util.HashMap; import java.util.HashMap;
import java.util.Map; import java.util.Map;
import java.util.logging.Level;
import java.util.logging.Logger;
import org.bukkit.Location; import org.bukkit.Location;
import org.bukkit.Material; import org.bukkit.Material;
import org.bukkit.Server; import org.bukkit.Server;
@ -40,6 +44,10 @@ public class Commandessentials extends EssentialsCommand
{ {
run_moo(server, sender, commandLabel, args); run_moo(server, sender, commandLabel, args);
} }
else if (args[0].equalsIgnoreCase("opt-out"))
{
run_optout(server, sender, commandLabel, args);
}
else { else {
run_reload(server, sender, commandLabel, args); run_reload(server, sender, commandLabel, args);
} }
@ -171,4 +179,19 @@ public class Commandessentials extends EssentialsCommand
else else
sender.sendMessage(new String[]{" (__)", " (oo)", " /------\\/", " / | | |", " * /\\---/\\", " ~~ ~~", "....\"Have you mooed today?\"..." } ); sender.sendMessage(new String[]{" (__)", " (oo)", " /------\\/", " / | | |", " * /\\---/\\", " ~~ ~~", "....\"Have you mooed today?\"..." } );
} }
private void run_optout(final Server server, final CommandSender sender, final String command, final String args[])
{
final Metrics metrics = ess.getMetrics();
try
{
sender.sendMessage("Essentials collects simple metrics to highlight which features to concentrate work on in the future.");
metrics.setOptOut(!metrics.isOptOut());
sender.sendMessage("Annonmous Metrics are now: " + (metrics.isOptOut() ? "disabled" : "enabled"));
}
catch (IOException ex)
{
sender.sendMessage("Unable to modify 'plugins/PluginMetrics/config.yml': " + ex.getMessage());
}
}
} }

View File

@ -97,7 +97,11 @@ public class Metrics
/** /**
* The plugin configuration file * The plugin configuration file
*/ */
private final YamlConfiguration configuration; private final YamlConfiguration configuration;
/**
* The plugin configuration file
*/
private final File configurationFile;
/** /**
* Unique server id * Unique server id
*/ */
@ -113,8 +117,8 @@ public class Metrics
this.plugin = plugin; this.plugin = plugin;
// load the config // load the config
File file = new File(CONFIG_FILE); configurationFile = new File(CONFIG_FILE);
configuration = YamlConfiguration.loadConfiguration(file); configuration = YamlConfiguration.loadConfiguration(configurationFile);
// add some defaults // add some defaults
configuration.addDefault("opt-out", false); configuration.addDefault("opt-out", false);
@ -124,7 +128,7 @@ public class Metrics
if (configuration.get("guid", null) == null) if (configuration.get("guid", null) == null)
{ {
configuration.options().header("http://metrics.griefcraft.com").copyDefaults(true); configuration.options().header("http://metrics.griefcraft.com").copyDefaults(true);
configuration.save(file); configuration.save(configurationFile);
} }
// Load the guid then // Load the guid then
@ -178,6 +182,12 @@ public class Metrics
{ {
return configuration.getBoolean("opt-out", false); return configuration.getBoolean("opt-out", false);
} }
public void setOptOut(final boolean toggle) throws IOException
{
configuration.set("opt-out", toggle);
configuration.save(configurationFile);
}
/** /**
* Start measuring statistics. This will immediately create an async repeating task as the plugin and send the * Start measuring statistics. This will immediately create an async repeating task as the plugin and send the

View File

@ -31,7 +31,7 @@ public class MetricsListener implements Listener
if (ess.getSettings().isMetricsEnabled() == false && (player.isAuthorized("essentials.essentials") || player.isAuthorized("bukkit.broadcast.admin"))) if (ess.getSettings().isMetricsEnabled() == false && (player.isAuthorized("essentials.essentials") || player.isAuthorized("bukkit.broadcast.admin")))
{ {
player.sendMessage("PluginMetrics collects minimal statistic data, starting in about 5 minutes."); player.sendMessage("PluginMetrics collects minimal statistic data, starting in about 5 minutes.");
player.sendMessage("To opt out, edit plugins/PluginMetrics/config.yml."); player.sendMessage("To opt out, run /essentials opt-out");
ess.getLogger().log(Level.INFO, "[Metrics] Admin join - Starting 5 minute opt-out period."); ess.getLogger().log(Level.INFO, "[Metrics] Admin join - Starting 5 minute opt-out period.");
ess.getSettings().setMetricsEnabled(true); ess.getSettings().setMetricsEnabled(true);
ess.getScheduler().scheduleAsyncDelayedTask(ess, starter, 5 * 1200); ess.getScheduler().scheduleAsyncDelayedTask(ess, starter, 5 * 1200);

View File

@ -29,7 +29,9 @@ public class MetricsStarter implements Runnable
ess = plugin; ess = plugin;
try try
{ {
final Metrics metrics = new Metrics(ess); final Metrics metrics = new Metrics(ess);
ess.setMetrics(metrics);
if (!metrics.isOptOut()) if (!metrics.isOptOut())
{ {
@ -40,14 +42,14 @@ public class MetricsStarter implements Runnable
else else
{ {
ess.getLogger().info("This plugin collects minimal statistic data and sends it to http://metrics.essentials3.net."); ess.getLogger().info("This plugin collects minimal statistic data and sends it to http://metrics.essentials3.net.");
ess.getLogger().info("You can opt out by changing plugins/PluginMetrics/config.yml, set opt-out to true."); ess.getLogger().info("You can opt out by running /essentials opt-out");
ess.getLogger().info("This will start 5 minutes after the first admin/op joins."); ess.getLogger().info("This will start 5 minutes after the first admin/op joins.");
start = false; start = false;
} }
return; return;
} }
} }
catch (IOException ex) catch (Exception ex)
{ {
metricsError(ex); metricsError(ex);
} }
@ -58,9 +60,9 @@ public class MetricsStarter implements Runnable
{ {
try try
{ {
final Metrics metrics = new Metrics(ess); final Metrics metrics = ess.getMetrics();
Graph moduleGraph = metrics.createGraph("Modules Used"); final Graph moduleGraph = metrics.createGraph("Modules Used");
for (Modules module : Modules.values()) for (Modules module : Modules.values())
{ {
final String moduleName = module.toString(); final String moduleName = module.toString();
@ -70,10 +72,10 @@ public class MetricsStarter implements Runnable
} }
} }
Graph localeGraph = metrics.createGraph("Locale"); final Graph localeGraph = metrics.createGraph("Locale");
localeGraph.addPlotter(new SimplePlotter(ess.getI18n().getCurrentLocale().getDisplayLanguage(Locale.ENGLISH))); localeGraph.addPlotter(new SimplePlotter(ess.getI18n().getCurrentLocale().getDisplayLanguage(Locale.ENGLISH)));
Graph featureGraph = metrics.createGraph("Features"); final Graph featureGraph = metrics.createGraph("Features");
featureGraph.addPlotter(new Plotter("Unique Accounts") featureGraph.addPlotter(new Plotter("Unique Accounts")
{ {
@Override @Override
@ -102,13 +104,13 @@ public class MetricsStarter implements Runnable
metrics.start(); metrics.start();
} }
catch (IOException ex) catch (Exception ex)
{ {
metricsError(ex); metricsError(ex);
} }
} }
public void metricsError(IOException ex) public void metricsError(final Exception ex)
{ {
if (ess.getSettings().isDebug()) if (ess.getSettings().isDebug())
{ {