From f55c6137efaecf82e47265b67d0f1e5178455609 Mon Sep 17 00:00:00 2001 From: Meteo Date: Wed, 7 Jan 2026 23:20:33 +0100 Subject: [PATCH] View companies with connected servers and created serversOverview class. --- pub/api/classes/API_servers.php | 9 + .../customers/pageCompanies_company_view.php | 131 +++-- .../pages/servers/pageServerOverview_view.php | 431 +--------------- pub/bin/php/Classes/serverOverviewBuilder.php | 475 ++++++++++++++++++ 4 files changed, 576 insertions(+), 470 deletions(-) create mode 100644 pub/bin/php/Classes/serverOverviewBuilder.php diff --git a/pub/api/classes/API_servers.php b/pub/api/classes/API_servers.php index 082a0df..bbc497c 100644 --- a/pub/api/classes/API_servers.php +++ b/pub/api/classes/API_servers.php @@ -9,6 +9,15 @@ require_once 'API.php'; class API_servers extends API { + public function getServers($returnBoolean = false) + { + list($query, $types, $params) = $this->buildDynamicQuery('servers'); + + $items = $this->generalGetFunction($query, $types, $params, $returnBoolean, 'Server'); + + return $items; + } + public function validateDiskData($disks) { foreach ($disks as $index => $disk) { diff --git a/pub/bin/pages/customers/pageCompanies_company_view.php b/pub/bin/pages/customers/pageCompanies_company_view.php index ac5398e..7426e63 100644 --- a/pub/bin/pages/customers/pageCompanies_company_view.php +++ b/pub/bin/pages/customers/pageCompanies_company_view.php @@ -1,4 +1,9 @@ checkPermissions('customer-companies', 'RO', true)) { +$API_servers = new API_servers(); +if (!$API_servers->checkPermissions('customer-companies', 'RO', true)) { echo 'error 401 unauthorized'; exit; } @@ -28,9 +31,12 @@ if (!$API->checkPermissions('customer-companies', 'RO', true)) { # JS Scripts to load for this page $jsScriptLoadData['datepicker'] = true; $jsScriptLoadData['breadCrumbs'] = true; +$jsScriptLoadData['datatables'] = true; +$jsScriptLoadData['multiFilterSelectServers'] = true; # PageClasses Setup $pageNavbar = new pageNavbar(true); +$serverOverview = new serverOverviewBuilder(); # Retrieve Information for the page $company_uuid = htmlspecialchars($_GET['view'], ENT_QUOTES, 'UTF-8'); @@ -45,54 +51,75 @@ $company_data = $result->fetch_assoc(); array_push($GLOBALS['breadCrumbArray'], array('display' => __('companies'), 'href' => '/companies/')); array_push($GLOBALS['breadCrumbArray'], array('display' => $company_data['company_name'], 'href' => '')); +# Retrieve Information for the page +$company_uuid = htmlspecialchars($_GET['view'], ENT_QUOTES, 'UTF-8'); +$_GET['company_uuid'] = $company_uuid; +$_GET['builder'] = [1 => ['where' => [0 => 'company_uuid', 1 => $company_uuid]]]; +$requiredFields = ['company_uuid' => ['type' => 'uuid']]; +$API_servers->postedData = $_GET; +$API_servers->validateData($requiredFields); +$servers_data = $API_servers->getServers(true); + +if (count($servers_data) > 0) { + $serverOverview->servers = $servers_data; + $serverOverview->processServerData(); + $serverOverview->showDelBtn = false; + $serverOverview->showCompanies = false; +} + # Start page output - $pageNavbar->outPutNavbar(); - ?> -
-
-
-

- -

-
-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
company_uuid:
source_uuid:
company_source_id:
company_source_id2:
company_name:
company_state:
company_create_timestamp:
company_modified_timestamp:
+
+
+
+

+ +

+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
company_uuid:
source_uuid:
company_source_id:
company_source_id2:
company_name:
company_state:
company_create_timestamp:
company_modified_timestamp:
+
-
+ +checkPermissions('servers', 'RO', true)) { + if (count($servers_data) > 0) { + $serverOverview->serverOverviewOutPut(); + } +} +?> \ No newline at end of file diff --git a/pub/bin/pages/servers/pageServerOverview_view.php b/pub/bin/pages/servers/pageServerOverview_view.php index f6e5866..cbac337 100644 --- a/pub/bin/pages/servers/pageServerOverview_view.php +++ b/pub/bin/pages/servers/pageServerOverview_view.php @@ -1,6 +1,7 @@ checkPermissions('servers', 'RO', true)) { +$API_servers = new API_servers(); +if (!$API_servers->checkPermissions('servers', 'RO', true)) { echo 'error 401 unauthorized'; exit; } @@ -30,6 +32,7 @@ $jsScriptLoadData['datatables'] = true; $jsScriptLoadData['multiFilterSelectServers'] = true; # PageClasses Setup +$serverOverview = new serverOverviewBuilder(); # Retrieve Information for the page if (!isset($_GET['del'])) { @@ -39,60 +42,6 @@ if (!isset($_GET['del'])) { $API_servers->baseQuery = "SELECT * FROM servers WHERE servers.server_state != 'deleted'"; } -$allBackupTypes = []; -$allLicenseTypes = []; -foreach ($servers as $server) { - if (!empty($server['server_backup'])) { - $backups = json_decode($server['server_backup'], true); - if (is_array($backups)) { - foreach ($backups as $item) { - foreach ($item as $key => $value) { - $allBackupTypes[$key] = true; // use keys as unique types - } - } - } - } - - if (!empty($server['server_licenses'])) { - $licenses = json_decode($server['server_licenses'], true); - if (is_array($licenses)) { - foreach ($licenses as $item) { - foreach ($item as $key => $value) { - $allLicenseTypes[$key] = true; // keys are license types - } - } - } - } - -} -$allBackupTypes = array_keys($allBackupTypes); -sort($allBackupTypes); - -$allLicenseTypes = array_keys($allLicenseTypes); -sort($allLicenseTypes); - -$showColumns = array( - 'server_hostname' => false, - 'company_name' => false, - 'server_power_state' => false, - 'server_os' => false, - 'server_cpu' => false, - 'server_memory' => false, - 'server_memory_demand' => false, - 'server_disks' => false, - 'server_ipv4' => false, - 'server_ipv6' => false, - 'server_vm_snapshot' => false, - 'server_vm_generation' => false, - 'server_licenses' => false, - 'server_backup' => false, -); - -if (isset($_COOKIE['serverTableColumns'])) { - $CheckedColumns = json_decode(htmlspecialchars(($_COOKIE['serverTableColumns']), true)); - foreach ($CheckedColumns as $CheckedColumn) { - $showColumns[$CheckedColumn] = true; - } } else { if ($GLOBALS['modules_enabled']['customers']) { $API_servers->baseQuery = "SELECT * FROM servers LEFT JOIN companies ON companies.company_uuid = servers.company_uuid"; @@ -101,8 +50,11 @@ if (isset($_COOKIE['serverTableColumns'])) { } } - // Otherwise return trimmed float - return rtrim(rtrim(number_format($num, 10, '.', ''), '0'), '.'); +$servers_data = $API_servers->getServers(); +$serverOverview->servers = $servers_data; +$serverOverview->processServerData(); +if (!$GLOBALS['modules_enabled']['customers']) { + $serverOverview->showCompanies = false; } # Set breadcrumb data @@ -110,363 +62,6 @@ array_push($GLOBALS['breadCrumbArray'], array('display' => __('permission'), 'hr array_push($GLOBALS['breadCrumbArray'], array('display' => __('view'), 'href' => '')); # Start page output +$serverOverview->serverOverviewOutPut(); ?> -
-
-

-   -

-
-
-
- - - - - - - - - - - - - - - - -
-
-
- - -   - - - -   - - - -
-
- -
-
-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 0) { - $mem_percent = ($demand / $mem) * 100; - $mem_percent_numb = round($mem_percent, 1); - $mem_demand = round($mem_percent, 1) . "%"; // round to 1 decimal place - $mem_percent_sort = $mem_percent_numb; - - if ($mem_percent_numb <= 89) { - $mem_demand_text_color = 'success'; - } - if ($mem_percent_numb > 89) { - $mem_demand_text_color = 'secondary'; - } - if ($mem_percent_numb > 99) { - $mem_demand_text_color = 'danger'; - } - - } else { - $mem_demand = "N/A"; - $mem_percent_numb = 'N/A'; - $mem_percent_sort = -1; - } - - $ipv4_list = ''; - if (!empty($server['server_ipv4'])) { - $ips = json_decode($server['server_ipv4'], true); - if (is_array($ips)) { - $ipv4_list = implode(', ', $ips); - } - } - - $ipv6_list = ''; - if (!empty($server['server_ipv6'])) { - $ips = json_decode($server['server_ipv6'], true); - if (is_array($ips)) { - $ipv6_list = implode(', ', $ips); - } - } - - $thisServerLicenses = []; - foreach ($allLicenseTypes as $licenseType) { - $thisServerLicenses[$licenseType] = false; - } - - if (!empty($server['server_licenses'])) { - $allLicenseTypesServer = json_decode($server['server_licenses'], true); - if (is_array($allLicenseTypesServer)) { - foreach ($allLicenseTypesServer as $licenseTypeServer) { - foreach ($licenseTypeServer as $licenseTypeServerKey => $licenseTypeServerValue) { - $thisServerLicenses[$licenseTypeServerKey] = true; - } - } - } - } - - $thisServerBackup = []; - foreach ($allBackupTypes as $BackupType) { - $thisServerBackup[$BackupType] = false; - } - - if (!empty($server['server_backup'])) { - $allBackupTypesServer = json_decode($server['server_backup'], true); - if (is_array($allBackupTypesServer)) { - foreach ($allBackupTypesServer as $BackupTypeServer) { - foreach ($BackupTypeServer as $BackupTypeServerKey => $BackupTypeServerValue) { - $thisServerBackup[$BackupTypeServerKey] = true; - } - } - } - } - - $company_name = ''; - if (strlen($server['company_name']) > 0) { - $company_name = $server['company_name']; - } - - $server_state_color = returnServerStateColor($server['server_state']); - - ?> - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - -
- - - - - - - - - - - 0) { - $sizes = array_column($disks, 'disk_space'); - $totalDiskSpace = array_sum($sizes); - - if ($totalDiskSpace > 0) { - $sortValue = $totalDiskSpace; - $filterValue = $totalDiskSpace; - } - } - ?> - data-sort="" data-filter=""> - - - - - - - - - - ' : '' ?>' : '' ?> - '; - } elseif ($server['server_power_state'] == 'Running') { - echo ''; - } ?> - - - - -
-
-
-
-
diff --git a/pub/bin/php/Classes/serverOverviewBuilder.php b/pub/bin/php/Classes/serverOverviewBuilder.php new file mode 100644 index 0000000..ec7065e --- /dev/null +++ b/pub/bin/php/Classes/serverOverviewBuilder.php @@ -0,0 +1,475 @@ + false, + 'company_name' => false, + 'server_power_state' => false, + 'server_os' => false, + 'server_cpu' => false, + 'server_memory' => false, + 'server_memory_demand' => false, + 'server_disks' => false, + 'server_ipv4' => false, + 'server_ipv6' => false, + 'server_vm_snapshot' => false, + 'server_vm_generation' => false, + 'server_licenses' => false, + 'server_backup' => false, + 'server_description' => false, + ); + + public array $allBackupTypes = []; + public array $allLicenseTypes = []; + + public bool $showDelBtn = true; + public bool $showServerOverviewTitle = true; + + public bool $showCompanies = true; + + public function processServerData() + { + foreach ($this->servers as $server) { + if (!empty($server['server_backup'])) { + $backups = json_decode($server['server_backup'], true); + if (is_array($backups)) { + foreach ($backups as $item) { + foreach ($item as $key => $value) { + $this->allBackupTypes[$key] = true; + } + } + } + } + + if (!empty($server['server_licenses'])) { + $licenses = json_decode($server['server_licenses'], true); + if (is_array($licenses)) { + foreach ($licenses as $item) { + foreach ($item as $key => $value) { + $this->allLicenseTypes[$key] = true; + } + } + } + } + } + + $this->allBackupTypes = array_keys($this->allBackupTypes); + sort($this->allBackupTypes); + + $this->allLicenseTypes = array_keys($this->allLicenseTypes); + sort($this->allLicenseTypes); + + + if (isset($_COOKIE['serverTableColumns'])) { + $CheckedColumns = json_decode(htmlspecialchars(($_COOKIE['serverTableColumns']), true)); + foreach ($CheckedColumns as $CheckedColumn) { + $this->showColumns[$CheckedColumn] = true; + } + } else { + $this->showColumns['server_hostname'] = true; + $this->showColumns['company_name'] = true; + $this->showColumns['server_os'] = true; + $this->showColumns['server_cpu'] = true; + $this->showColumns['server_memory'] = true; + $this->showColumns['server_memory_demand'] = true; + $this->showColumns['server_disks'] = true; + $this->showColumns['server_state'] = true; + } + } + + private function cleanNumber($num) + { + // If integer value, return without formatting + if (floor($num) == $num) { + return (string)$num; + } + + // Otherwise return trimmed float + return rtrim(rtrim(number_format($num, 10, '.', ''), '0'), '.'); + } + + public function serverOverviewOutPut() + { ?> +
+ showServerOverviewTitle) { ?> +
+

+   +

+
+ +
+
+ + + showCompanies) { ?> + + + + + + + + + + + + + + + +
+
+ showDelBtn) { ?> +
+ + +   + + + +   + + +
+ +
+ +
+
+
+ + + + + + showCompanies) { ?> + + + + + + + + + + + + allLicenseTypes as $licenseType) { ?> + + allBackupTypes as $backupType) { ?> + + + + + + + + + + + + showCompanies) { ?> + + + + + + + + + + + + allLicenseTypes as $licenseType) { ?> + + allBackupTypes as $backupType) { ?> + + + + + + + + + + servers as $server) { + $disks = json_decode($server['server_disks'], true); + $totalDiskSpace = 0; + if (is_array($disks)) { + foreach ($disks as $disk) { + $totalDiskSpace += $disk['disk_space']; + } + + } + + if (is_null($server['server_vm_host_name'])) { + $hostname = $server['server_hostname']; + } else { + $hostname = $server['server_vm_host_name']; + } + + $mem = isset($server['server_memory']) ? (float)$server['server_memory'] : 0; + $demand = isset($server['server_memory_demand']) ? (float)$server['server_memory_demand'] : 0; + + if ($mem == 0 && $demand == 0) { + $mem_assigned = 'N/A'; + } else { + $mem_assigned = $this->cleanNumber($mem) . "M"; + } + + $mem_demand_text_color = ''; + if ($mem > 0) { + $mem_percent = ($demand / $mem) * 100; + $mem_percent_numb = round($mem_percent, 1); + $mem_demand = round($mem_percent, 1) . "%"; // round to 1 decimal place + $mem_percent_sort = $mem_percent_numb; + + if ($mem_percent_numb <= 89) { + $mem_demand_text_color = 'success'; + } + if ($mem_percent_numb > 89) { + $mem_demand_text_color = 'secondary'; + } + if ($mem_percent_numb > 99) { + $mem_demand_text_color = 'danger'; + } + + } else { + $mem_demand = "N/A"; + $mem_percent_numb = 'N/A'; + $mem_percent_sort = -1; + } + + $ipv4_list = ''; + if (!empty($server['server_ipv4'])) { + $ips = json_decode($server['server_ipv4'], true); + if (is_array($ips)) { + $ipv4_list = implode(', ', $ips); + } + } + + $ipv6_list = ''; + if (!empty($server['server_ipv6'])) { + $ips = json_decode($server['server_ipv6'], true); + if (is_array($ips)) { + $ipv6_list = implode(', ', $ips); + } + } + + $thisServerLicenses = []; + foreach ($this->allLicenseTypes as $licenseType) { + $thisServerLicenses[$licenseType] = false; + } + + if (!empty($server['server_licenses'])) { + $allLicenseTypesServer = json_decode($server['server_licenses'], true); + if (is_array($allLicenseTypesServer)) { + foreach ($allLicenseTypesServer as $licenseTypeServer) { + foreach ($licenseTypeServer as $licenseTypeServerKey => $licenseTypeServerValue) { + $thisServerLicenses[$licenseTypeServerKey] = true; + } + } + } + } + + $thisServerBackup = []; + foreach ($this->allBackupTypes as $BackupType) { + $thisServerBackup[$BackupType] = false; + } + + if (!empty($server['server_backup'])) { + $allBackupTypesServer = json_decode($server['server_backup'], true); + if (is_array($allBackupTypesServer)) { + foreach ($allBackupTypesServer as $BackupTypeServer) { + foreach ($BackupTypeServer as $BackupTypeServerKey => $BackupTypeServerValue) { + $thisServerBackup[$BackupTypeServerKey] = true; + } + } + } + } + + if ($this->showCompanies) { + $company_name = ''; + if (strlen($server['company_name']) > 0) { + $company_name = $server['company_name']; + } + } + + $server_state_color = returnServerStateColor($server['server_state']); + + ?> + + + + + showCompanies) { ?> + + + + + + + + + + + + + + + allLicenseTypes as $licenseType) { ?> + + allBackupTypes as $BackupType) { ?> + + + + + + + + +
+ + + + + + + + + + + +
+ + + + + + + + + + + 0) { + $sizes = array_column($disks, 'disk_space'); + $totalDiskSpace = array_sum($sizes); + + if ($totalDiskSpace > 0) { + $sortValue = $totalDiskSpace; + $filterValue = $totalDiskSpace; + } + } + ?> + data-sort="" data-filter=""> + + + + + + + + + + ' : '' ?>' : '' ?> + '; + } elseif ($server['server_power_state'] == 'Running') { + echo ''; + } ?> + + + + +
+
+
+
+
+ +