package com.comphenix.xp.metrics; import java.io.IOException; import org.apache.commons.lang.NullArgumentException; import com.comphenix.xp.ExperienceMod; import com.comphenix.xp.extra.Service; import com.comphenix.xp.extra.ServiceProvider; import com.comphenix.xp.history.HawkeyeService; import com.comphenix.xp.history.LogBlockService; import com.comphenix.xp.messages.ChannelChatService; import com.comphenix.xp.messages.HeroService; import com.comphenix.xp.metrics.Metrics.Graph; import com.comphenix.xp.rewards.RewardTypes; public class DataCollector { private Metrics metrics; private ExperienceMod mod; public DataCollector(ExperienceMod mod) { if (mod == null) throw new NullArgumentException("mod"); try { // Initialize metrics this.mod = mod; this.metrics = new Metrics(mod); addOptionalMods(); addWarningCount(); metrics.start(); } catch (IOException e) { mod.printWarning(this, "Unable to load metrics: %s", e.getMessage()); } } // Whether or not any of the optional mods are present protected void addOptionalMods() { Graph optionalMods = metrics.createGraph("Optional Mods Enabled"); optionalMods.addPlotter(createServicePlotter(mod.getHistoryProviders(), "LogBlock", LogBlockService.NAME)); optionalMods.addPlotter(createServicePlotter(mod.getHistoryProviders(), "HawkEye", HawkeyeService.NAME)); optionalMods.addPlotter(createServicePlotter(mod.getRewardProvider(), "Vault", RewardTypes.ECONOMY.name() )); optionalMods.addPlotter(createServicePlotter(mod.getChannelProvider(), "HeroChat", HeroService.NAME)); optionalMods.addPlotter(createServicePlotter(mod.getChannelProvider(), "ChannelChat", ChannelChatService.NAME)); // And, finally, ExperienceBridgeMod optionalMods.addPlotter(new Metrics.Plotter("ExperienceBridgeMod") { public int getValue() { return mod.getServer().getPluginManager().getPlugin("ExperienceBridgeMod") != null ? 1 : 0; } }); } private <TService extends Service> Metrics.Plotter createServicePlotter( final ServiceProvider<TService> provider, final String plotName, final String serviceName) { // Create a plotter for this service return new Metrics.Plotter(plotName) { @Override public int getValue() { return isServiceEnabled(provider, serviceName) ? 1 : 0; } }; } protected void addWarningCount() { Graph optionalMods = metrics.createGraph("Warnings Count"); optionalMods.addPlotter(new Metrics.Plotter("Warnings") { public int getValue() { return mod.getInformer().messageCount(); } }); } /** * Determines if a given service is present and enabled. * @param provider - service provider. * @param name - name of the service. * @return TRUE if the service is present and enabled, FALSE otherwise */ protected <T extends Service> boolean isServiceEnabled(ServiceProvider<T> provider, String name) { return provider != null && provider.containsService(name) && provider.isEnabled(name); } /** * Gets the current instance of the Metrics service. * @return Metrics service. */ public Metrics getMetrics() { return metrics; } public ExperienceMod getMod() { return mod; } }