extras/src/main/java/pw/kaboom/extras/commands/CommandServerInfo.java

115 lines
4.0 KiB
Java

package pw.kaboom.extras.commands;
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.lang.management.ManagementFactory;
import java.net.InetAddress;
import org.bukkit.ChatColor;
import org.bukkit.command.Command;
import org.bukkit.command.CommandExecutor;
import org.bukkit.command.CommandSender;
public final class CommandServerInfo implements CommandExecutor {
private void sendInfoMessage(final CommandSender target, final String description,
final String value) {
target.sendMessage(
ChatColor.GRAY + description + ": "
+ ChatColor.WHITE + value
);
}
public boolean onCommand(final CommandSender sender, final Command command, final String label,
final String[] args) {
try {
sendInfoMessage(sender, "Hostname",
InetAddress.getLocalHost().getHostName()
);
sendInfoMessage(sender, "IP address",
InetAddress.getLocalHost().getHostAddress()
);
} catch (Exception ignored) {
}
sendInfoMessage(sender, "OS name",
ManagementFactory.getOperatingSystemMXBean().getName()
);
sendInfoMessage(sender, "OS architecture",
ManagementFactory.getOperatingSystemMXBean().getArch()
);
sendInfoMessage(sender, "OS version",
ManagementFactory.getOperatingSystemMXBean().getVersion()
);
sendInfoMessage(sender, "Java VM",
ManagementFactory.getRuntimeMXBean().getVmName()
);
sendInfoMessage(sender, "Java version",
ManagementFactory.getRuntimeMXBean().getSpecVersion()
+ " "
+ ManagementFactory.getRuntimeMXBean().getVmVersion()
);
try {
final String[] shCommand = {
"/bin/sh",
"-c",
"cat /proc/cpuinfo | grep 'model name' | cut -f 2 -d ':' | awk '{$1=$1}1' | head -1"
};
final Process process = Runtime.getRuntime().exec(shCommand);
final InputStreamReader isr = new InputStreamReader(process.getInputStream());
final BufferedReader br = new BufferedReader(isr);
String line;
while ((line = br.readLine()) != null) {
sendInfoMessage(sender, "CPU model",
line
);
}
br.close();
} catch (Exception ignored) {
}
sendInfoMessage(sender, "CPU cores",
String.valueOf(Runtime.getRuntime().availableProcessors())
);
sendInfoMessage(sender, "CPU load",
String.valueOf(ManagementFactory.getOperatingSystemMXBean().getSystemLoadAverage())
);
final long heapUsage = ManagementFactory.getMemoryMXBean().getHeapMemoryUsage().getUsed();
final long nonHeapUsage = ManagementFactory.getMemoryMXBean()
.getNonHeapMemoryUsage().getUsed();
final long memoryMax = (
ManagementFactory.getMemoryMXBean().getHeapMemoryUsage().getMax()
+ ManagementFactory.getMemoryMXBean().getNonHeapMemoryUsage().getMax()
);
final long memoryUsage = (heapUsage + nonHeapUsage);
sendInfoMessage(sender, "Available memory",
(memoryMax / 1024 / 1024) + " MB"
);
sendInfoMessage(sender, "Heap memory usage",
(heapUsage / 1024 / 1024) + " MB"
);
sendInfoMessage(sender, "Non-heap memory usage",
(nonHeapUsage / 1024 / 1024) + " MB"
);
sendInfoMessage(sender, "Total memory usage",
(memoryUsage / 1024 / 1024) + " MB"
);
final long minutes = (ManagementFactory.getRuntimeMXBean().getUptime() / 1000) / 60;
final long seconds = (ManagementFactory.getRuntimeMXBean().getUptime() / 1000) % 60;
sendInfoMessage(sender, "Server uptime",
minutes + " minute(s) "
+ seconds + " second(s)"
);
return true;
}
}