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

View file

@ -1,6 +1,7 @@
package com.earth2me.essentials;
import com.earth2me.essentials.api.IJails;
import com.earth2me.essentials.metrics.Metrics;
import com.earth2me.essentials.perm.PermissionsHandler;
import com.earth2me.essentials.register.payment.Methods;
import org.bukkit.World;
@ -65,4 +66,9 @@ public interface IEssentials extends Plugin
ItemDb getItemDb();
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 com.earth2me.essentials.Util;
import com.earth2me.essentials.metrics.Metrics;
import java.io.IOException;
import java.util.HashMap;
import java.util.Map;
import java.util.logging.Level;
import java.util.logging.Logger;
import org.bukkit.Location;
import org.bukkit.Material;
import org.bukkit.Server;
@ -40,6 +44,10 @@ public class Commandessentials extends EssentialsCommand
{
run_moo(server, sender, commandLabel, args);
}
else if (args[0].equalsIgnoreCase("opt-out"))
{
run_optout(server, sender, commandLabel, args);
}
else {
run_reload(server, sender, commandLabel, args);
}
@ -171,4 +179,19 @@ public class Commandessentials extends EssentialsCommand
else
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
*/
private final YamlConfiguration configuration;
private final YamlConfiguration configuration;
/**
* The plugin configuration file
*/
private final File configurationFile;
/**
* Unique server id
*/
@ -113,8 +117,8 @@ public class Metrics
this.plugin = plugin;
// load the config
File file = new File(CONFIG_FILE);
configuration = YamlConfiguration.loadConfiguration(file);
configurationFile = new File(CONFIG_FILE);
configuration = YamlConfiguration.loadConfiguration(configurationFile);
// add some defaults
configuration.addDefault("opt-out", false);
@ -124,7 +128,7 @@ public class Metrics
if (configuration.get("guid", null) == null)
{
configuration.options().header("http://metrics.griefcraft.com").copyDefaults(true);
configuration.save(file);
configuration.save(configurationFile);
}
// Load the guid then
@ -178,6 +182,12 @@ public class Metrics
{
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

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")))
{
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.getSettings().setMetricsEnabled(true);
ess.getScheduler().scheduleAsyncDelayedTask(ess, starter, 5 * 1200);

View file

@ -29,7 +29,9 @@ public class MetricsStarter implements Runnable
ess = plugin;
try
{
final Metrics metrics = new Metrics(ess);
ess.setMetrics(metrics);
if (!metrics.isOptOut())
{
@ -40,14 +42,14 @@ public class MetricsStarter implements Runnable
else
{
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.");
start = false;
}
return;
}
}
catch (IOException ex)
catch (Exception ex)
{
metricsError(ex);
}
@ -58,9 +60,9 @@ public class MetricsStarter implements Runnable
{
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())
{
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)));
Graph featureGraph = metrics.createGraph("Features");
final Graph featureGraph = metrics.createGraph("Features");
featureGraph.addPlotter(new Plotter("Unique Accounts")
{
@Override
@ -102,13 +104,13 @@ public class MetricsStarter implements Runnable
metrics.start();
}
catch (IOException ex)
catch (Exception ex)
{
metricsError(ex);
}
}
public void metricsError(IOException ex)
public void metricsError(final Exception ex)
{
if (ess.getSettings().isDebug())
{