com.comphenix.protocol.metrics.Statistics.java Source code

Java tutorial

Introduction

Here is the source code for com.comphenix.protocol.metrics.Statistics.java

Source

/*
 *  ProtocolLib - Bukkit server library that allows access to the Minecraft protocol.
 *  Copyright (C) 2012 Kristian S. Stangeland
 *
 *  This program is free software; you can redistribute it and/or modify it under the terms of the 
 *  GNU General Public License as published by the Free Software Foundation; either version 2 of 
 *  the License, or (at your option) any later version.
 *
 *  This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; 
 *  without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. 
 *  See the GNU General Public License for more details.
 *
 *  You should have received a copy of the GNU General Public License along with this program; 
 *  if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 
 *  02111-1307 USA
 */

package com.comphenix.protocol.metrics;

import java.io.IOException;
import java.util.HashMap;
import java.util.Map;

import com.comphenix.protocol.ProtocolLib;
import com.comphenix.protocol.ProtocolLibrary;
import com.comphenix.protocol.events.PacketAdapter;
import com.comphenix.protocol.events.PacketListener;

import org.apache.commons.lang3.tuple.Pair;
import org.bukkit.plugin.Plugin;

public class Statistics {

    // Metrics
    private Metrics metrics;

    public Statistics(ProtocolLib plugin) throws IOException {
        metrics = new Metrics(plugin);
        metrics.logFailedRequests(plugin.getProtocolConfig().isDebug());

        // Determine who is using this library
        addPluginUserGraph(metrics);
    }

    private void addPluginUserGraph(Metrics metrics) {
        metrics.addCustomChart(new Metrics.AdvancedPie("Plugin Users", this::getPluginUsers));
        metrics.addCustomChart(new Metrics.SimplePie("buildVersion", () -> splitVersion().getRight()));
    }

    public static Pair<String, String> splitVersion() {
        String version = ProtocolLibrary.getPlugin().getDescription().getVersion();
        if (version.contains("-b")) {
            String[] split = version.split("-b");
            return Pair.of(split[0], split[1]);
        } else {
            return Pair.of(version, "Unknown");
        }
    }

    // Retrieve loaded plugins
    private Map<String, Integer> getPluginUsers() {
        Map<String, Integer> users = new HashMap<>();

        for (PacketListener listener : ProtocolLibrary.getProtocolManager().getPacketListeners()) {
            String name = PacketAdapter.getPluginName(listener);

            // Increment occurence
            if (!users.containsKey(name)) {
                users.put(name, 1);
            } else {
                users.put(name, users.get(name) + 1);
            }
        }

        return users;
    }
}