From 7265ad3ed89d976c580bbb09933bd11abb9a4ee4 Mon Sep 17 00:00:00 2001 From: Chenx221 Date: Tue, 9 Apr 2024 19:01:44 +0800 Subject: [PATCH] =?UTF-8?q?=E7=B3=BB=E7=BB=9F=E4=BF=A1=E6=81=AF=E5=8A=9F?= =?UTF-8?q?=E8=83=BD=20=E5=90=8E=E7=AB=AF(1/3)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- controllers/AdminController.php | 88 +++++++++++++++++++++++++++++++++ 1 file changed, 88 insertions(+) diff --git a/controllers/AdminController.php b/controllers/AdminController.php index 50042b8..e3a7d3e 100644 --- a/controllers/AdminController.php +++ b/controllers/AdminController.php @@ -14,6 +14,7 @@ use app\models\User; use app\models\UserSearch; use app\utils\AdminSword; use app\utils\FileSizeHelper; +use DateTime; use OTPHP\TOTP; use RuntimeException; use Throwable; @@ -588,4 +589,91 @@ class AdminController extends Controller return $this->render('sysinfo'); } + /** + * Get server status + * 只兼容Windows和Linux + * other不考虑 + * @return void + */ + public function actionGetServerStatus(): void + { + //需要收集的信息 + //hostname + //os + //cpu + //memory + //server time + //server uptime + //is windows? + //server load + //server cpu usage + //server memory usage + //server swap usage + //storage data drive + //file system + //drive size + //drive used & free + //dns server + //gateway + //network interface(status,speed,ipv4v6 address) + //All users number + //active users number(24h) + //share number,collection number + //php version,memory limit,max execution time,max upload size,max post size,extension + //database type,version,size + + //get server hostname + $hostname = php_uname('n'); + //get os + $os = php_uname('s') . ' ' . php_uname('r') . ' ' . php_uname('v') . ' ' . php_uname('m'); + // is windows? + $is_windows = stripos($os, 'windows') !== false; + if ($is_windows) { + //get cpu model for windows + $cpu = implode("\n", array_slice(explode("\n", trim(shell_exec('wmic cpu get name'))), 1)) . ' (' . implode("\n", array_slice(explode("\n", trim(shell_exec('wmic cpu get NumberOfCores'))), 1)) . ' cores)'; + //get memory for windows + $memory_str = shell_exec('wmic MEMORYCHIP get Capacity'); + $memoryLines = explode("\n", trim($memory_str)); + unset($memoryLines[0]); + $totalMemory = 0; + foreach ($memoryLines as $mem) { + $totalMemory += intval($mem); + } + $memory = FileSizeHelper::formatBytes($totalMemory); + //get server uptime for windows + $uptime = shell_exec('net statistics workstation | find "Statistics since"'); + $uptime = explode("since", $uptime, 2)[1]; + $bootTime = DateTime::createFromFormat('m/d/Y H:i:s A', trim($uptime)); + $now = new DateTime(); + $interval = $bootTime->diff($now); + echo $interval->format('%a days %h hours %i minutes %s seconds'); + //get server cpu usage for windows + $cpu_usage = implode("\n", array_slice(explode("\n", trim(shell_exec('wmic cpu get loadpercentage'))), 1)); + if($cpu_usage === '') { + $cpu_usage = '0'; + } + //get server memory usage for windows +// $memory_usage = shell_exec('wmic OS get FreePhysicalMemory,TotalVisibleMemorySize /Value'); + //TODO + } else { + //get cpu model + $cpu = shell_exec('cat /proc/cpuinfo | grep "model name" | uniq | awk -F": " \'{print $2}\''); + //get memory + $memory_kb = intval(shell_exec("grep MemTotal /proc/meminfo | awk '{print $2}'")); + $memory = FileSizeHelper::formatBytes($memory_kb * 1024); + //get server uptime + $uptime = str_replace("up ", "", trim(shell_exec('uptime -p'))); + //get server cpu usage + $cpu_usage = shell_exec('top -bn1 | grep "Cpu(s)" | sed "s/.*, *\([0-9.]*\)%* id.*/\1/" | awk \'{print 100 - $1"%"}\''); + } + //get server time + $server_time = date('Y-m-d H:i:s T'); + //get server load (only for linux) + $load = $is_windows ? null : sys_getloadavg(); + + + + + + } }