public function execute(CommandSender $sender, $currentAlias, array $args) { if (!$this->testPermission($sender)) { return true; } if (count($args) !== 1) { $sender->sendMessage(new TranslationContainer("commands.generic.usage", [$this->usageMessage])); return true; } $mode = strtolower($args[0]); if ($mode === "on") { $sender->getServer()->getPluginManager()->setUseTimings(true); TimingsHandler::reload(); $sender->sendMessage(new TranslationContainer("pocketmine.command.timings.enable")); return true; } elseif ($mode === "off") { $sender->getServer()->getPluginManager()->setUseTimings(false); $sender->sendMessage(new TranslationContainer("pocketmine.command.timings.disable")); return true; } if (!$sender->getServer()->getPluginManager()->useTimings()) { $sender->sendMessage(new TranslationContainer("pocketmine.command.timings.timingsDisabled")); return true; } $paste = $mode === "paste"; if ($mode === "reset") { TimingsHandler::reload(); $sender->sendMessage(new TranslationContainer("pocketmine.command.timings.reset")); } elseif ($mode === "merged" or $mode === "report" or $paste) { $sampleTime = microtime(true) - self::$timingStart; $index = 0; $timingFolder = $sender->getServer()->getDataPath() . "timings/"; if (!file_exists($timingFolder)) { mkdir($timingFolder, 0777); } $timings = $timingFolder . "timings.txt"; while (file_exists($timings)) { $timings = $timingFolder . "timings" . ++$index . ".txt"; } $fileTimings = $paste ? fopen("php://temp", "r+b") : fopen($timings, "a+b"); TimingsHandler::printTimings($fileTimings); fwrite($fileTimings, "Sample time " . round($sampleTime * 1000000000) . " (" . $sampleTime . "s)" . PHP_EOL); if ($paste) { fseek($fileTimings, 0); $data = ["syntax" => "text", "poster" => $sender->getServer()->getName(), "content" => stream_get_contents($fileTimings)]; $ch = curl_init("http://paste.ubuntu.com/"); curl_setopt($ch, CURLOPT_POST, 1); curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false); curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 2); curl_setopt($ch, CURLOPT_FORBID_REUSE, 1); curl_setopt($ch, CURLOPT_FRESH_CONNECT, 1); curl_setopt($ch, CURLOPT_POSTFIELDS, $data); curl_setopt($ch, CURLOPT_AUTOREFERER, false); curl_setopt($ch, CURLOPT_FOLLOWLOCATION, false); curl_setopt($ch, CURLOPT_HEADER, true); curl_setopt($ch, CURLOPT_HTTPHEADER, ["User-Agent: " . $this->getName() . " " . $sender->getServer()->getPocketMineVersion()]); curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); $data = curl_exec($ch); curl_close($ch); if (preg_match('#^Location: http://paste\\.ubuntu\\.com/([0-9]{1,})/#m', $data, $matches) == 0) { $sender->sendMessage(new TranslationContainer("pocketmine.command.timings.pasteError")); return true; } $sender->sendMessage(new TranslationContainer("pocketmine.command.timings.timingsUpload", ["http://paste.ubuntu.com/" . $matches[1] . "/"])); $sender->sendMessage(new TranslationContainer("pocketmine.command.timings.timingsRead", ["http://timings.aikar.co/?url=" . $matches[1]])); fclose($fileTimings); } else { fclose($fileTimings); $sender->sendMessage(new TranslationContainer("pocketmine.command.timings.timingsWrite", [$timings])); } } return true; }
private function pasteTimings() { $sampleTime = microtime(true) - TimingsCommand::$timingStart; $ft = fopen("php://temp", "r+b"); TimingsHandler::printTimings($ft); fwrite($ft, "Sample time " . round($sampleTime * 1000000000) . " (" . $sampleTime . "s)" . PHP_EOL); fseek($ft, 0); $data = ["syntax" => "text", "poster" => "LegionPE", "content" => stream_get_contents($ft)]; $ch = curl_init("http://paste.ubuntu.com/"); curl_setopt($ch, CURLOPT_POST, 1); curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false); curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 2); curl_setopt($ch, CURLOPT_FORBID_REUSE, 1); curl_setopt($ch, CURLOPT_FRESH_CONNECT, 1); curl_setopt($ch, CURLOPT_POSTFIELDS, $data); curl_setopt($ch, CURLOPT_AUTOREFERER, false); curl_setopt($ch, CURLOPT_FOLLOWLOCATION, false); curl_setopt($ch, CURLOPT_HEADER, true); curl_setopt($ch, CURLOPT_HTTPHEADER, ["User-Agent: LegionPE " . $this->getDescription()->getVersion()]); curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); $data = curl_exec($ch); curl_close($ch); if (preg_match('#^Location: http://paste\\.ubuntu\\.com/([0-9]{1,})/#m', $data, $matches) == 0) { return "about:blank"; } fclose($ft); return "http://timings.aikar.co/?url={$matches['1']}"; }
public function execute(CommandSender $sender, $currentAlias, array $args) { if (!$this->testPermission($sender)) { return \true; } if (\count($args) !== 1) { $sender->sendMessage(TextFormat::RED . "Usage: " . $this->usageMessage); return \true; } $mode = \strtolower($args[0]); if ($mode === "on") { $sender->getServer()->getPluginManager()->setUseTimings(\true); TimingsHandler::reload(); $sender->sendMessage("Enabled Timings & Reset"); return \true; } elseif ($mode === "off") { $sender->getServer()->getPluginManager()->setUseTimings(\false); $sender->sendMessage("Disabled Timings"); return \true; } if (!$sender->getServer()->getPluginManager()->useTimings()) { $sender->sendMessage("Please enable timings by typing /timings on"); return \true; } $paste = $mode === "paste"; if ($mode === "reset") { TimingsHandler::reload(); $sender->sendMessage("Timings reset"); } elseif ($mode === "merged" or $mode === "report" or $paste) { $sampleTime = \microtime(\true) - self::$timingStart; $index = 0; $timingFolder = $sender->getServer()->getDataPath() . "timings/"; if (!\file_exists($timingFolder)) { \mkdir($timingFolder, 0777); } $timings = $timingFolder . "timings.txt"; while (\file_exists($timings)) { $timings = $timingFolder . "timings" . ++$index . ".txt"; } $fileTimings = $paste ? \fopen("php://temp", "r+b") : \fopen($timings, "a+b"); TimingsHandler::printTimings($fileTimings); \fwrite($fileTimings, "Sample time " . \round($sampleTime * 1000000000) . " (" . $sampleTime . "s)" . \PHP_EOL); if ($paste) { \fseek($fileTimings, 0); $data = ["syntax" => "text", "poster" => $sender->getServer()->getName(), "content" => \stream_get_contents($fileTimings)]; $ch = curl_init("http://paste.ubuntu.com/"); curl_setopt($ch, CURLOPT_POST, 1); curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, \false); curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 2); curl_setopt($ch, CURLOPT_FORBID_REUSE, 1); curl_setopt($ch, CURLOPT_FRESH_CONNECT, 1); curl_setopt($ch, CURLOPT_POSTFIELDS, $data); curl_setopt($ch, CURLOPT_AUTOREFERER, \false); curl_setopt($ch, CURLOPT_FOLLOWLOCATION, \false); curl_setopt($ch, CURLOPT_HEADER, \true); curl_setopt($ch, CURLOPT_HTTPHEADER, ["User-Agent: " . $this->getName() . " " . $sender->getServer()->getPocketMineVersion()]); curl_setopt($ch, CURLOPT_RETURNTRANSFER, \true); $data = curl_exec($ch); curl_close($ch); if (\preg_match('#^Location: http://paste\\.ubuntu\\.com/([0-9]{1,})/#m', $data, $matches) == 0) { $sender->sendMessage("An error happened while pasting the report"); return \true; } $sender->sendMessage("Timings uploaded to http://paste.ubuntu.com/" . $matches[1] . "/"); $sender->sendMessage("You can read the results at http://timings.aikar.co/?url=" . $matches[1]); \fclose($fileTimings); } else { \fclose($fileTimings); $sender->sendMessage("Timings written to " . $timings); } } return \true; }
public function execute(CommandSender $sender, $currentAlias, array $args) { if (!$this->testPermission($sender)) { return true; } if (count($args) !== 1) { $sender->sendMessage(TextFormat::RED . "Usage: " . $this->usageMessage); return true; } $mode = strtolower($args[0]); if ($mode === "on") { $sender->getServer()->getPluginManager()->setUseTimings(true); TimingsHandler::reload(); $sender->sendMessage("Enabled Timings & Reset"); return true; } elseif ($mode === "off") { $sender->getServer()->getPluginManager()->setUseTimings(false); $sender->sendMessage("Disabled Timings"); } if (!$sender->getServer()->getPluginManager()->useTimings()) { $sender->sendMessage("Please enable timings by typing /timings on"); return true; } $paste = $mode === "paste"; if ($mode === "reset") { TimingsHandler::reload(); $sender->sendMessage("Timings reset"); } elseif ($mode === "merged" or $mode === "report" or $paste) { $sampleTime = microtime(true) - self::$timingStart; $index = 0; $timingFolder = $sender->getServer()->getDataPath() . "timings/"; @mkdir($timingFolder, 0777); $timings = $timingFolder . "timings.txt"; while (file_exists($timings)) { $timings = $timingFolder . "timings" . ++$index . ".txt"; } $fileTimings = $paste ? fopen("php://temp", "r+b") : fopen($timings, "a+b"); TimingsHandler::printTimings($fileTimings); fwrite($fileTimings, "Sample time " . round($sampleTime * 1000000000) . " (" . $sampleTime . "s)" . PHP_EOL); if ($paste) { fseek($fileTimings, 0); $data = ["public" => false, "description" => $sender->getServer()->getName() . " Timings", "files" => ["timings.txt" => ["content" => stream_get_contents($fileTimings)]]]; $ch = curl_init("https://api.github.com/gists"); curl_setopt($ch, CURLOPT_POST, 1); curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false); curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 2); curl_setopt($ch, CURLOPT_FORBID_REUSE, 1); curl_setopt($ch, CURLOPT_FRESH_CONNECT, 1); curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode($data, JSON_UNESCAPED_SLASHES)); curl_setopt($ch, CURLOPT_AUTOREFERER, true); curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true); curl_setopt($ch, CURLOPT_HTTPHEADER, ["Content-Type: application/json", "User-Agent: " . $this->getName() . " " . $sender->getServer()->getPocketMineVersion()]); curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); $ret = curl_exec($ch); $data = json_decode($ret); curl_close($ch); if ($data === false or $data === null or !isset($data->html_url)) { $sender->sendMessage("An error happened while pasting the report"); return true; } $timings = $data->html_url; } fclose($fileTimings); $sender->sendMessage("Timings written to " . $timings); $sender->sendMessage("Paste contents of file into form at http://aikar.co/timings.php to read results."); } return true; }