Files
2026-10-17 13:04:35 +07:00

108 lines
3.9 KiB
PHP

<?php
namespace App\Http\Controllers\Api\Service;
use App\Http\Controllers\Api\Service\Concerns\ResolvesVm;
use App\Http\Controllers\Controller;
use App\Http\Services\vCenter;
use App\Models\ModuleVmware;
use App\Services\ActivityLogger;
use Illuminate\Http\JsonResponse;
use Illuminate\Support\Facades\Cache;
use App\Http\Controllers\Api\Service\Concerns\ManagesVmPower;
use App\Http\Controllers\Api\Service\Concerns\ManagesVmNetwork;
use App\Http\Controllers\Api\Service\Concerns\ManagesVmAccess;
use App\Http\Controllers\Api\Service\Concerns\ManagesVmMetrics;
class VmController extends Controller
{
use ResolvesVm;
use ManagesVmPower;
use ManagesVmNetwork;
use ManagesVmAccess;
use ManagesVmMetrics;
public function __construct(protected ActivityLogger $activityLogger) {}
// -------------------------------------------------------------------------
// Power ON
// -------------------------------------------------------------------------
// -------------------------------------------------------------------------
// Power OFF
// -------------------------------------------------------------------------
// -------------------------------------------------------------------------
// Change IP
// -------------------------------------------------------------------------
// -------------------------------------------------------------------------
// Change Port (RDP)
// -------------------------------------------------------------------------
// -------------------------------------------------------------------------
// Console Ticket
// -------------------------------------------------------------------------
// -------------------------------------------------------------------------
// Restart VM
// -------------------------------------------------------------------------
// -------------------------------------------------------------------------
// Change Password
// -------------------------------------------------------------------------
// -------------------------------------------------------------------------
// Power State
// -------------------------------------------------------------------------
// -------------------------------------------------------------------------
// Shared helpers
// -------------------------------------------------------------------------
/** Try to acquire a per-VM operation lock. Returns null if already locked. */
private function acquireVmLock(ModuleVmware $vm, int $ttl = 60): ?\Illuminate\Contracts\Cache\Lock
{
$lock = Cache::lock("vm_op:{$vm->id}", $ttl);
return $lock->get() ? $lock : null;
}
private function vmLocked(): JsonResponse
{
return response()->json([
'success' => false,
'message' => 'VM đang có thao tác đang xử lý, vui lòng chờ rồi thử lại.',
], 429);
}
/**
* Normalise the array|string return value from Power ON/OFF actions.
*/
private function vmResponse(array|string $result, string $successMessage): JsonResponse
{
if ($result === 'Login_Again') {
return response()->json([
'success' => false,
'message' => 'Không thể đăng nhập vào vCenter.',
], 400);
}
if (is_string($result)) {
return response()->json(['success' => false, 'message' => $result], 400);
}
if ($result['error'] ?? true) {
return response()->json([
'success' => false,
'message' => $result['data'] ?? 'Thao tác thất bại.',
'data' => $result,
], 400);
}
return response()->json([
'success' => true,
'message' => $successMessage,
'data' => $result['data'] ?? 'success',
]);
}
}