mirror of
https://e.coding.net/circlecloud/Yum.git
synced 2024-11-22 14:28:46 +00:00
feat: 添加插件载入类 修改能耗监控显示
Signed-off-by: 502647092 <admin@yumc.pw>
This commit is contained in:
parent
844ae43eef
commit
829351e576
9
pom.xml
9
pom.xml
@ -63,11 +63,12 @@
|
|||||||
<url>http://ci.yumc.pw/job/${project.artifactId}/</url>
|
<url>http://ci.yumc.pw/job/${project.artifactId}/</url>
|
||||||
</ciManagement>
|
</ciManagement>
|
||||||
<properties>
|
<properties>
|
||||||
<update.description>&a全新 2.X 版本 更多守护与优化</update.description>
|
<update.description>§a全新 2.X 版本 更多守护与优化</update.description>
|
||||||
<update.changes>
|
<update.changes>
|
||||||
&c注意 &6- &aYum更新需要&d重启服务器!&c重启服务器!&4重启服务器!;
|
§c注意 §6- §aYum更新需要§d重启服务器!§c重启服务器!§4重启服务器!;
|
||||||
&b2.7.0 &6- &a完善能耗监控流程...;
|
§b2.7.0 §6- §d完善能耗监控流程...;
|
||||||
&b &6- &a报错能耗添加日志记录;
|
§b §6- §c报错§6/§d能耗§a添加日志记录;
|
||||||
|
§b §6- §a文件处理添加复制命令;
|
||||||
</update.changes>
|
</update.changes>
|
||||||
<env.GIT_COMMIT>DEBUG</env.GIT_COMMIT>
|
<env.GIT_COMMIT>DEBUG</env.GIT_COMMIT>
|
||||||
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
|
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
|
||||||
|
@ -46,10 +46,12 @@ public class MonitorCommand implements CommandExecutor {
|
|||||||
|
|
||||||
private final String prefix = "§6[§bYum §a能耗监控§6] ";
|
private final String prefix = "§6[§bYum §a能耗监控§6] ";
|
||||||
|
|
||||||
private final String total = "§6总耗时: §a%.2f毫秒 ";
|
private final String micprefix = " §6命令名称 §a总耗时 §b执行次数 §d平均耗时";
|
||||||
private final String count = "§6执行次数: §b%s次 ";
|
private final String mieprefix = " §6事件名称 §a总耗时 §b执行次数 §d平均耗时";
|
||||||
private final String avg = "§6平均耗时: §d%.5f毫秒!";
|
private final String mitprefix = " §6任务名称 §a总耗时 §b执行次数 §d平均耗时";
|
||||||
private final String avg_warn = "§6平均耗时: §c%.5f毫秒!";
|
private final String milist = "§6- §e%-20s §a%-9.2f §b%-9s §d%-9.5f";
|
||||||
|
private final String mialist = "§6- §e%-20s §a%-9.2f §b%-9s";
|
||||||
|
private final String miwlist = "§6- §c%-20s §a%-9.2f §b%-9s §c%-9.5f";
|
||||||
|
|
||||||
private final String reinject = prefix + "§a能耗监控器重载完毕!";
|
private final String reinject = prefix + "§a能耗监控器重载完毕!";
|
||||||
private final String injected = prefix + "§a插件 §b%s §a成功注入能耗监控器!";
|
private final String injected = prefix + "§a插件 §b%s §a成功注入能耗监控器!";
|
||||||
@ -93,18 +95,17 @@ public class MonitorCommand implements CommandExecutor {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
sender.sendMessage(micprefix);
|
||||||
for (final Entry<String, Command> command : temp.entrySet()) {
|
for (final Entry<String, Command> command : temp.entrySet()) {
|
||||||
final org.bukkit.command.CommandExecutor executor = Reflect.on(command.getValue()).get("executor");
|
final org.bukkit.command.CommandExecutor executor = Reflect.on(command.getValue()).get("executor");
|
||||||
if (executor instanceof CommandInjector) {
|
if (executor instanceof CommandInjector) {
|
||||||
final CommandInjector injected = (CommandInjector) executor;
|
final CommandInjector injected = (CommandInjector) executor;
|
||||||
final StringBuffer str = new StringBuffer();
|
|
||||||
str.append("§6- §e" + command.getValue().getName() + " ");
|
|
||||||
str.append(String.format(total, injected.totalTime / um));
|
|
||||||
str.append(String.format(count, injected.count));
|
|
||||||
if (injected.count != 0) {
|
if (injected.count != 0) {
|
||||||
str.append(String.format(avg, injected.totalTime / um / injected.count));
|
final double avgTime = injected.totalTime / um / injected.count;
|
||||||
|
sender.sendMessage(String.format(avgTime < 10 ? milist : miwlist, command.getValue().getName(), injected.totalTime / um, injected.count, avgTime));
|
||||||
|
} else {
|
||||||
|
sender.sendMessage(String.format(mialist, command.getValue().getName(), injected.totalTime / um, injected.count));
|
||||||
}
|
}
|
||||||
e.getSender().sendMessage(str.toString());
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -150,16 +151,10 @@ public class MonitorCommand implements CommandExecutor {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
sender.sendMessage(mieprefix);
|
||||||
for (final String event : eventTotalTime.keySet()) {
|
for (final String event : eventTotalTime.keySet()) {
|
||||||
final StringBuffer str = new StringBuffer();
|
|
||||||
str.append(String.format("§6- §e%-25s ", event));
|
|
||||||
str.append(String.format(total, eventTotalTime.get(event) / um));
|
|
||||||
str.append(String.format(count, eventCount.get(event)));
|
|
||||||
if (eventCount.get(event) != 0) {
|
|
||||||
final double avgTime = eventTotalTime.get(event) / um / eventCount.get(event);
|
final double avgTime = eventTotalTime.get(event) / um / eventCount.get(event);
|
||||||
str.append(String.format(avgTime < 10 ? avg : avg_warn, avgTime));
|
sender.sendMessage(String.format(avgTime < 10 ? milist : miwlist, event, eventTotalTime.get(event) / um, eventCount.get(event), avgTime));
|
||||||
}
|
|
||||||
e.getSender().sendMessage(str.toString());
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -241,19 +236,18 @@ public class MonitorCommand implements CommandExecutor {
|
|||||||
}
|
}
|
||||||
final List<BukkitTask> pendingTasks = Bukkit.getScheduler().getPendingTasks();
|
final List<BukkitTask> pendingTasks = Bukkit.getScheduler().getPendingTasks();
|
||||||
sender.sendMessage(prefix + "§6插件 §b" + pname + " §6的任务能耗如下!");
|
sender.sendMessage(prefix + "§6插件 §b" + pname + " §6的任务能耗如下!");
|
||||||
|
sender.sendMessage(mitprefix);
|
||||||
for (final BukkitTask pendingTask : pendingTasks) {
|
for (final BukkitTask pendingTask : pendingTasks) {
|
||||||
if (pendingTask.getOwner().getName().equalsIgnoreCase(pname)) {
|
if (pendingTask.getOwner().getName().equalsIgnoreCase(pname)) {
|
||||||
final Runnable task = Reflect.on(pendingTask).get("task");
|
final Runnable task = Reflect.on(pendingTask).get("task");
|
||||||
if (task instanceof TaskInjector) {
|
if (task instanceof TaskInjector) {
|
||||||
final TaskInjector executor = (TaskInjector) task;
|
final TaskInjector executor = (TaskInjector) task;
|
||||||
final StringBuffer str = new StringBuffer();
|
|
||||||
str.append("§6- §e" + getClassName(executor.getOriginalTask().getClass()) + " ");
|
|
||||||
str.append(String.format(total, executor.totalTime / um));
|
|
||||||
str.append(String.format(count, executor.count));
|
|
||||||
if (executor.count != 0) {
|
if (executor.count != 0) {
|
||||||
str.append(String.format(avg, executor.totalTime / um / executor.count));
|
final double avgTime = executor.totalTime / um / executor.count;
|
||||||
|
sender.sendMessage(String.format(avgTime < 10 ? milist : miwlist, getClassName(executor.getOriginalTask().getClass()), executor.totalTime / um, executor.count, avgTime));
|
||||||
|
} else {
|
||||||
|
sender.sendMessage(String.format(mialist, getClassName(executor.getOriginalTask().getClass()), executor.totalTime / um, executor.count));
|
||||||
}
|
}
|
||||||
e.getSender().sendMessage(str.toString());
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
97
src/main/java/pw/yumc/Yum/inject/YumPluginLoader.java
Normal file
97
src/main/java/pw/yumc/Yum/inject/YumPluginLoader.java
Normal file
@ -0,0 +1,97 @@
|
|||||||
|
/**
|
||||||
|
* Created on 17 May 2014 by _MylesC
|
||||||
|
* Copyright 2014
|
||||||
|
*/
|
||||||
|
package pw.yumc.Yum.inject;
|
||||||
|
|
||||||
|
import java.io.File;
|
||||||
|
import java.lang.reflect.Field;
|
||||||
|
import java.lang.reflect.Modifier;
|
||||||
|
import java.util.Iterator;
|
||||||
|
import java.util.Map;
|
||||||
|
import java.util.Map.Entry;
|
||||||
|
import java.util.Set;
|
||||||
|
import java.util.logging.Level;
|
||||||
|
import java.util.regex.Pattern;
|
||||||
|
|
||||||
|
import org.bukkit.Bukkit;
|
||||||
|
import org.bukkit.Server;
|
||||||
|
import org.bukkit.event.Event;
|
||||||
|
import org.bukkit.event.Listener;
|
||||||
|
import org.bukkit.plugin.InvalidDescriptionException;
|
||||||
|
import org.bukkit.plugin.InvalidPluginException;
|
||||||
|
import org.bukkit.plugin.Plugin;
|
||||||
|
import org.bukkit.plugin.PluginDescriptionFile;
|
||||||
|
import org.bukkit.plugin.PluginLoader;
|
||||||
|
import org.bukkit.plugin.PluginManager;
|
||||||
|
import org.bukkit.plugin.RegisteredListener;
|
||||||
|
import org.bukkit.plugin.UnknownDependencyException;
|
||||||
|
import org.bukkit.plugin.java.JavaPluginLoader;
|
||||||
|
|
||||||
|
public class YumPluginLoader implements PluginLoader {
|
||||||
|
private final JavaPluginLoader internal_loader;
|
||||||
|
private final Server server;
|
||||||
|
|
||||||
|
@SuppressWarnings("deprecation")
|
||||||
|
public YumPluginLoader(final Server instance) {
|
||||||
|
server = instance;
|
||||||
|
internal_loader = new JavaPluginLoader(instance);
|
||||||
|
}
|
||||||
|
|
||||||
|
public static void cleanJavaPluginLoaders() {
|
||||||
|
final YumPluginLoader yumPluginLoader = new YumPluginLoader(Bukkit.getServer());
|
||||||
|
final PluginManager spm = Bukkit.getPluginManager();
|
||||||
|
try {
|
||||||
|
final Field field = spm.getClass().getDeclaredField("fileAssociations");
|
||||||
|
field.setAccessible(true);
|
||||||
|
final Field modifiersField = Field.class.getDeclaredField("modifiers");
|
||||||
|
modifiersField.setAccessible(true);
|
||||||
|
modifiersField.setInt(field, field.getModifiers() & ~Modifier.FINAL);
|
||||||
|
@SuppressWarnings("unchecked")
|
||||||
|
final Map<Pattern, PluginLoader> map = (Map<Pattern, PluginLoader>) field.get(spm);
|
||||||
|
final Iterator<Map.Entry<Pattern, PluginLoader>> iter = map.entrySet().iterator();
|
||||||
|
while (iter.hasNext()) {
|
||||||
|
final Entry<Pattern, PluginLoader> entry = iter.next();
|
||||||
|
if (entry.getValue() instanceof JavaPluginLoader) {
|
||||||
|
entry.setValue(yumPluginLoader);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
field.set(spm, map);
|
||||||
|
} catch (final Exception e) {
|
||||||
|
Bukkit.getServer().getLogger().log(Level.SEVERE, "Yum failed replacing the existing PluginLoader, contact the developers on YUMC!", e);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Map<Class<? extends Event>, Set<RegisteredListener>> createRegisteredListeners(final Listener listener, final Plugin plugin) {
|
||||||
|
return internal_loader.createRegisteredListeners(listener, plugin);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void disablePlugin(final Plugin plugin) {
|
||||||
|
if (!plugin.getName().equalsIgnoreCase("Yum")) {
|
||||||
|
internal_loader.disablePlugin(plugin);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void enablePlugin(final Plugin arg0) {
|
||||||
|
internal_loader.enablePlugin(arg0);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public PluginDescriptionFile getPluginDescription(final File arg0) throws InvalidDescriptionException {
|
||||||
|
return internal_loader.getPluginDescription(arg0);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Pattern[] getPluginFileFilters() {
|
||||||
|
return internal_loader.getPluginFileFilters();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Plugin loadPlugin(final File arg0) throws InvalidPluginException, UnknownDependencyException {
|
||||||
|
return internal_loader.loadPlugin(arg0);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
@ -9,6 +9,7 @@ import org.bukkit.event.server.PluginEnableEvent;
|
|||||||
import cn.citycraft.PluginHelper.bukkit.P;
|
import cn.citycraft.PluginHelper.bukkit.P;
|
||||||
import cn.citycraft.PluginHelper.kit.PluginKit;
|
import cn.citycraft.PluginHelper.kit.PluginKit;
|
||||||
import pw.yumc.Yum.api.YumAPI;
|
import pw.yumc.Yum.api.YumAPI;
|
||||||
|
import pw.yumc.Yum.managers.ConfigManager;
|
||||||
import pw.yumc.Yum.managers.MonitorManager;
|
import pw.yumc.Yum.managers.MonitorManager;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -30,6 +31,9 @@ public class PluginListener implements Listener {
|
|||||||
|
|
||||||
@EventHandler
|
@EventHandler
|
||||||
public void onPluginEnable(final PluginEnableEvent e) {
|
public void onPluginEnable(final PluginEnableEvent e) {
|
||||||
|
if (ConfigManager.i().getMonitorIgnoreList().contains(e.getPlugin().getName())) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
MonitorManager.reset(e.getPlugin().getName());
|
MonitorManager.reset(e.getPlugin().getName());
|
||||||
PluginKit.runTaskLater(new Runnable() {
|
PluginKit.runTaskLater(new Runnable() {
|
||||||
@Override
|
@Override
|
||||||
|
@ -16,6 +16,7 @@ import org.bukkit.plugin.Plugin;
|
|||||||
|
|
||||||
import cn.citycraft.PluginHelper.kit.LogKit;
|
import cn.citycraft.PluginHelper.kit.LogKit;
|
||||||
import cn.citycraft.PluginHelper.kit.PluginKit;
|
import cn.citycraft.PluginHelper.kit.PluginKit;
|
||||||
|
import cn.citycraft.PluginHelper.sql.DataBase;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
*
|
*
|
||||||
@ -41,6 +42,8 @@ public class MonitorManager {
|
|||||||
private final static Map<String, Long> event = new ConcurrentHashMap<>();
|
private final static Map<String, Long> event = new ConcurrentHashMap<>();
|
||||||
private final static Map<String, Long> cmd = new ConcurrentHashMap<>();
|
private final static Map<String, Long> cmd = new ConcurrentHashMap<>();
|
||||||
|
|
||||||
|
private final static DataBase db = null;
|
||||||
|
|
||||||
private final static double um = 1000000.00;
|
private final static double um = 1000000.00;
|
||||||
|
|
||||||
private final static LogKit mlog = new LogKit("monitor.log");
|
private final static LogKit mlog = new LogKit("monitor.log");
|
||||||
|
Loading…
Reference in New Issue
Block a user