+ added metrics
This commit is contained in:
parent
17a34bd68e
commit
33b093edfd
184
src/de/Linus122/Metrics/Metrics.java
Normal file
184
src/de/Linus122/Metrics/Metrics.java
Normal file
@ -0,0 +1,184 @@
|
|||||||
|
package de.Linus122.Metrics;
|
||||||
|
|
||||||
|
import java.io.BufferedReader;
|
||||||
|
import java.io.DataOutputStream;
|
||||||
|
import java.io.File;
|
||||||
|
import java.io.FileReader;
|
||||||
|
import java.io.FilenameFilter;
|
||||||
|
import java.io.IOException;
|
||||||
|
import java.nio.file.Files;
|
||||||
|
import java.util.Arrays;
|
||||||
|
import java.util.HashMap;
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
import javax.net.ssl.HttpsURLConnection;
|
||||||
|
|
||||||
|
import org.bukkit.plugin.Plugin;
|
||||||
|
|
||||||
|
import com.google.gson.Gson;
|
||||||
|
|
||||||
|
|
||||||
|
/*
|
||||||
|
* SpaceIOMetrics main class by Linus122
|
||||||
|
* version: 0.05
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
public class Metrics {
|
||||||
|
private Plugin pl;
|
||||||
|
private final Gson gson = new Gson();
|
||||||
|
|
||||||
|
private String URL = "https://spaceio.xyz/update/%s";
|
||||||
|
private final String VERSION = "0.05";
|
||||||
|
private int REFRESH_INTERVAL = 600000;
|
||||||
|
|
||||||
|
public Metrics(Plugin pl){
|
||||||
|
this.pl = pl;
|
||||||
|
|
||||||
|
// check if Metrics are disabled (checks if file "disablemetrics" is added to the plugins's folder
|
||||||
|
try {
|
||||||
|
Files.list(pl.getDataFolder().getParentFile().toPath()).filter(Files::isRegularFile).forEach(v -> {
|
||||||
|
if(v.getFileName().toString().equalsIgnoreCase("disablemetrics")){
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
});
|
||||||
|
} catch (IOException e1) {
|
||||||
|
e1.printStackTrace();
|
||||||
|
}
|
||||||
|
|
||||||
|
URL = String.format(URL, pl.getName());
|
||||||
|
|
||||||
|
// fetching refresh interval first
|
||||||
|
pl.getServer().getScheduler().runTaskLaterAsynchronously(pl, () -> {
|
||||||
|
String dataJson = collectData();
|
||||||
|
try{
|
||||||
|
REFRESH_INTERVAL = sendData(dataJson);
|
||||||
|
}catch(Exception e){}
|
||||||
|
}, 20L * 5);
|
||||||
|
|
||||||
|
// executing repeating task, our main metrics updater
|
||||||
|
pl.getServer().getScheduler().runTaskTimerAsynchronously(pl, () -> {
|
||||||
|
String dataJson = collectData();
|
||||||
|
try{
|
||||||
|
sendData(dataJson);
|
||||||
|
}catch(Exception e){}
|
||||||
|
|
||||||
|
}, 20L * (REFRESH_INTERVAL / 1000), 20L * (REFRESH_INTERVAL / 1000));
|
||||||
|
}
|
||||||
|
private String collectData() {
|
||||||
|
Data data = new Data();
|
||||||
|
|
||||||
|
// collect plugin list
|
||||||
|
for(Plugin plug : pl.getServer().getPluginManager().getPlugins()) data.plugs.put(plug.getName(), plug.getDescription().getVersion());
|
||||||
|
|
||||||
|
// fetch online players
|
||||||
|
data.onlinePlayers = pl.getServer().getOnlinePlayers().size();
|
||||||
|
|
||||||
|
// server version
|
||||||
|
data.serverVersion = getVersion();
|
||||||
|
|
||||||
|
// plugin version
|
||||||
|
data.pluginVersion = pl.getDescription().getVersion();
|
||||||
|
|
||||||
|
// plugin author
|
||||||
|
data.pluginAuthors = pl.getDescription().getAuthors();
|
||||||
|
|
||||||
|
// core count
|
||||||
|
data.coreCnt = Runtime.getRuntime().availableProcessors();
|
||||||
|
|
||||||
|
// java version
|
||||||
|
data.javaRuntime = System.getProperty("java.runtime.version");
|
||||||
|
|
||||||
|
// online mode
|
||||||
|
data.onlineMode = pl.getServer().getOnlineMode();
|
||||||
|
|
||||||
|
// software information
|
||||||
|
data.osName = System.getProperty("os.name");
|
||||||
|
data.osArch = System.getProperty("os.arch");
|
||||||
|
data.osVersion = System.getProperty("os.version");
|
||||||
|
|
||||||
|
String executableName = new java.io.File(Metrics.class.getProtectionDomain()
|
||||||
|
.getCodeSource()
|
||||||
|
.getLocation()
|
||||||
|
.getPath())
|
||||||
|
.getName();
|
||||||
|
data.executableName = executableName;
|
||||||
|
|
||||||
|
data.diskSize = new File("/").getTotalSpace();
|
||||||
|
|
||||||
|
if(data.osName.equals("Linux")){
|
||||||
|
data.linuxDistro = getDistro();
|
||||||
|
}
|
||||||
|
|
||||||
|
return gson.toJson(data);
|
||||||
|
}
|
||||||
|
private int sendData(String dataJson) throws Exception{
|
||||||
|
java.net.URL obj = new java.net.URL(URL);
|
||||||
|
HttpsURLConnection con = (HttpsURLConnection) obj.openConnection();
|
||||||
|
|
||||||
|
con.setRequestMethod("POST");
|
||||||
|
con.setRequestProperty("User-Agent", "Java/Bukkit");
|
||||||
|
con.setRequestProperty("Metrics-Version", this.VERSION);
|
||||||
|
|
||||||
|
con.setDoOutput(true);
|
||||||
|
DataOutputStream wr = new DataOutputStream(con.getOutputStream());
|
||||||
|
wr.writeBytes(dataJson);
|
||||||
|
wr.flush();
|
||||||
|
wr.close();
|
||||||
|
|
||||||
|
return Integer.parseInt(con.getHeaderField("interval-millis"));
|
||||||
|
}
|
||||||
|
private String getVersion(){
|
||||||
|
String packageName = pl.getServer().getClass().getPackage().getName();
|
||||||
|
return packageName.substring(packageName.lastIndexOf('.') + 1);
|
||||||
|
}
|
||||||
|
// method source: http://www.jcgonzalez.com/linux-get-distro-from-java-examples
|
||||||
|
private String getDistro(){
|
||||||
|
//lists all the files ending with -release in the etc folder
|
||||||
|
File dir = new File("/etc/");
|
||||||
|
File fileList[] = new File[0];
|
||||||
|
if(dir.exists()){
|
||||||
|
fileList = dir.listFiles(new FilenameFilter() {
|
||||||
|
public boolean accept(File dir, String filename) {
|
||||||
|
return filename.endsWith("-release");
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
//looks for the version file (not all linux distros)
|
||||||
|
File fileVersion = new File("/proc/version");
|
||||||
|
if(fileVersion.exists()){
|
||||||
|
fileList = Arrays.copyOf(fileList,fileList.length+1);
|
||||||
|
fileList[fileList.length-1] = fileVersion;
|
||||||
|
}
|
||||||
|
//prints first version-related file
|
||||||
|
for (File f : fileList) {
|
||||||
|
try {
|
||||||
|
BufferedReader br = new BufferedReader(new FileReader(f));
|
||||||
|
String strLine = null;
|
||||||
|
while ((strLine = br.readLine()) != null) {
|
||||||
|
return strLine;
|
||||||
|
}
|
||||||
|
br.close();
|
||||||
|
} catch (Exception e) {}
|
||||||
|
}
|
||||||
|
return "unknown";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
class Data {
|
||||||
|
HashMap<String, String> plugs = new HashMap<String, String>();
|
||||||
|
int onlinePlayers;
|
||||||
|
String pluginVersion;
|
||||||
|
public List<String> pluginAuthors;
|
||||||
|
String serverVersion;
|
||||||
|
|
||||||
|
long diskSize;
|
||||||
|
int coreCnt;
|
||||||
|
String javaRuntime;
|
||||||
|
|
||||||
|
String executableName;
|
||||||
|
boolean onlineMode;
|
||||||
|
|
||||||
|
String osName;
|
||||||
|
String osArch;
|
||||||
|
String osVersion;
|
||||||
|
String linuxDistro;
|
||||||
|
}
|
@ -27,6 +27,7 @@ import org.bukkit.plugin.java.JavaPlugin;
|
|||||||
|
|
||||||
import com.google.gson.Gson;
|
import com.google.gson.Gson;
|
||||||
|
|
||||||
|
import de.Linus122.Metrics.Metrics;
|
||||||
import de.Linus122.TelegramComponents.Chat;
|
import de.Linus122.TelegramComponents.Chat;
|
||||||
|
|
||||||
|
|
||||||
@ -72,6 +73,7 @@ public class Main extends JavaPlugin implements Listener{
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}, 20L, 20L);
|
}, 20L, 20L);
|
||||||
|
new Metrics(this);
|
||||||
}
|
}
|
||||||
public static void save(){
|
public static void save(){
|
||||||
Gson gson = new Gson();
|
Gson gson = new Gson();
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
name: TelegramChat
|
name: TelegramChat
|
||||||
main: de.Linus122.TelegramChat.Main
|
main: de.Linus122.TelegramChat.Main
|
||||||
version: 1.0.9.6
|
version: 1.0.9.7
|
||||||
authors: [Linus122]
|
authors: [Linus122]
|
||||||
description: Brings minecraft chat to Telegram!
|
description: Brings minecraft chat to Telegram!
|
||||||
commands:
|
commands:
|
||||||
|
Loading…
Reference in New Issue
Block a user