Files
portal-api/app/Services/VmMetricsService.php
T
2026-10-17 13:04:35 +07:00

42 lines
1.8 KiB
PHP

<?php
namespace App\Services;
class VmMetricsService
{
public function __construct(private readonly PortalMonitorClient $portalMonitor)
{
}
public function get(string $vmwareId, ?int $memoryTotalMb = null, ?int $cpuCores = null): array
{
$stats = $this->portalMonitor->vmMetrics($vmwareId);
$storage = $this->portalMonitor->vmStorage($vmwareId);
$provisionedDiskBytes = collect($storage['disks'] ?? [])->sum(
fn ($disk) => is_array($disk) ? (int) ($disk['capacity_bytes'] ?? 0) : 0
);
$diskSummary = is_array($storage['summary'] ?? null) ? $storage['summary'] : [];
return [
'cpu_usage_percent' => $stats['cpu_usage_percent'] ?? null,
'cpu_cores' => $cpuCores,
'cpu_mhz' => $stats['cpu_mhz'] ?? null,
'cpu_ready_ms' => $stats['cpu_ready_ms'] ?? null,
'mem_usage_percent' => $stats['guest_memory_usage_percent'] ?? null,
'mem_usage_mb' => $stats['memory_active_mb'] ?? null,
'mem_consumed_mb' => $stats['memory_consumed_mb'] ?? null,
'mem_total_mb' => $memoryTotalMb,
'disk_read_bps' => $stats['disk_read_bps'] ?? null,
'disk_write_bps' => $stats['disk_write_bps'] ?? null,
'disk_latency_ms' => $stats['disk_latency_ms'] ?? null,
'disk_total_bytes' => $diskSummary['total_bytes'] ?? ($provisionedDiskBytes ?: null),
'disk_used_bytes' => $diskSummary['used_bytes'] ?? null,
'disk_usage_percent' => $diskSummary['usage_percent'] ?? null,
'network_rx_bps' => $stats['network_rx_bps'] ?? null,
'network_tx_bps' => $stats['network_tx_bps'] ?? null,
'timestamp' => $stats['timestamp'] ?? null,
'stale' => (bool) ($stats['stale'] ?? false),
];
}
}