系统信息功能 后端(1/3)
This commit is contained in:
parent
e1f07d922e
commit
7265ad3ed8
@ -14,6 +14,7 @@ use app\models\User;
|
|||||||
use app\models\UserSearch;
|
use app\models\UserSearch;
|
||||||
use app\utils\AdminSword;
|
use app\utils\AdminSword;
|
||||||
use app\utils\FileSizeHelper;
|
use app\utils\FileSizeHelper;
|
||||||
|
use DateTime;
|
||||||
use OTPHP\TOTP;
|
use OTPHP\TOTP;
|
||||||
use RuntimeException;
|
use RuntimeException;
|
||||||
use Throwable;
|
use Throwable;
|
||||||
@ -588,4 +589,91 @@ class AdminController extends Controller
|
|||||||
return $this->render('sysinfo');
|
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();
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user