update change port

This commit is contained in:
pbao9
2026-01-17 11:27:54 +07:00
parent a79f0041f4
commit 4f2fdbaaa5
14 changed files with 70 additions and 147 deletions
@@ -73,31 +73,21 @@ class ChangeRemotePortJob implements ShouldQueue
throw new \RuntimeException('SSH runner login failed.');
}
if (is_string($result)) {
// Script trả non-JSON → bắn lỗi kèm raw để debug
throw new \RuntimeException('Script returned non-JSON output: ' . $result);
}
/**
* Chuẩn hoá $row:
* - Script 1-VM: trả 1 object: ['vm'=>.., 'status'=>.., 'message'=>.., 'newPort'=>..]
* - (Phòng hờ) Nếu lỡ trả array nhiều item, chọn item có 'vm' trùng $vmName, không thì lấy phần tử đầu.
*/
$row = null;
if (is_array($result)) {
// case: object đơn
if (isset($result['vm']) && isset($result['status'])) {
$row = $result;
} else {
// case: mảng các object
// Tìm theo vmName
foreach ($result as $it) {
if (is_array($it) && (($it['vm'] ?? null) === $vmName)) {
$row = $it;
break;
}
}
// fallback: phần tử đầu tiên nếu chưa có
if ($row === null && isset($result[0]) && is_array($result[0])) {
$row = $result[0];
}
@@ -109,33 +99,23 @@ class ChangeRemotePortJob implements ShouldQueue
throw new \RuntimeException('Invalid script response.');
}
// Đọc trường returned
$status = strtolower((string) ($row['status'] ?? ''));
$message = (string) ($row['message'] ?? '');
$newPort = (string) ($row['newPort'] ?? $this->newPort);
// Xét thành công: status === 'ok'
$ok = ($status === 'ok');
Log::info('ChangeRemotePortJob: script result', [
'vm' => $vmName,
'status' => $status,
'message' => $message,
'newPort' => $newPort,
'raw' => $row,
ModuleVmware::where('id', $product->id)->update([
'port' => (int) $newPort,
'updated_at' => now(),
]);
if (!$ok) {
// Nếu muốn cho phép 'warning' pass, có thể đổi điều kiện ở trên hoặc thêm nhánh dưới:
// if ($status === 'warning' && str_contains(strtolower($message), 'rdp port is now')) { $ok = true; }
throw new \RuntimeException($message !== '' ? $message : ('Change RDP port failed with status: ' . $status));
}
// Gửi mail thông báo
Mail::to($this->email)->send(
new ChangePortRemote(vmName: $vmName, newPort: (string) $newPort)
);
Log::info('ChangeRemotePortJob: success', ['vm' => $vmName, 'newPort' => $newPort]);
}
}