/* * This file is part of aion-unique <aion-unique.org>. * * aion-unique is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * aion-unique is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with aion-unique. If not, see <http://www.gnu.org/licenses/>. */ package admincommands; import java.util.List; import com.aionemu.commons.utils.AEInfos; import com.aionemu.gameserver.ShutdownHook; import com.aionemu.gameserver.ShutdownHook.ShutdownMode; import com.aionemu.gameserver.configs.administration.AdminConfig; import com.aionemu.gameserver.model.gameobjects.player.Player; import com.aionemu.gameserver.utils.AEVersions; import com.aionemu.gameserver.utils.PacketSendUtility; import com.aionemu.gameserver.utils.ThreadPoolManager; import com.aionemu.gameserver.utils.chathandlers.AdminCommand; import com.google.inject.Inject; /** * @author lord_rex * * //sys info - System Informations * //sys memory - Memory Informations * //sys gc - Garbage Collector * //sys shutdown <seconds> <announceInterval> - Shutdowner * //sys restart <seconds> <announceInterval> - Restarter * //sys threadpool - Thread pools info */ public class AESystem extends AdminCommand { @Inject private ShutdownHook shutdownHook; public AESystem() { super("sys"); } @Override public void executeCommand(Player admin, String[] params) { if(admin.getAccessLevel() < AdminConfig.COMMAND_SYSTEM) { PacketSendUtility.sendMessage(admin, "You dont have enough rights to execute this command!"); return; } if(params == null || params.length < 1) { PacketSendUtility.sendMessage(admin, "Usage: //sys info | //sys memory | //sys gc | //sys restart <countdown time> <announce delay> | //sys shutdown <countdown time> <announce delay>"); return; } if(params[0].equals("info")) { // Time PacketSendUtility.sendMessage(admin, "System Informations at: " + AEInfos.getRealTime().toString()); // Version Infos for(String line : AEVersions.getFullVersionInfo()) PacketSendUtility.sendMessage(admin, line); // OS Infos for(String line : AEInfos.getOSInfo()) PacketSendUtility.sendMessage(admin, line); // CPU Infos for(String line : AEInfos.getCPUInfo()) PacketSendUtility.sendMessage(admin, line); // JRE Infos for(String line : AEInfos.getJREInfo()) PacketSendUtility.sendMessage(admin, line); // JVM Infos for(String line : AEInfos.getJVMInfo()) PacketSendUtility.sendMessage(admin, line); } else if(params[0].equals("memory")) { // Memory Infos for(String line : AEInfos.getMemoryInfo()) PacketSendUtility.sendMessage(admin, line); } else if(params[0].equals("gc")) { long time = System.currentTimeMillis(); PacketSendUtility.sendMessage(admin, "RAM Used (Before): " + ((Runtime.getRuntime().totalMemory() - Runtime.getRuntime().freeMemory()) / 1048576)); System.gc(); PacketSendUtility.sendMessage(admin, "RAM Used (After): " + ((Runtime.getRuntime().totalMemory() - Runtime.getRuntime().freeMemory()) / 1048576)); System.runFinalization(); PacketSendUtility.sendMessage(admin, "RAM Used (Final): " + ((Runtime.getRuntime().totalMemory() - Runtime.getRuntime().freeMemory()) / 1048576)); PacketSendUtility.sendMessage(admin, "Garbage Collection and Finalization finished in: " + (System.currentTimeMillis() - time) + " milliseconds..."); } else if(params[0].equals("shutdown")) { try { int val = Integer.parseInt(params[1]); int announceInterval = Integer.parseInt(params[2]); shutdownHook.doShutdown(val, announceInterval, ShutdownMode.SHUTDOWN); PacketSendUtility.sendMessage(admin, "Server will shutdown in " + val + " seconds."); } catch(ArrayIndexOutOfBoundsException e) { PacketSendUtility.sendMessage(admin, "Numbers only!"); } catch(NumberFormatException e) { PacketSendUtility.sendMessage(admin, "Numbers only!"); } } else if(params[0].equals("restart")) { try { int val = Integer.parseInt(params[1]); int announceInterval = Integer.parseInt(params[2]); shutdownHook.doShutdown(val, announceInterval, ShutdownMode.RESTART); PacketSendUtility.sendMessage(admin, "Server will restart in " + val + " seconds."); } catch(ArrayIndexOutOfBoundsException e) { PacketSendUtility.sendMessage(admin, "Numbers only!"); } catch(NumberFormatException e) { PacketSendUtility.sendMessage(admin, "Numbers only!"); } } else if(params[0].equals("threadpool")) { List<String> stats = ThreadPoolManager.getInstance().getStats(); for(String stat : stats) { PacketSendUtility.sendMessage(admin, stat.replaceAll("\t", "")); } } } }