http://modulesgarden.com * CONTACT -> contact@modulesgarden.com * * * This software is furnished under a license and may be used and copied * only in accordance with the terms of such license and with the * inclusion of the above copyright notice. This software or any other * copies thereof may not be provided or otherwise made available to any * other person. No title to and ownership of the software is hereby * transferred. * * * ******************************************************************** */ namespace ModulesGarden\Servers\ProxmoxVps\App\UI\ServiceInformation\Pages; use MGProvision\Proxmox\v2\models\Kvm; use MGProvision\Proxmox\v2\models\Lxc; use MGProvision\Proxmox\v2\models\NetworkDeviceKvm; use MGProvision\Proxmox\v2\models\NetworkDeviceLxc; use ModulesGarden\ProxmoxAddon\App\Libs\Format; use ModulesGarden\ProxmoxAddon\App\Models\KeyPair; use ModulesGarden\ProxmoxAddon\App\Services\ApiService; use ModulesGarden\ProxmoxAddon\App\Services\Utility; use ModulesGarden\ProxmoxAddon\App\Services\Vps\ProductService; use ModulesGarden\ProxmoxAddon\App\Services\Vps\UrlService; use ModulesGarden\Servers\ProxmoxVps\App\UI\Home\Buttons\RedirectButton; use ModulesGarden\Servers\ProxmoxVps\App\UI\ServiceInformation\Buttons\SshPrivateKeyDownloadButton; use ModulesGarden\Servers\ProxmoxVps\App\UI\ServiceInformation\Buttons\UpdateButton; use ModulesGarden\Servers\ProxmoxVps\Core\UI\Builder\BaseContainer; use ModulesGarden\Servers\ProxmoxVps\Core\UI\Interfaces\AdminArea; use ModulesGarden\Servers\ProxmoxVps\Core\UI\Interfaces\AjaxElementInterface; use ModulesGarden\Servers\ProxmoxVps\Core\UI\Interfaces\ClientArea; use ModulesGarden\Servers\ProxmoxVps\Core\UI\ResponseTemplates\RawDataJsonResponse; use function ModulesGarden\Servers\ProxmoxVps\Core\Helper\isAdmin; use function ModulesGarden\Servers\ProxmoxVps\Core\Helper\sl; use ModulesGarden\Servers\ProxmoxVps\App\Enum\ConfigurableOption; class ServiceInformation extends BaseContainer implements ClientArea, AdminArea, AjaxElementInterface { use ProductService; use ApiService; protected $id = 'serviceInformationDataTable'; protected $title = 'serviceInformationDataTable'; protected $vueComponent = true; protected $defaultVueComponentName = 'mg-serviceInformationDataTable'; public function initContent() { $this->addClass('lu-text-left'); //Update $this->addButton(new UpdateButton()); if ($this->configuration()->isLxc() && KeyPair::ofHostingId($this->getWhmcsParamByKey('serviceid'))->count()) { $keyPairs = KeyPair::ofHostingId($this->getWhmcsParamByKey('serviceid'))->first(); //URL $urlService = new UrlService(); //Public Key $rd = new RedirectButton("sshPublicKeyDownloadButton"); $rd->replaceClasses(['lu-btn lu-btn--sm lu-btn lu-btn--link lu-btn--icon lu-btn--plain lu-btn--default']); $rd->setIcon('lu-zmdi lu-zmdi-shield-security'); $rd->setHref($urlService->getUrl("home", "sshPublicKeyDownload")); $this->addButton($rd); //Private Key $deletePrivateKey = $this->configuration()->isSshDeletePrivateKey(); if (!$deletePrivateKey && $keyPairs->isPrivate()) { $rd = new RedirectButton("sshPrivateKeyDownloadButton"); $rd->replaceClasses(['lu-btn lu-btn--sm lu-btn lu-btn--link lu-btn--icon lu-btn--plain lu-btn--default']); $rd->setIcon('lu-zmdi lu-zmdi-shield-check'); $rd->setHref($urlService->getUrl("home", "sshPrivateKeyDownload")); $this->addButton($rd); } else { if ($deletePrivateKey && $keyPairs->isPrivate()) { $this->addButton(new SshPrivateKeyDownloadButton()); } } } } public function returnAjaxData() { $vars = []; //Status $status = $this->vm()->status(); $vars['status'] = [ "uptime" => Utility::uptime($status['uptime']), 'cpu' => Utility::cpuUsage($status['cpu']), 'cpus' => (int) $status['cpus'] ]; switch ($status['status']) { case 'running': $vars['status']['status'] = '' . sl('lang')->tr($status['status']) . ''; break; case 'stoped': $vars['status']['status'] = '' . sl('lang')->tr($status['status']) . ''; default: $vars['status']['status'] = '' . sl('lang')->tr($status['status']) . ''; } //Memory $vars['status']['memPercent'] = (int) round($status['mem'] / $status['maxmem'] * 100); $vars['status']['maxmem'] = Format::convertBytes($status['maxmem']); $vars['status']['mem'] = Format::convertBytes($status['mem']); if ($this->vm() instanceof Lxc) { //SWAP $vars['status']['swapPercent'] = (int) round($status['swap'] / $status['maxswap'] * 100); $vars['status']['swap'] = Format::convertBytes($status['swap']); $vars['status']['maxswap'] = Format::convertBytes($status['maxswap']); //Disk $vars['status']['diskPercent'] = (int) round($status['disk'] / $status['maxdisk'] * 100); $vars['status']['disk'] = Format::convertBytes($status['disk']); $vars['status']['maxdisk'] = Format::convertBytes($status['maxdisk']); $vars['status']['diskwrite'] = Format::convertBytes($status['diskwrite']); //Key Pairs if (KeyPair::ofHostingId($this->getWhmcsParamByKey('serviceid'))->count()) { $keyPairs = KeyPair::ofHostingId($this->getWhmcsParamByKey('serviceid'))->first(); $vars['keyPairs']['public'] = $keyPairs->isPrivate(); $vars['keyPairs']['private'] = $keyPairs->isPrivate(); } } if ($status['balloon_min']) { $vars['status']['balloon_min'] = Format::convertBytes($status['balloon_min']); } //Config $vars['config'] = [ "name" => $this->vm()->config()['name'] ? $this->vm()->config()['name'] : $this->vm()->config()['hostname'] ]; if (isAdmin()) { $vars['node'] = $this->vm()->getNode(); } $vars['virtualization'] = $this->vm()->getVirtualization(); // Default configuration option if (!$this->isWhmcsConfigOption(ConfigurableOption::IPV4) && $this->configuration()->getIpv4()) { $vars['ipAddresses'] = $this->configuration()->getIpv4(); } //BackupMaxFiles if (!$this->isWhmcsConfigOption(ConfigurableOption::BACKUPS_FILES) && $this->configuration()->getBackupMaxFiles()) { $vars['backupsFilesLimit'] = $this->configuration()->getBackupMaxFiles(); if($this->configuration()->getBackupMaxFiles() =="-1"){ $vars['backupsFilesLimit'] = sl('lang')->abtr("Unlimited"); } } //NetworkRate /** @var NetworkDeviceKvm|NetworkDeviceLxc $networkDevice */ $networkDevice = $this->vm()->getNetworkDevices($this->configuration()->getBridge())[0]; if ($networkDevice && $networkDevice->getRate()) { $vars['networkRate'] = "{$networkDevice->getRate()} MB/s ({$networkDevice->getRateMbps()} Mbps)"; } //KVM if ($this->vm() instanceof Kvm) { //CD-ROM $vars['cdrom'] = $this->vm()->getIso(); //Boot order $vars['bootOrder'] = []; foreach ($this->vm()->getBootOrder() as $device) { $vars['bootOrder'][] = sl("lang")->tr("bootOrder", $device); } $vars['bootOrder'] = implode(", ", $vars['bootOrder']); //SSH Public Key $vars['sshkeysName'] = $this->vm()->sshkeysName(); } //OS Info if (isAdmin() && $this->vm()->config()['agent'] == 1) { try { $vars['osinfo'] = $this->vm()->agent()->getOsinfo()['result']; $vars['osinfo']['kernelrelease'] = $vars['osinfo']['kernel-release']; $vars['hostname'] = $this->vm()->agent()->getHostname()['result']['host-name']; } catch (\Exception $ex) { $vars['quemuAgent'] = $ex->getMessage(); } } if (isAdmin() && $this->vm() instanceof Lxc) { $features = $this->vm()->config()['features']; $vars['features'] = $features ? $features : "-"; } return (new RawDataJsonResponse(['data' => $vars])); } }