query($memoryTotalQuery); $memoryTotal = $memoryTotalResult['data']['result'][0]['value'][1] ?? 0; // 获取已用内存 $memoryAvailableQuery = 'node_memory_MemAvailable_bytes'; $memoryAvailableResult = $prometheus->query($memoryAvailableQuery); $memoryAvailable = $memoryAvailableResult['data']['result'][0]['value'][1] ?? 0; $memoryUsed = $memoryTotal - $memoryAvailable; $memoryDisplay = round($memoryUsed / (1024 * 1024 * 1024), 2) . ' GB / ' . round($memoryTotal / (1024 * 1024 * 1024), 2) . ' GB'; // 获取硬盘总量 $diskTotalQuery = 'node_filesystem_size_bytes{fstype!="rootfs",fstype!="tmpfs",fstype!="squashfs",mountpoint=~"/|/home|/boot"}'; $diskTotalResult = $prometheus->query($diskTotalQuery); $diskTotal = array_sum(array_map(function ($item) { return $item['value'][1] ?? 0; }, $diskTotalResult['data']['result'])); // 获取已用硬盘 $diskFreeQuery = 'node_filesystem_free_bytes{fstype!="rootfs",fstype!="tmpfs",fstype!="squashfs",mountpoint=~"/|/home|/boot"}'; $diskFreeResult = $prometheus->query($diskFreeQuery); $diskFree = array_sum(array_map(function ($item) { return $item['value'][1] ?? 0; }, $diskFreeResult['data']['result'])); $diskUsed = $diskTotal - $diskFree; $diskDisplay = round($diskUsed / (1024 * 1024 * 1024), 2) . ' GB / ' . round($diskTotal / (1024 * 1024 * 1024), 2) . ' GB'; // 获取系统启动时间 $uptimeQuery = 'node_boot_time_seconds'; $uptimeResult = $prometheus->query($uptimeQuery); $bootTime = $uptimeResult['data']['result'][0]['value'][1] ?? 0; $uptime = now()->timestamp - $bootTime; $uptimeDisplay = gmdate('H:i:s', $uptime); // 获取CPU核心数量 $cpuCoresQuery = 'count(node_cpu_seconds_total{mode="system"})'; $cpuCoresResult = $prometheus->query($cpuCoresQuery); $cpuCores = $cpuCoresResult['data']['result'][0]['value'][1] ?? 0; return [ BaseWidget\Stat::make('内存占用', $memoryDisplay), BaseWidget\Stat::make('硬盘占用', $diskDisplay), BaseWidget\Stat::make('系统运行时间', $uptimeDisplay), BaseWidget\Stat::make('CPU核心数量', $cpuCores) ]; } protected function getPollingInterval(): ?string { return "1s"; } }