Private
Public Access
1
0

feat: Update Proxmox extension with various improvements and bug fixes

- Change listStates method to accept nullable integer for limit parameter.
- Modify TechnitiumDns class to return structured error messages on failure.
- Enhance VNC and xterm popup routes with user authorization checks.
- Update backups view to improve loading states and add unique keys for dynamic elements.
- Refactor cloud-init view to ensure proper data binding and improve user experience.
- Add wire:key attributes to various elements in views for better Livewire performance.
- Improve error handling and user feedback in the firewall view.
- Update server overview and statistics views to handle potential null values gracefully.
- Add new migration files to extend database schema with user-set icons and notes for Proxmox nodes.
This commit is contained in:
2026-02-23 17:23:01 -05:00
parent 9aff64be93
commit f394483daa
48 changed files with 442 additions and 268 deletions

View File

@@ -815,8 +815,8 @@
data-disk-io="{{ ($diskStats['diskread'] ?? 0) + ($diskStats['diskwrite'] ?? 0) }}"
data-uptime="{{ $stat->uptime ?? 0 }}">
<td class="py-3 px-4 text-sm whitespace-nowrap">
<div class="font-medium">{{ $stat->DateTime->format('M d, Y') }}</div>
<div class="text-xs text-base/60">{{ $stat->DateTime->format('H:i:s') }}</div>
<div class="font-medium">{{ $stat->DateTime?->format('M d, Y') ?? '-' }}</div>
<div class="text-xs text-base/60">{{ $stat->DateTime?->format('H:i:s') ?? '' }}</div>
</td>
<td class="py-3 px-4 text-sm whitespace-nowrap">
@if($stat->vmstatus)
@@ -895,7 +895,7 @@
<td class="py-3 px-4 text-sm whitespace-nowrap">
<button
x-data
@click="$dispatch('open-delete-stat-modal', { id: {{ $stat->id }}, date: '{{ $stat->DateTime->format('Y-m-d H:i:s') }}', cpu: '{{ number_format($stat->cpumax > 0 ? ($stat->cpuused / $stat->cpumax * 100) : 0, 2) }}', memory: '{{ number_format($stat->memorymax > 0 ? ($stat->memoryused / $stat->memorymax * 100) : 0, 2) }}', disk: '{{ number_format(($stat->diskmax ?? 0) > 0 ? (($stat->diskused ?? 0) / ($stat->diskmax ?? 1) * 100) : 0, 2) }}', status: '{{ $stat->vmstatus ?? '' }}' })"
@click="$dispatch('open-delete-stat-modal', { id: {{ $stat->id }}, date: '{{ $stat->DateTime?->format('Y-m-d H:i:s') ?? '' }}', cpu: '{{ number_format($stat->cpumax > 0 ? ($stat->cpuused / $stat->cpumax * 100) : 0, 2) }}', memory: '{{ number_format($stat->memorymax > 0 ? ($stat->memoryused / $stat->memorymax * 100) : 0, 2) }}', disk: '{{ number_format(($stat->diskmax ?? 0) > 0 ? (($stat->diskused ?? 0) / ($stat->diskmax ?? 1) * 100) : 0, 2) }}', status: '{{ $stat->vmstatus ?? '' }}' })"
class="p-1.5 text-danger hover:text-danger/80 hover:bg-danger/10 rounded transition-colors"
title="Delete statistics entry"
>
@@ -4467,14 +4467,19 @@
27019: 'MongoDB Config - MongoDB configuration server',
};
// Check for common port ranges
// Check for specific known port first
if (portDescriptions[port]) {
return portDescriptions[port];
}
// Then check for common port ranges
if (port >= 1024 && port <= 49151) {
return 'Registered/User Port - Port in the registered range, commonly used by applications';
} else if (port >= 49152 && port <= 65535) {
return 'Dynamic/Private Port - Ephemeral port range used for temporary connections';
}
return portDescriptions[port] || 'Unknown Port - No standard service associated with this port number';
return 'Unknown Port - No standard service associated with this port number';
};
window.formatBytes = function formatBytes(a, b) {
@@ -4750,7 +4755,7 @@
}
if (itemsToSort.length === 0) {
console.warn('No items to sort in table:', tableId, 'isNestedTbody:', isNestedTbody, 'mainTbody children:', mainTbody.children.length, 'directChildTbodies:', directChildTbodies.length);
console.warn('No items to sort in table:', tableId, 'mainTbody children:', mainTbody.children.length);
return;
}