| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169 |
- <?php
- /* * ********************************************************************
- * ProxmoxAddon product developed. (Oct 4, 2018)
- * *
- *
- * CREATED BY MODULESGARDEN -> 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\ProxmoxAddon\App\UI\Servers\Pages;
- use MGProvision\Proxmox\v2 as proxmox;
- use ModulesGarden\ProxmoxAddon as main;
- use WHMCS\Database\Capsule as DB;
- use WHMCS\Service\Service;
- /**
- * Description of ServerResources
- *
- * @author Pawel Kopec <pawelk@modulesgardne.com>
- */
- trait ServerResources
- {
- use main\App\Services\BaseService;
- use main\Core\UI\Traits\RequestObjectHandler;
- protected $errors = [];
- protected $hostingStatus = ["Active"];
- private $ramAssigned = 0;
- private $ramTotal = 0;
- private $ramFree = 0;
- private $ramSuspended = 0;
- public function getHostingStatus()
- {
- return $this->hostingStatus;
- }
- public function setHostingStatus($hostingStatus)
- {
- $this->hostingStatus = $hostingStatus;
- return $this;
- }
- public function ramAssignedToSring()
- {
- return main\App\Libs\Format::convertBytes($this->ramAssigned);
- }
- public function ramTotalToSring()
- {
- return main\App\Libs\Format::convertBytes($this->ramTotal);
- }
- public function ramFreeToSring()
- {
- return main\App\Libs\Format::convertBytes($this->ramFree);
- }
- public function ramSuspendedToSring()
- {
- return main\App\Libs\Format::convertBytes($this->ramSuspended);
- }
- protected function ramDetails()
- {
- $nodeRepository = new proxmox\repository\NodeRepository();
- $serverAssignedIps = $this->getServer()->assignedips;
- $serverAssignedIps = preg_replace('/\s+/', '', $serverAssignedIps);
- $serverAssignedIps = explode(PHP_EOL, $serverAssignedIps);
- $privateIp = current($serverAssignedIps);
- $serverIp = $privateIp ? $privateIp : $this->getServer()->ipaddress;
- $node = $nodeRepository->findWithHostOrIp($this->getServer()->hostname, $serverIp );
- //Get hosting for this server with status active and suspended
- foreach (Service::where('server', $this->getServerId())->whereIn('domainstatus', $this->hostingStatus)->get() as $hosting)
- {
- try
- {
- if ($this->getServer()->type == "proxmoxVPS")
- {
- $customFields = new \stdClass;
- foreach ($hosting->customFieldValues as $cf)
- {
- if ($cf->value && preg_match("/node/", $cf->customField->fieldName))
- {
- $customFields->node = $cf->value;
- }
- if ($cf->value && preg_match("/vmid/", $cf->customField->fieldName))
- {
- $customFields->vmid = $cf->value;
- }
- }
- if (!empty($customFields->vmid) && !empty($customFields->node) && $node->getNode() == $customFields->node)
- {
- $customFields->type = DB::table('ProxmoxAddon_ProductConfiguration')
- ->where('product_id', $hosting->packageId)
- ->where("setting", "virtualization")
- ->value("value");
- $customFields->type = \json_decode(strtolower($customFields->type), true);
- $customFields->virtualization = $customFields->type;
- $vm = proxmox\Factory::vm($customFields);
- $this->vmDetails($vm, $hosting);
- }
- }
- else
- {
- if ($this->getServer()->type == "ProxmoxCloudVps")
- {
- $query = DB::table('ProxmoxAddon_Vm')
- ->where('hosting_id', $hosting->id)
- ->where('node', $node->getNode())
- ->select('node', 'vmid', 'virtualization', 'node');
- foreach ($query->get() as $vserver)
- {
- $vm = proxmox\Factory::vm($vserver);
- $this->vmDetails($vm, $hosting);
- }
- }
- }
- $this->ramTotal = $node->getStatus()['memory']['total'];
- $this->ramFree = $this->ramTotal - $this->ramAssigned;
- }
- catch (\Exception $ex)
- {
- if( main\App\Models\Job::ofHostingId($hosting->id)->waiting()->count()){
- continue;
- }
- $this->errors[] = sprintf("Hosting #%s %s", $hosting->id, $ex->getMessage() );
- }
- }
- }
- private function vmDetails(proxmox\interfaces\VmInterface $vm, $hosting)
- {
- $stat = $vm->status();
- if (!empty($stats['maxmem']))
- {
- $memory = $stats['maxmem'];
- }
- else
- {
- $config = $vm->config();
- $memory = (int)$config['memory'] * 1048576;
- }
- if ($hosting->domainStatus == "Active")
- {
- $this->ramAssigned += $memory;
- }
- else
- {
- if ($hosting->domainStatus == "Suspended")
- {
- $this->ramSuspended += $memory;
- }
- }
- }
- }
|