diff --git a/pom.xml b/pom.xml index a00addd..04337f5 100644 --- a/pom.xml +++ b/pom.xml @@ -3,7 +3,7 @@ 4.0.0 pw.yumc Yum - 2.7.1 + 2.7.2 Yum Minecraft 服务器插件管理系统 @@ -66,10 +66,8 @@ §a全新 2.X 版本 更多守护与优化 §c注意 §6- §aYum更新需要§d重启服务器!§c重启服务器!§4重启服务器!; + §b2.7.2 §6- §c修复mi lag命令参数错误报错 §d百分比显示能耗...; §b2.7.1 §6- §c修复部分BUG(load可直接载入文件)...; - §b2.7.0 §6- §d完善能耗监控流程...; - §b §6- §c报错§6/§d能耗§a添加日志记录; - §b §6- §a文件处理添加复制命令; DEBUG UTF-8 diff --git a/src/main/java/pw/yumc/Yum/commands/MonitorCommand.java b/src/main/java/pw/yumc/Yum/commands/MonitorCommand.java index c8de6b4..1c7289a 100644 --- a/src/main/java/pw/yumc/Yum/commands/MonitorCommand.java +++ b/src/main/java/pw/yumc/Yum/commands/MonitorCommand.java @@ -46,6 +46,7 @@ public class MonitorCommand implements CommandExecutor { private final String prefix = "§6[§bYum §a能耗监控§6] "; + private final String no_mi = prefix + "§6%s §a自服务器启动以来尚未执行任何操作"; private final String micprefix = " §6命令名称 §a总耗时 §b执行次数 §d平均耗时"; private final String mieprefix = " §6事件名称 §a总耗时 §b执行次数 §d平均耗时"; private final String mitprefix = " §6任务名称 §a总耗时 §b执行次数 §d平均耗时"; @@ -57,8 +58,9 @@ public class MonitorCommand implements CommandExecutor { private final String uninjected = prefix + "§a插件 §b%s §a成功撤销能耗监控器!"; private final String notEnable = prefix + "§c插件 §b%s §c未成功加载 无法执行注入!"; - private final String lagprefix = " §6插件名称 §c主线程耗时 §a命令耗时 §b事件耗时 §d任务耗时"; - private final String laglist = "§6%-2s §b%-15s §c%-11.2f §a%-9.2f §b%-9.2f §d%-9.2f"; + private final String lag = prefix + "§a当前服务器插件能耗如下§6(单位: %)"; + private final String lagprefix = " §6插件名称 §c主线程 §a命令 §b事件 §d任务"; + private final String laglist = "§6%-2s §b%-20s §c%-25s §a%-5.2f §b%-5.2f §d%-5.2f"; private final String no_error = prefix + "§a自服务器启动以来尚未发现报错!"; private final String last_error = prefix + "§c最后一次错误异常由 §b%s §c造成 详细如下:"; @@ -94,6 +96,10 @@ public class MonitorCommand implements CommandExecutor { } } } + if (temp.isEmpty()) { + sender.sendMessage(String.format(no_mi, pname)); + return; + } sender.sendMessage(micprefix); for (final Entry command : temp.entrySet()) { final org.bukkit.command.CommandExecutor executor = Reflect.on(command.getValue()).get("executor"); @@ -150,6 +156,10 @@ public class MonitorCommand implements CommandExecutor { } } } + if (eventTotalTime.isEmpty()) { + sender.sendMessage(String.format(no_mi, pname)); + return; + } sender.sendMessage(mieprefix); for (final String event : MonitorManager.sortMapByValue(eventTotalTime).keySet()) { final double avgTime = eventTotalTime.get(event) / um / eventCount.get(event); @@ -182,14 +192,19 @@ public class MonitorCommand implements CommandExecutor { final CommandSender sender = e.getSender(); final Map mm = MonitorManager.getMonitor(); int i = 0; - final int max = e.getArgs().length > 0 ? Integer.parseInt(e.getArgs()[0]) : 8; + int max = 8; + try { + max = Integer.parseInt(e.getArgs()[0]); + } catch (final Exception ignore) { + } + sender.sendMessage(lag); sender.sendMessage(lagprefix); for (final Entry entry : mm.entrySet()) { if (++i > max) { break; } final MonitorInfo mi = MonitorManager.getMonitorInfo(entry.getKey()); - sender.sendMessage(String.format(laglist, i, entry.getKey(), mi.monitor, mi.cmd, mi.event, mi.task)); + sender.sendMessage(String.format(laglist, i, entry.getKey(), getPer(mi.monitor), mi.cmd, mi.event, mi.task)); } } @@ -234,6 +249,10 @@ public class MonitorCommand implements CommandExecutor { return; } final List pendingTasks = Bukkit.getScheduler().getPendingTasks(); + if (pendingTasks.isEmpty()) { + sender.sendMessage(String.format(no_mi, pname)); + return; + } sender.sendMessage(prefix + "§6插件 §b" + pname + " §6的任务能耗如下!"); sender.sendMessage(mitprefix); for (final BukkitTask pendingTask : pendingTasks) { @@ -271,4 +290,27 @@ public class MonitorCommand implements CommandExecutor { private String getClassName(final Class clazz) { return StrKit.isBlank(clazz.getSimpleName()) ? clazz.getName().substring(clazz.getName().lastIndexOf(".") + 1) : clazz.getSimpleName(); } + + private String getPer(final double per) { + final double p = per / 5; + final StringBuilder sb = new StringBuilder(); + if (p < 4) { + sb.append("§a"); + } else if (p < 7) { + sb.append("§d"); + } else if (p < 10) { + sb.append("§c"); + } else { + sb.append("§4"); + } + for (int i = 0; i < 11; i++) { + if (p > i) { + sb.append("|"); + } + } + if (per > 0) { + sb.append(String.format("% 3.2f", per)); + } + return sb.toString(); + } } diff --git a/src/main/java/pw/yumc/Yum/commands/NetCommand.java b/src/main/java/pw/yumc/Yum/commands/NetCommand.java index 806fd92..9516e01 100644 --- a/src/main/java/pw/yumc/Yum/commands/NetCommand.java +++ b/src/main/java/pw/yumc/Yum/commands/NetCommand.java @@ -21,8 +21,8 @@ public class NetCommand implements CommandExecutor { private final String prefix = "§6[§bYum §a网络管理§6] "; private final String showlist = prefix + "§a自服务器启动以来尝试联网的插件列表如下:"; - private final String listprefix = " §6插件名称 §d联网次数"; - private final String list = "§6- §b%s §d%s"; + private final String listprefix = " §6插件名称 §d联网次数"; + private final String list = "§6- §b%-20s §d%s"; private final String no_net = prefix + "§a尚未检测到尝试联网的插件!"; private final String add = prefix + "§a已添加插件 §b%s §a到网络 %s §a列表!"; diff --git a/src/main/java/pw/yumc/Yum/managers/MonitorManager.java b/src/main/java/pw/yumc/Yum/managers/MonitorManager.java index 9bab2c1..9aefeac 100644 --- a/src/main/java/pw/yumc/Yum/managers/MonitorManager.java +++ b/src/main/java/pw/yumc/Yum/managers/MonitorManager.java @@ -1,6 +1,7 @@ package pw.yumc.Yum.managers; import java.util.ArrayList; +import java.util.Collection; import java.util.Collections; import java.util.Comparator; import java.util.Iterator; @@ -36,6 +37,8 @@ public class MonitorManager { public final static boolean debug = ConfigManager.i().isMonitorDebug(); public final static boolean log_to_file = ConfigManager.i().isLogToFile(); + private static double totalTime = 0; + private final static Map monitor = new ConcurrentHashMap<>(); private final static Map task = new ConcurrentHashMap<>(); private final static Map event = new ConcurrentHashMap<>(); @@ -71,7 +74,8 @@ public class MonitorManager { } public static MonitorInfo getMonitorInfo(final String pname) { - return new MonitorInfo(monitor.get(pname) / um, cmd.get(pname) / um, event.get(pname) / um, task.get(pname) / um); + final double per = 100.00; + return new MonitorInfo(monitor.get(pname) / totalTime * per, cmd.get(pname) / totalTime * per, event.get(pname) / totalTime * per, task.get(pname) / totalTime * per); } public static void init() { @@ -123,7 +127,7 @@ public class MonitorManager { } public static void sendObject(final CommandSender sender) { - sender.sendMessage(String.format("monitor@%s cmd@%s event@%s task@%s", monitor.hashCode(), cmd.hashCode(), event.hashCode(), task.hashCode())); + sender.sendMessage(String.format("totalTime@%s monitor@%s cmd@%s event@%s task@%s", totalTime, sum(monitor.values()), sum(cmd.values()), sum(event.values()), sum(task.values()))); } /** @@ -150,11 +154,20 @@ public class MonitorManager { @SafeVarargs private static void add(final String pname, final long time, final Map... maps) { + totalTime += time; for (final Map map : maps) { map.put(pname, map.get(pname) + time); } } + private static long sum(final Collection numbers) { + int result = 0; + for (final Long num : numbers) { + result += num; + } + return result; + } + public static class MonitorInfo { public double monitor; public double cmd;