From 2c9acf02e56d4dad6ef3ba85b64df59c16e3d539 Mon Sep 17 00:00:00 2001 From: Alvin Dimas Praditya Date: Thu, 8 Aug 2024 22:15:36 +0700 Subject: [PATCH] fix benchmark result --- .idea/laravel-idea-personal.xml | 6 + build.gradle.kts | 1 + .../lagassist/cmd/CommandListener.java | 2 +- .../lagassist/minebench/Approximate.java | 9 +- .../lagassist/minebench/BenchResponse.java | 17 +- .../lagassist/minebench/HTTPClient.java | 101 ------------ .../lagassist/minebench/SpecsGetter.java | 153 ++++++++++++------ 7 files changed, 129 insertions(+), 160 deletions(-) create mode 100644 .idea/laravel-idea-personal.xml delete mode 100644 src/main/java/org/alvindimas05/lagassist/minebench/HTTPClient.java diff --git a/.idea/laravel-idea-personal.xml b/.idea/laravel-idea-personal.xml new file mode 100644 index 0000000..5d4cd8f --- /dev/null +++ b/.idea/laravel-idea-personal.xml @@ -0,0 +1,6 @@ + + + + + diff --git a/build.gradle.kts b/build.gradle.kts index d157899..bc0cab4 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -32,6 +32,7 @@ dependencies { compileOnly("io.papermc.paper:paper-api:$minecraftVersion-R0.1-SNAPSHOT") compileOnly("net.milkbowl.vault:VaultAPI:1.7") + implementation("com.google.code.gson:gson:2.11.0") implementation("io.netty:netty-all:4.1.111.Final") implementation("org.apache.directory.studio:org.apache.commons.lang:2.6") implementation("javax.xml.bind:jaxb-api:2.4.0-b180830.0359") diff --git a/src/main/java/org/alvindimas05/lagassist/cmd/CommandListener.java b/src/main/java/org/alvindimas05/lagassist/cmd/CommandListener.java index c2a43ff..5e2116f 100644 --- a/src/main/java/org/alvindimas05/lagassist/cmd/CommandListener.java +++ b/src/main/java/org/alvindimas05/lagassist/cmd/CommandListener.java @@ -208,7 +208,7 @@ private static void help18(CommandSender s) { s.sendMessage(" ✸ LagAssist TogglePhyisics - Toggles physics events."); s.sendMessage(" ✸ LagAssist ChunkAnalyse - Find the laggiest chunks"); s.sendMessage(" ✸ LagAssist GetMap - Get a graph of server TPS"); - s.sendMessage(" ✸ LagAssist Benchmark - Generates a performance report"); + s.sendMessage(" ✸ LagAssist Benchmark - Get bencmarked result of your cpu"); s.sendMessage(" ✸ LagAssist Ping - Shows a ping benchmark"); s.sendMessage(" ✸ LagAssist StatsBar - Get a simple action-bar TPS Meter"); s.sendMessage(" ✸ LagAssist TpChunk - Teleport to a chunk"); diff --git a/src/main/java/org/alvindimas05/lagassist/minebench/Approximate.java b/src/main/java/org/alvindimas05/lagassist/minebench/Approximate.java index 030b2ac..c49e0d3 100644 --- a/src/main/java/org/alvindimas05/lagassist/minebench/Approximate.java +++ b/src/main/java/org/alvindimas05/lagassist/minebench/Approximate.java @@ -124,11 +124,12 @@ public void run() { cs.sendMessage(" §2✸ §fCPU Name: §e" + cpuname); cs.sendMessage(""); if (br.getOk()) { - cs.sendMessage(" §2✸ §fCPU Score (SINGLE): §e" + br.getStringifiedSth()); - cs.sendMessage(" §2✸ §fCPU Score (MULTI): §e" + br.getStringifiedMth()); + cs.sendMessage(" §2✸ §fCPU Score: §e" + br.getStringifiedSth()); + cs.sendMessage(" §2✸ §fThread Score: §e" + br.getStringifiedTh()); } else { - cs.sendMessage(" §eBenchmark feature coming soon!"); - // cs.sendMessage(" §cThere was an error getting the full benchmark results."); + // cs.sendMessage(" §eBenchmark feature coming soon!"); + cs.sendMessage(" §cThere was an error getting the full benchmark results."); + cs.sendMessage(" §cYour CPU might be unsupported."); } cs.sendMessage(""); cs.sendMessage(" §2✸ §fDownload Speed: §e" + MIBDL + " Mib/s (" + MBDL + "MB/s)"); diff --git a/src/main/java/org/alvindimas05/lagassist/minebench/BenchResponse.java b/src/main/java/org/alvindimas05/lagassist/minebench/BenchResponse.java index d8d7f3f..32cfce3 100644 --- a/src/main/java/org/alvindimas05/lagassist/minebench/BenchResponse.java +++ b/src/main/java/org/alvindimas05/lagassist/minebench/BenchResponse.java @@ -4,15 +4,16 @@ public class BenchResponse { private int singlethread; private int multithread; - + private int thread; private boolean ok; - public BenchResponse(int singlethread, int multithread, boolean ok) { + public BenchResponse(int singlethread, int multithread, int thread, boolean ok) { this.singlethread = singlethread; this.multithread = multithread; + this.thread = thread; this.ok = ok; } - + public boolean getOk() { return ok; } @@ -43,7 +44,15 @@ public String getStringifiedMth() { return String.valueOf(multithread); } - public void setSinglethread(int singlethread) { + public String getStringifiedTh() { + if (thread < 0) { + return "Unknown Score"; + } + return String.valueOf(thread); + } + + + public void setSinglethread(int singlethread) { this.singlethread = singlethread; } diff --git a/src/main/java/org/alvindimas05/lagassist/minebench/HTTPClient.java b/src/main/java/org/alvindimas05/lagassist/minebench/HTTPClient.java deleted file mode 100644 index a9f733f..0000000 --- a/src/main/java/org/alvindimas05/lagassist/minebench/HTTPClient.java +++ /dev/null @@ -1,101 +0,0 @@ -package org.alvindimas05.lagassist.minebench; - -import java.io.IOException; -import java.io.InputStream; -import java.net.HttpURLConnection; -import java.net.URL; - -import org.bukkit.Bukkit; - -import org.alvindimas05.lagassist.utils.Others; -import com.google.gson.JsonObject; -import com.google.gson.JsonParser; - -public class HTTPClient { - - private InputStream is; - - public HTTPClient(String url) { - - is = getInputStream(url); - - } - - private static InputStream getInputStream(String url) { - - HttpURLConnection cnn; - try { - URL ur = new URL(url); - cnn = (HttpURLConnection) ur.openConnection(); - cnn.setRequestProperty("User-Agent", - "Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10.4; en-US; rv:1.9.2.2) Gecko/20100316 Firefox/3.6.2"); - cnn.addRequestProperty("Referer", "google.com"); - cnn.connect(); - String header = cnn.getHeaderField("location"); - if (header != null) { - HttpURLConnection redur = (HttpURLConnection) new URL(header.replaceAll("http", "https")) - .openConnection(); - redur.setRequestProperty("User-Agent", - "Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10.4; en-US; rv:1.9.2.2) Gecko/20100316 Firefox/3.6.2"); - redur.connect(); - - return redur.getInputStream(); - } else { - return cnn.getInputStream(); - } - } catch (IOException e) { - Bukkit.getLogger().warning("§e[§a✖§e] §fCouldn't connect to PassMark Data."); - - return null; - } - } - -// private static int getMultiThread(String s) { -// -// String regex = "(.*.)<\\/span>"; -// -// final Pattern pattern = Pattern.compile(regex, Pattern.MULTILINE); -// final Matcher matcher = pattern.matcher(s); -// -// if (!matcher.find()) { -// return -1; -// } -// -// return Integer.valueOf(matcher.group(1)); -// } -// -// private static int getSingleThread(String s) { -// -// String regex = "Single Thread Rating: <\\/strong>(.*.)
"; -// -// final Pattern pattern = Pattern.compile(regex, Pattern.MULTILINE); -// final Matcher matcher = pattern.matcher(s); -// -// if (!matcher.find()) { -// return -1; -// } -// -// float fl = Float.valueOf(matcher.group(1)); -// -// return (int) fl; -// } - - public BenchResponse getBenchmark() { - if (is == null) { - return new BenchResponse(-1, -1, false); - } - - String s = Others.readInputStreamAsString(is); - - JsonObject response = new JsonParser().parse(s).getAsJsonObject(); - - String status = response.get("status").getAsString(); - - if (!status.equalsIgnoreCase("OK")) { - return new BenchResponse(-1, -1, false); - } - - return new BenchResponse(response.get("single").getAsInt(), response.get("multi").getAsInt(), true); - } - -} diff --git a/src/main/java/org/alvindimas05/lagassist/minebench/SpecsGetter.java b/src/main/java/org/alvindimas05/lagassist/minebench/SpecsGetter.java index c6a37a6..26dd04a 100644 --- a/src/main/java/org/alvindimas05/lagassist/minebench/SpecsGetter.java +++ b/src/main/java/org/alvindimas05/lagassist/minebench/SpecsGetter.java @@ -8,42 +8,79 @@ import java.io.UnsupportedEncodingException; import java.lang.management.ManagementFactory; import java.lang.management.OperatingSystemMXBean; +import java.net.HttpURLConnection; +import java.net.MalformedURLException; +import java.net.URL; import java.net.URLEncoder; +import java.util.Arrays; +import java.util.List; +import java.util.Scanner; import java.util.regex.Matcher; import java.util.regex.Pattern; +import java.util.stream.Collectors; +import com.google.gson.Gson; import org.alvindimas05.lagassist.utils.Others; +class BenchmarkData { + public List data; + public static class BenchmarkCPU { + public String name; + public String cpumark; + public String thread; + } +} + public class SpecsGetter { private static OperatingSystemMXBean osmx = ManagementFactory.getOperatingSystemMXBean(); - private static String getLinuxCPU() { - - final String regex = "model name : (.*\\n)"; - - File fl = new File("/proc/cpuinfo"); - if (!fl.exists()) { - return "unknown"; - } - if (!fl.canRead()) { - return "unknown"; - } - try { - String stg = Others.readInputStreamAsString(new FileInputStream(fl)); - - final Pattern pattern = Pattern.compile(regex, Pattern.MULTILINE); - final Matcher matcher = pattern.matcher(stg); - matcher.find(); - - return matcher.group(1).replaceAll("\n", ""); - - } catch (IOException e) { - e.printStackTrace(); - return "unknown"; - } - - } +// private static String getLinuxCPU() { +// +// final String regex = "model name : (.*\\n)"; +// +// File fl = new File("/proc/cpuinfo"); +// if (!fl.exists()) { +// return "unknown"; +// } +// if (!fl.canRead()) { +// return "unknown"; +// } +// try { +// String stg = Others.readInputStreamAsString(new FileInputStream(fl)); +// +// final Pattern pattern = Pattern.compile(regex, Pattern.MULTILINE); +// final Matcher matcher = pattern.matcher(stg); +// matcher.find(); +// +// return matcher.group(1).replaceAll("\n", ""); +// +// } catch (IOException e) { +// e.printStackTrace(); +// return "unknown"; +// } +// +// } + + private static String formatCPU(String cpuname){ + return String.join(" ", + Arrays.stream(cpuname + .replaceAll("\\(R\\)", "") + .replaceAll(" CPU", "") + .split(" ")).toList().subList(0, 4)); + } + + private static String getLinuxCPU(){ + Runtime rt = Runtime.getRuntime(); + try { + Process proc = rt.exec("lscpu | grep 'Model name' | cut -f 2 -d ':' | awk '{$1=$1}1'"); + BufferedReader reader = new BufferedReader(new InputStreamReader(proc.getInputStream())); + + return formatCPU(reader.readLine()); + } catch(IOException e){ + return "unknown"; + } + } private static String getWindowsCPU() { Runtime rt = Runtime.getRuntime(); @@ -52,8 +89,7 @@ private static String getWindowsCPU() { BufferedReader reader = new BufferedReader(new InputStreamReader(proc.getInputStream())); reader.readLine(); reader.readLine(); - return reader.readLine(); - + return formatCPU(reader.readLine()); } catch (IOException e) { return "unknown"; } @@ -65,8 +101,7 @@ private static String getMacCPU() { try { Process proc = rt.exec("sysctl -n machdep.cpu.brand_string"); BufferedReader reader = new BufferedReader(new InputStreamReader(proc.getInputStream())); - return reader.readLine(); - + return formatCPU(reader.readLine()); } catch (IOException e) { return "unknown"; } @@ -74,15 +109,12 @@ private static String getMacCPU() { } public static String getCPU(String OS) { - if (OS.equals("windows")) { - return getWindowsCPU(); - } else if (OS.equals("linux")) { - return getLinuxCPU(); - } else if (OS.equals("mac")) { - return getMacCPU(); - } else { - return "unknown"; - } + return switch (OS) { + case "windows" -> getWindowsCPU(); + case "linux" -> getLinuxCPU(); + case "mac" -> getMacCPU(); + default -> "unknown"; + }; } public static String getOS() { @@ -117,21 +149,42 @@ public static float getSystemLoad() { public static BenchResponse getBenchmark() { - String cpu = getCPU(getOS()); + String cpuname = getCPU(getOS()); - if (cpu.equals("unknown")) { - return new BenchResponse(-1, -1, false); + if (cpuname.equals("unknown")) { + return new BenchResponse(-1, -1, -1, false); } - HTTPClient conn; try { - conn = new HTTPClient("https://lagassist.rz.al/benchmark/" + URLEncoder.encode(cpu, "UTF-8")); - - return conn.getBenchmark(); - } catch (UnsupportedEncodingException e) { - e.printStackTrace(); - } - return null; + URL url = new URL("https://github.com/alvindimas05/LagAssist/releases/latest/download/benchmark-data.json"); + HttpURLConnection conn = (HttpURLConnection) url.openConnection(); + conn.setRequestMethod("GET"); + conn.connect(); + + StringBuilder response = new StringBuilder(); + Scanner scanner = new Scanner(conn.getInputStream()); + while (scanner.hasNextLine()) { + response.append(scanner.nextLine()); + } + scanner.close(); + + Gson gson = new Gson(); + BenchmarkData data = gson.fromJson(response.toString(), BenchmarkData.class); + + BenchmarkData.BenchmarkCPU benchmarkCPU = data.data.stream() + .filter(cpu -> cpu.name.contains(cpuname)) + .toList().getFirst(); + + return new BenchResponse( + Integer.parseInt(benchmarkCPU.cpumark.replaceAll(",", "")), + 0, + Integer.parseInt(benchmarkCPU.thread.replaceAll(",", "")), + true + ); + } catch (Exception e) { + e.printStackTrace(); + } + return null; }