refactor: update firewall log display in Proxmox component to show raw log entries and improve error messaging for better clarity

This commit is contained in:
2025-12-01 17:00:37 -05:00
parent 944f53554b
commit 52cf6a6c85
2 changed files with 18 additions and 51 deletions

View File

@@ -851,17 +851,19 @@ class Firewall extends Component
$this->firewallLogs = [];
// Store raw log entries without parsing
foreach ($rawLogs as $logEntry) {
$logText = null;
if (is_string($logEntry)) {
$logText = trim($logEntry);
if (!empty($logText)) {
$this->firewallLogs[] = ['raw' => $logText];
}
} elseif (is_array($logEntry)) {
// Try common field names
// If it's an array, try to get the log text
$logText = $logEntry['n'] ?? $logEntry['t'] ?? $logEntry['text'] ?? $logEntry['log'] ?? $logEntry['message'] ?? $logEntry['line'] ?? '';
// If still empty, try to get the first string value
if (empty($logText)) {
// Try to get the first string value
foreach ($logEntry as $key => $value) {
if (is_string($value) && !empty(trim($value))) {
$logText = trim($value);
@@ -869,20 +871,15 @@ class Firewall extends Component
}
}
}
}
if (empty($logText)) {
continue;
}
$parsed = $this->parseFirewallLog($logText);
if ($parsed) {
$this->firewallLogs[] = $parsed;
if (!empty($logText)) {
$this->firewallLogs[] = ['raw' => $logText];
}
}
}
if (empty($this->firewallLogs) && !empty($rawLogs)) {
$this->logError = 'Logs received but could not be parsed. Please check that firewall logging is enabled in Proxmox.';
$this->logError = 'Logs received but could not be processed.';
} elseif (empty($this->firewallLogs)) {
$this->logError = 'No firewall logs available. Ensure firewall logging is enabled in Proxmox (Datacenter > Firewall > Options).';
}

View File

@@ -320,43 +320,13 @@
@if(count($firewallLogs) > 0)
<div class="overflow-x-auto">
<table class="w-full border-collapse">
<thead>
<tr class="border-b border-neutral">
<th class="text-left py-3 px-4 font-semibold text-sm">Timestamp</th>
<th class="text-left py-3 px-4 font-semibold text-sm">Action</th>
<th class="text-left py-3 px-4 font-semibold text-sm">Source</th>
<th class="text-left py-3 px-4 font-semibold text-sm">Destination</th>
<th class="text-left py-3 px-4 font-semibold text-sm">Protocol</th>
<th class="text-left py-3 px-4 font-semibold text-sm">Source Port</th>
<th class="text-left py-3 px-4 font-semibold text-sm">Dest Port</th>
<th class="text-left py-3 px-4 font-semibold text-sm">TTL</th>
<th class="text-left py-3 px-4 font-semibold text-sm">ACK</th>
</tr>
</thead>
<tbody>
@foreach($firewallLogs as $log)
<tr class="border-b border-neutral/20 hover:bg-background-secondary/50">
<td class="py-3 px-4 text-sm">{{ $log['timestamp'] ?? '-' }}</td>
<td class="py-3 px-4 text-sm">
<span class="px-2 py-1 rounded text-xs font-medium
{{ ($log['action'] ?? '') === 'ACCEPT' ? 'bg-success/20 text-success' : '' }}
{{ ($log['action'] ?? '') === 'REJECT' ? 'bg-warning/20 text-warning' : '' }}
{{ ($log['action'] ?? '') === 'DROP' ? 'bg-error/20 text-error' : '' }}">
{{ $log['action'] ?? '-' }}
</span>
</td>
<td class="py-3 px-4 text-sm"><code class="text-xs">{{ $log['source'] ?? '-' }}</code></td>
<td class="py-3 px-4 text-sm"><code class="text-xs">{{ $log['destination'] ?? '-' }}</code></td>
<td class="py-3 px-4 text-sm">{{ $log['proto'] ?? '-' }}</td>
<td class="py-3 px-4 text-sm">{{ $log['spt'] ?? '-' }}</td>
<td class="py-3 px-4 text-sm">{{ $log['dpt'] ?? '-' }}</td>
<td class="py-3 px-4 text-sm">{{ $log['ttl'] ?? '-' }}</td>
<td class="py-3 px-4 text-sm">{{ $log['ack'] ?? '-' }}</td>
</tr>
@endforeach
</tbody>
</table>
<div class="space-y-2">
@foreach($firewallLogs as $log)
<div class="bg-background-secondary border border-neutral/20 rounded-lg p-3">
<code class="text-xs text-base/90 whitespace-pre-wrap break-all font-mono">{{ $log['raw'] ?? '' }}</code>
</div>
@endforeach
</div>
</div>
@elseif(empty($logError))
<div class="text-center py-8 text-base/60">