update
This commit is contained in:
@@ -661,6 +661,77 @@ class VCenterManagerController extends Controller
|
||||
], 400);
|
||||
}
|
||||
|
||||
public function stats(Request $request)
|
||||
{
|
||||
$vmId = (int) $request->input('vm_id');
|
||||
|
||||
$vm = VirtualMachines::find($vmId);
|
||||
|
||||
if (!$vm) {
|
||||
return response()->json(['error' => true, 'message' => 'VM not found'], 404);
|
||||
}
|
||||
|
||||
$vmwareId = $vm->vm_id;
|
||||
|
||||
if (!$vmwareId) {
|
||||
return response()->json(['error' => true, 'message' => 'VM VMware ID not found'], 400);
|
||||
}
|
||||
|
||||
if ($vm->power_state !== 'POWERED_ON') {
|
||||
return response()->json(['error' => true, 'message' => 'VM is not powered on'], 400);
|
||||
}
|
||||
|
||||
$vcenter = $vm->datacenter?->vCenter ?? $vm->host?->datacenter?->vCenter;
|
||||
|
||||
if (!$vcenter) {
|
||||
return response()->json(['error' => true, 'message' => 'vCenter not found'], 400);
|
||||
}
|
||||
|
||||
$vCenterService = new \App\Http\Services\vCenter();
|
||||
|
||||
if (!$vCenterService->loginServer($vcenter)) {
|
||||
return response()->json(['error' => true, 'message' => 'Cannot login to vCenter'], 400);
|
||||
}
|
||||
|
||||
$result = $vCenterService->GetVMStats($vmwareId);
|
||||
|
||||
if ($result['error'] ?? true) {
|
||||
return response()->json([
|
||||
'error' => true,
|
||||
'message' => $result['message'] ?? 'Failed to fetch VM stats',
|
||||
], 400);
|
||||
}
|
||||
|
||||
$stats = $result['data'];
|
||||
$cpuPercent = $stats['cpu']['used_percent'] ?? 0;
|
||||
$memPercent = $stats['memory']['usage_percent'] ?? 0;
|
||||
|
||||
// ponytail: overall_status is a CPU/RAM usage threshold heuristic, not real vCenter
|
||||
// health/alarms — that needs the SOAP EventManager/AlarmManager, not wired up in this
|
||||
// codebase (REST Automation API only). Upgrade path: add a SOAP client and read
|
||||
// triggeredAlarmState off the VM's ManagedEntity if per-alarm detail is ever needed.
|
||||
$overallStatus = match (true) {
|
||||
$cpuPercent >= 90 || $memPercent >= 90 => 'red',
|
||||
$cpuPercent >= 75 || $memPercent >= 75 => 'yellow',
|
||||
default => 'green',
|
||||
};
|
||||
|
||||
return response()->json([
|
||||
'error' => false,
|
||||
'data' => [
|
||||
'overall_status' => $overallStatus,
|
||||
'cpu_usage_percent' => round($cpuPercent, 1),
|
||||
'mem_usage_percent' => round($memPercent, 1),
|
||||
'mem_usage_mb' => $stats['memory']['used_MiB'] ?? 0,
|
||||
'mem_total_mb' => $stats['memory']['size_MiB'] ?? 0,
|
||||
// ponytail: no uptime source wired up (would need SOAP PerfManager
|
||||
// sys.uptime.latest); frontend renders "—" when null.
|
||||
'uptime_seconds' => null,
|
||||
'alarms' => [],
|
||||
],
|
||||
]);
|
||||
}
|
||||
|
||||
public function getPoweredOffVms()
|
||||
{
|
||||
$vms = VirtualMachines::whereNotNull('vm_id')
|
||||
|
||||
Reference in New Issue
Block a user