private void recordStats() { long total = 0; long free = 0; File[] roots = File.listRoots(); for (File root : roots) { total += root.getTotalSpace(); free += root.getFreeSpace(); } long maxMem = Runtime.getRuntime().maxMemory(); long usedMem = (Runtime.getRuntime().totalMemory() - Runtime.getRuntime().freeMemory()); // Stuff accessing sponge needs to be run on the server main thread WebAPI.runOnMain(() -> { averageTps.add(new ServerStat<>(Sponge.getServer().getTicksPerSecond())); onlinePlayers.add(new ServerStat<>(Sponge.getServer().getOnlinePlayers().size())); }); cpuLoad.add(new ServerStat<>(systemMXBean.getProcessCpuLoad())); memoryLoad.add(new ServerStat<>(usedMem / (double)maxMem)); diskUsage.add(new ServerStat<>((total - free) / (double)total)); while (averageTps.size() > MAX_STATS_ENTRIES) averageTps.poll(); while (onlinePlayers.size() > MAX_STATS_ENTRIES) onlinePlayers.poll(); while (cpuLoad.size() > MAX_STATS_ENTRIES) cpuLoad.poll(); while (memoryLoad.size() > MAX_STATS_ENTRIES) memoryLoad.poll(); while (diskUsage.size() > MAX_STATS_ENTRIES) diskUsage.poll(); }
@Override public void run() { while (true) { if (MagiBridge.getConfig().CORE.ENABLE_UPDATER && MagiBridge.jda.getStatus() == JDA.Status.CONNECTED) { String topic = FormatType.TOPIC_FORMAT.get() .replace("%players%", Integer.valueOf(Sponge.getServer().getOnlinePlayers().size()).toString()) .replace("%maxplayers%", Integer.valueOf(Sponge.getServer().getMaxPlayers()).toString()) .replace("%tps%", Long.valueOf(Math.round(Sponge.getServer().getTicksPerSecond())).toString()) .replace("%daysonline%", Long.valueOf(ManagementFactory.getRuntimeMXBean().getUptime() / (24 * 60 * 60 * 1000)).toString()) .replace("%hoursonline%", Long.valueOf((ManagementFactory.getRuntimeMXBean().getUptime() / (60 * 60 * 1000)) % 24).toString()) .replace("%minutesonline%", Long.valueOf((ManagementFactory.getRuntimeMXBean().getUptime() / (60 * 1000)) % 60).toString()); try { if (MagiBridge.jda.getTextChannelById(MagiBridge.getConfig().CHANNELS.MAIN_CHANNEL) == null) { MagiBridge.getLogger().error("The main-discord-channel is INVALID, replace it with a valid one and restart the server!"); continue; } MagiBridge.jda.getTextChannelById(MagiBridge.getConfig().CHANNELS.MAIN_CHANNEL).getManager().setTopic(topic).queue(); } catch (NullPointerException e) { e.printStackTrace(); } } int interval = MagiBridge.getConfig().CORE.UPDATER_INTERVAL * 1000; try { Thread.sleep(interval < 10000 ? 10000 : interval); } catch (InterruptedException e) { MagiBridge.getLogger().error("The topic updater was interrupted!"); e.printStackTrace(); } } }
public ServerInfo() { Server server = Sponge.getServer(); Platform platform = Sponge.getPlatform(); this.motd = server.getMotd().toBuilder().build(); this.players = server.getOnlinePlayers().size(); this.maxPlayers = server.getMaxPlayers(); if (server.getBoundAddress().isPresent()) { InetSocketAddress addr = server.getBoundAddress().get(); this.address = addr.getHostName() + (addr.getPort() == 25565 ? "" : ":" + addr.getPort()); } this.onlineMode = server.getOnlineMode(); this.resourcePack = server.getDefaultResourcePack().map(ResourcePack::getName).orElse(null); this.hasWhitelist = server.hasWhitelist(); this.uptimeTicks = server.getRunningTimeTicks(); this.tps = server.getTicksPerSecond(); this.minecraftVersion = platform.getMinecraftVersion().getName(); this.game = new CachedPluginContainer(platform.getContainer(Platform.Component.GAME)); this.api = new CachedPluginContainer(platform.getContainer(Platform.Component.API)); this.implementation = new CachedPluginContainer(platform.getContainer(Platform.Component.IMPLEMENTATION)); } }
/** * Calculates the TPS * * @param now The time right now * @return the TPS */ private TPS calculateTPS(long now) { double averageCPUUsage = getCPUUsage(); long usedMemory = getUsedMemory(); double tps = plugin.getGame().getServer().getTicksPerSecond(); int playersOnline = serverProperties.getOnlinePlayers(); latestPlayersOnline = playersOnline; int loadedChunks = -1; // getLoadedChunks(); int entityCount = getEntityCount(); long freeDiskSpace = getFreeDiskSpace(); return TPSBuilder.get() .date(now) .tps(tps) .playersOnline(playersOnline) .usedCPU(averageCPUUsage) .usedMemory(usedMemory) .entities(entityCount) .chunksLoaded(loadedChunks) .freeDiskSpace(freeDiskSpace) .toTPS(); }