/src/main/java/cn/nukkit/command/defaults/DebugPasteCommand.java

https://gitlab.com/ixilon/nukkit · Java · 90 lines · 84 code · 6 blank · 0 comment · 2 complexity · 63312475f76f8ec793dfcaf1e609beb6 MD5 · raw file

  1. package cn.nukkit.command.defaults;
  2. import cn.nukkit.Server;
  3. import cn.nukkit.command.CommandSender;
  4. import cn.nukkit.network.protocol.ProtocolInfo;
  5. import cn.nukkit.plugin.Plugin;
  6. import cn.nukkit.plugin.PluginDescription;
  7. import cn.nukkit.scheduler.AsyncTask;
  8. import cn.nukkit.utils.HastebinUtility;
  9. import cn.nukkit.utils.MainLogger;
  10. import cn.nukkit.utils.Utils;
  11. import java.io.File;
  12. import java.io.IOException;
  13. import java.lang.management.ManagementFactory;
  14. public class DebugPasteCommand extends VanillaCommand {
  15. public DebugPasteCommand(String name) {
  16. super(name, "%nukkit.command.debug.description", "%nukkit.command.debug.usage");
  17. this.setPermission("nukkit.command.debug.perform");
  18. this.commandParameters.clear();
  19. }
  20. @Override
  21. public boolean execute(CommandSender sender, String commandLabel, String[] args) {
  22. if (!this.testPermission(sender)) {
  23. return true;
  24. }
  25. Server server = Server.getInstance();
  26. server.getScheduler().scheduleAsyncTask(new AsyncTask() {
  27. @Override
  28. public void onRun() {
  29. try {
  30. new StatusCommand("status").execute(server.getConsoleSender(), "status", new String[]{});
  31. String dataPath = server.getDataPath();
  32. String nukkitYML = HastebinUtility.upload(new File(dataPath, "nukkit.yml"));
  33. String serverProperties = HastebinUtility.upload(new File(dataPath, "server.properties"));
  34. String latestLog = HastebinUtility.upload(new File(dataPath, "/logs/server.log"));
  35. String threadDump = HastebinUtility.upload(Utils.getAllThreadDumps());
  36. StringBuilder b = new StringBuilder();
  37. b.append("# Files\n");
  38. b.append("links.nukkit_yml: ").append(nukkitYML).append('\n');
  39. b.append("links.server_properties: ").append(serverProperties).append('\n');
  40. b.append("links.server_log: ").append(latestLog).append('\n');
  41. b.append("links.thread_dump: ").append(threadDump).append('\n');
  42. b.append("\n# Server Information\n");
  43. b.append("version.api: ").append(server.getApiVersion()).append('\n');
  44. b.append("version.nukkit: ").append(server.getNukkitVersion()).append('\n');
  45. b.append("version.minecraft: ").append(server.getVersion()).append('\n');
  46. b.append("version.protocol: ").append(ProtocolInfo.CURRENT_PROTOCOL).append('\n');
  47. b.append("plugins:");
  48. for (Plugin plugin : server.getPluginManager().getPlugins().values()) {
  49. boolean enabled = plugin.isEnabled();
  50. String name = plugin.getName();
  51. PluginDescription desc = plugin.getDescription();
  52. String version = desc.getVersion();
  53. b.append("\n ")
  54. .append(name)
  55. .append(":\n ")
  56. .append("version: '")
  57. .append(version)
  58. .append('\'')
  59. .append("\n enabled: ")
  60. .append(enabled);
  61. }
  62. b.append("\n\n# Java Details\n");
  63. Runtime runtime = Runtime.getRuntime();
  64. b.append("memory.free: ").append(runtime.freeMemory()).append('\n');
  65. b.append("memory.max: ").append(runtime.maxMemory()).append('\n');
  66. b.append("cpu.runtime: ").append(ManagementFactory.getRuntimeMXBean().getUptime()).append('\n');
  67. b.append("cpu.processors: ").append(runtime.availableProcessors()).append('\n');
  68. b.append("java.specification.version: '").append(System.getProperty("java.specification.version")).append("'\n");
  69. b.append("java.vendor: '").append(System.getProperty("java.vendor")).append("'\n");
  70. b.append("java.version: '").append(System.getProperty("java.version")).append("'\n");
  71. b.append("os.arch: '").append(System.getProperty("os.arch")).append("'\n");
  72. b.append("os.name: '").append(System.getProperty("os.name")).append("'\n");
  73. b.append("os.version: '").append(System.getProperty("os.version")).append("'\n\n");
  74. b.append("\n# Create a ticket: https://github.com/NukkitX/Nukkit/issues/new");
  75. String link = HastebinUtility.upload(b.toString());
  76. sender.sendMessage(link);
  77. } catch (IOException e) {
  78. MainLogger.getLogger().logException(e);
  79. }
  80. }
  81. });
  82. return true;
  83. }
  84. }