From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 From: Martijn Muijsers Date: Sat, 24 Dec 2022 20:28:31 +0100 Subject: [PATCH] Include hardware specs in timings License: GPL-3.0 (https://www.gnu.org/licenses/gpl-3.0.html) Gale - https://galemc.org diff --git a/src/main/java/co/aikar/timings/TimingsExport.java b/src/main/java/co/aikar/timings/TimingsExport.java index 758cb80e64520ff085c4ef5ca8b2ed77d4bc0162..f749516e5d3c22e808638f3a7672aab837571b1a 100644 --- a/src/main/java/co/aikar/timings/TimingsExport.java +++ b/src/main/java/co/aikar/timings/TimingsExport.java @@ -35,6 +35,7 @@ import org.bukkit.Material; import org.bukkit.configuration.ConfigurationSection; import org.bukkit.configuration.MemorySection; import org.bukkit.entity.EntityType; +import org.galemc.gale.configuration.GaleGlobalConfiguration; import org.galemc.gale.configuration.timingsexport.VanillaServerPropertiesTimingsExport; import org.json.simple.JSONObject; import org.json.simple.JSONValue; @@ -51,6 +52,8 @@ import java.lang.management.RuntimeMXBean; import java.net.HttpURLConnection; import java.net.InetAddress; import java.net.URL; +import java.util.Arrays; +import java.util.LinkedHashMap; import java.util.List; import java.util.Map; import java.util.Set; @@ -135,6 +138,59 @@ public class TimingsExport extends Thread { HardwareAbstractionLayer hardwareInfo = new SystemInfo().getHardware(); + // Gale start - include hardware specs in timings + var processor = hardwareInfo.getProcessor(); + var processorIdentifier = processor.getProcessorIdentifier(); + var memory = hardwareInfo.getMemory(); + + Map hardwareSpecsMap = new LinkedHashMap<>(); + if (GaleGlobalConfiguration.get().misc.includeInTimingsReport.hardwareSpecs.cpu) { + hardwareSpecsMap.put("cpu", createObject( + pair("logicalprocessorcount", processor.getLogicalProcessorCount()), + pair("physicalprocessorcount", processor.getPhysicalProcessorCount()), + pair("physicalpackagecount", processor.getPhysicalPackageCount()), + pair("contextswitches", processor.getContextSwitches()), + pair("interrupts", processor.getInterrupts()), + pair("maxfreq", processor.getMaxFreq()), + pair("currentfreq", Arrays.toString(processor.getCurrentFreq())), + pair("identifier", createObject( + pair("vendor", String.valueOf(processorIdentifier.getVendor()).trim()), + pair("name", String.valueOf(processorIdentifier.getName()).trim()), + pair("family", String.valueOf(processorIdentifier.getFamily()).trim()), + pair("model", String.valueOf(processorIdentifier.getModel()).trim()), + pair("vendor", String.valueOf(processorIdentifier.getVendor()).trim()), + pair("cpu64bit", processorIdentifier.isCpu64bit()), + pair("vendorfreq", processorIdentifier.getVendorFreq()), + pair("microarchitecture", String.valueOf(processorIdentifier.getMicroarchitecture()).trim()) + )) + )); + } + if (GaleGlobalConfiguration.get().misc.includeInTimingsReport.hardwareSpecs.disks) { + hardwareSpecsMap.put("diskstores", toArrayMapper(hardwareInfo.getDiskStores(), disk -> createObject( + pair("name", String.valueOf(disk.getName()).trim()), + pair("model", String.valueOf(disk.getModel()).trim()), + pair("serial", String.valueOf(disk.getSerial()).trim()), + pair("size", disk.getSize()) + ))); + } + if (GaleGlobalConfiguration.get().misc.includeInTimingsReport.hardwareSpecs.gpus) { + hardwareSpecsMap.put("gpus", toArrayMapper(hardwareInfo.getGraphicsCards(), gpu -> createObject( + pair("name", String.valueOf(gpu.getName()).trim()), + pair("deviceid", String.valueOf(gpu.getDeviceId()).trim()), + pair("vendor", String.valueOf(gpu.getVendor()).trim()), + pair("versioninfo", String.valueOf(gpu.getVersionInfo()).trim()), + pair("vram", gpu.getVRam()) + ))); + } + if (GaleGlobalConfiguration.get().misc.includeInTimingsReport.hardwareSpecs.memory) { + hardwareSpecsMap.put("memory", createObject( + pair("total", memory.getTotal()), + pair("available", memory.getAvailable()), + pair("pagesize", memory.getPageSize()) + )); + } + // Gale end - include hardware specs in timings + parent.put("system", createObject( pair("timingcost", getCost()), pair("loadavg", osInfo.getSystemLoadAverage()), @@ -152,6 +208,7 @@ public class TimingsExport extends Thread { )), pair("cpu", runtime.availableProcessors()), pair("cpuname", hardwareInfo.getProcessor().getProcessorIdentifier().getName().trim()), + pair("hardwarespecs", hardwareSpecsMap), // Gale - include hardware specs in timings pair("runtime", runtimeBean.getUptime()), pair("flags", StringUtils.join(runtimeBean.getInputArguments(), " ")), pair("gc", toObjectMapper(ManagementFactory.getGarbageCollectorMXBeans(), input -> pair(input.getName(), toArray(input.getCollectionCount(), input.getCollectionTime())))) diff --git a/src/main/java/org/galemc/gale/configuration/GaleGlobalConfiguration.java b/src/main/java/org/galemc/gale/configuration/GaleGlobalConfiguration.java index dbb0f523608a9208e8c656898b18ce1b9505a1e0..2a3cd1baab364126d10a42c8ab59f3da8ca9bdfb 100644 --- a/src/main/java/org/galemc/gale/configuration/GaleGlobalConfiguration.java +++ b/src/main/java/org/galemc/gale/configuration/GaleGlobalConfiguration.java @@ -32,7 +32,7 @@ public class GaleGlobalConfiguration extends ConfigurationPart { public IncludeInTimingsReport includeInTimingsReport; public class IncludeInTimingsReport extends ConfigurationPart { - + // Gale start - include server.properties in timings public ServerProperties serverProperties; public class ServerProperties extends ConfigurationPart { @@ -52,6 +52,16 @@ public class GaleGlobalConfiguration extends ConfigurationPart { } // Gale end - include server.properties in timings + // Gale start - include hardware specs in timings + public HardwareSpecs hardwareSpecs; + public class HardwareSpecs extends ConfigurationPart { + public boolean cpu = true; + public boolean disks = true; + public boolean gpus = true; + public boolean memory = true; + } + // Gale end - include hardware specs in timings + } }