From 82b0dbfe8e85fec84d9ecf8cccde79b944d20223 Mon Sep 17 00:00:00 2001 From: Shoghi Cervantes Date: Wed, 6 May 2015 19:11:17 +0200 Subject: [PATCH] Improved /status, added world information --- src/pocketmine/Server.php | 1 + .../command/defaults/StatusCommand.php | 64 +++++++++++++++++-- src/pocketmine/level/Level.php | 5 ++ 3 files changed, 64 insertions(+), 6 deletions(-) diff --git a/src/pocketmine/Server.php b/src/pocketmine/Server.php index 70dec97c7..ad1bd5f6b 100644 --- a/src/pocketmine/Server.php +++ b/src/pocketmine/Server.php @@ -2218,6 +2218,7 @@ class Server{ $levelTime = microtime(true); $level->doTick($currentTick); $tickMs = (microtime(true) - $levelTime) * 1000; + $level->tickRateTime = $tickMs; if($this->autoTickRate){ if($tickMs < 50 and $level->getTickRate() > $this->baseTickRate){ diff --git a/src/pocketmine/command/defaults/StatusCommand.php b/src/pocketmine/command/defaults/StatusCommand.php index 4851f06f3..91bf2d1f0 100644 --- a/src/pocketmine/command/defaults/StatusCommand.php +++ b/src/pocketmine/command/defaults/StatusCommand.php @@ -45,12 +45,64 @@ class StatusCommand extends VanillaCommand{ $server = $sender->getServer(); $sender->sendMessage(TextFormat::GREEN . "---- " . TextFormat::WHITE . "Server status" . TextFormat::GREEN . " ----"); - $sender->sendMessage(TextFormat::GOLD . "TPS: " . TextFormat::WHITE . $server->getTicksPerSecond()); - $sender->sendMessage(TextFormat::GOLD . "TPS Load: " . TextFormat::WHITE . $server->getTickUsage() . "%"); - $sender->sendMessage(TextFormat::GOLD . "Upload: " . TextFormat::WHITE . round($server->getNetwork()->getUpload() / 1024, 2) . " kB/s"); - $sender->sendMessage(TextFormat::GOLD . "Download: " . TextFormat::WHITE . round($server->getNetwork()->getDownload() / 1024, 2) . " kB/s"); - $sender->sendMessage(TextFormat::GOLD . "Memory: " . TextFormat::WHITE . round(($mUsage[0] / 1024) / 1024, 2) . "/".round(($mUsage[1] / 1024) / 1024, 2) . "/".round(($mUsage[2] / 1024) / 1024, 2) . " MB"); - $sender->sendMessage(TextFormat::GOLD . "Threads: " . TextFormat::WHITE . Utils::getThreadCount()); + + $time = microtime(true) - \pocketmine\START_TIME; + + $seconds = floor($time % 60); + $minutes = null; + $hours = null; + $days = null; + + if($time >= 60){ + $minutes = floor(($time % 3600) / 60); + if($time >= 3600){ + $hours = floor(($time % (3600 * 24)) / 3600); + if($time >= 3600 * 24){ + $days = floor($time / (3600 * 24)); + } + } + } + + $uptime = ($minutes !== null ? + ($hours !== null ? + ($days !== null ? + "$days days " + : "") . "$hours hours " + : "") . "$minutes minutes " + : "") . "$seconds seconds"; + + $sender->sendMessage(TextFormat::GOLD . "Uptime: " . TextFormat::RED . $uptime); + + $tpsColor = TextFormat::GREEN; + if($server->getTicksPerSecond() < 17){ + $tpsColor = TextFormat::GOLD; + }elseif($server->getTicksPerSecond() < 12){ + $tpsColor = TextFormat::RED; + } + + $sender->sendMessage(TextFormat::GOLD . "Current TPS: " . $tpsColor . $server->getTicksPerSecond() . " (".$server->getTickUsage()."%)"); + + $sender->sendMessage(TextFormat::GOLD . "Network upload: " . TextFormat::RED . round($server->getNetwork()->getUpload() / 1024, 2) . " kB/s"); + $sender->sendMessage(TextFormat::GOLD . "Network download: " . TextFormat::RED . round($server->getNetwork()->getDownload() / 1024, 2) . " kB/s"); + + $sender->sendMessage(TextFormat::GOLD . "Thread count: " . TextFormat::RED . Utils::getThreadCount()); + + $sender->sendMessage(TextFormat::GOLD . "Main thread memory: " . TextFormat::RED . number_format(round(($mUsage[0] / 1024) / 1024, 2)) . " MB."); + $sender->sendMessage(TextFormat::GOLD . "Allocated memory: " . TextFormat::RED . number_format(round(($mUsage[1] / 1024) / 1024, 2)) . " MB."); + $sender->sendMessage(TextFormat::GOLD . "Maximum memory (system): " . TextFormat::RED . number_format(round(($mUsage[2] / 1024) / 1024, 2)) . " MB."); + + if($server->getProperty("memory.global-limit") > 0){ + $sender->sendMessage(TextFormat::GOLD . "Maximum memory (manager): " . TextFormat::RED . number_format(round($server->getProperty("memory.global-limit"), 2)) . " MB."); + } + + foreach($server->getLevels() as $level){ + $sender->sendMessage(TextFormat::GOLD . "World \"".$level->getFolderName()."\"".($level->getFolderName() !== $level->getName() ? " (".$level->getName().")" : "").": " . + TextFormat::RED . number_format(count($level->getChunks())) . TextFormat::GREEN . " chunks, " . + TextFormat::RED . number_format(count($level->getEntities())) . TextFormat::GREEN . " entities, " . + TextFormat::RED . number_format(count($level->getTiles())) . TextFormat::GREEN . " tiles. ". + "Time " . (($level->getTickRate() > 1 or $level->getTickRateTime() > 40) ? TextFormat::RED : TextFormat::YELLOW) . round($level->getTickRateTime(), 2)."ms" . ($level->getTickRate() > 1 ? " (tick rate ". $level->getTickRate() .")" : "") + ); + } return true; } diff --git a/src/pocketmine/level/Level.php b/src/pocketmine/level/Level.php index bd4b61b01..7ad0f75e1 100644 --- a/src/pocketmine/level/Level.php +++ b/src/pocketmine/level/Level.php @@ -237,6 +237,7 @@ class Level implements ChunkManager, Metadatable{ public $timings; private $tickRate; + public $tickRateTime = 0; public $tickRateCounter = 0; /** @var Generator */ @@ -337,6 +338,10 @@ class Level implements ChunkManager, Metadatable{ return $this->tickRate; } + public function getTickRateTime(){ + return $this->tickRateTime; + } + public function setTickRate($tickRate){ $this->tickRate = (int) $tickRate; }