The Statistics page provides comprehensive monitoring and analysis tools for your virtual machine's performance. This page includes real-time telemetry graphs, historical data snapshots, task execution history, lifecycle events tracking, and comparison tools to help you understand your server's behavior over time.
Live Telemetry: Four interactive performance graphs display real-time data from the Proxmox RRD API, including Processor Utilization, Network Traffic, Memory Utilization, and Storage I/O.
Statistics History: View historical performance snapshots in a sortable and filterable table.
Task History: Monitor all executed tasks with detailed execution logs.
Lifecycle Events: Track critical state changes and operations.
|
Date & Time
|
Status
|
CPU
|
Memory
|
Disk
|
Network In
|
Network Out
|
Disk I/O
|
Uptime
|
Actions |
|---|---|---|---|---|---|---|---|---|---|
|
{{ $stat->DateTime->format('M d, Y') }}
{{ $stat->DateTime->format('H:i:s') }}
|
@if($stat->vmstatus) {{ ucfirst($stat->vmstatus) }} @else - @endif |
|
|
@if(($stat->diskmax ?? 0) > 0 && ($stat->diskused ?? 0) > 0)
|
{{ Illuminate\Support\Number::fileSize(bytes: (int)$networkStats['netin_rate']) }}/s
@endif
|
{{ Illuminate\Support\Number::fileSize(bytes: (int)$networkStats['netout_rate']) }}/s
@endif
|
|
@if($stat->uptime > 0) {{ $this->formatUptime($stat->uptime) }} @else - @endif | |
|
No statistics available Statistics are collected every 5 minutes automatically. |
|||||||||
|
Type
|
Status
|
Start Time
|
End Time
|
Duration
|
|
|---|---|---|---|---|---|
| {{ $task['type'] ?? 'N/A' }} | @if(isset($task['status'])) @if($task['status'] === 'OK') Success @else Failure @endif @else - @endif |
@if($startTime)
{{ $startTime->format('M d, Y') }}
{{ $startTime->format('H:i:s') }}
@else
-
@endif
|
@if($endTime)
{{ $endTime->format('M d, Y') }}
{{ $endTime->format('H:i:s') }}
@else
-
@endif
|
@if($duration !== null) {{ $this->formatUptime($duration) }} @else - @endif | |
|
|||||
|
No task history available Task history will appear here as tasks are executed on the server. |
|||||
|
Type
|
Status
|
Start Time
|
End Time
|
Duration
|
|
|---|---|---|---|---|---|
| {{ $event['label'] ?? 'N/A' }} | @if(isset($event['status'])) @if(strtolower($event['status']) === 'ok') Success @elseif(strtolower($event['status']) === 'running') Running @else Failure @endif @else - @endif |
@if($startTime)
{{ $startTime->format('M d, Y') }}
{{ $startTime->format('H:i:s') }}
@else
-
@endif
|
@if($endTime)
{{ $endTime->format('M d, Y') }}
{{ $endTime->format('H:i:s') }}
@else
-
@endif
|
@if($duration !== null) {{ $this->formatUptime($duration) }} @else - @endif | |
|
|||||
|
No lifecycle events available Lifecycle events will appear here as operations are performed on the server. |
|||||
| Metric |
|
|
Change |
|---|---|---|---|
|
|
{{ number_format($diff['cpu']['historical_percent'], 1) }}% | {{ number_format($diff['cpu']['current_percent'], 1) }}% | {{ $diff['cpu']['percent_change'] > 0 ? '+' : '' }}{{ number_format($diff['cpu']['percent_change'], 1) }}% |
|
|
{{ number_format($diff['memory']['historical_percent'], 1) }}% | {{ number_format($diff['memory']['current_percent'], 1) }}% | {{ $diff['memory']['percent_change'] > 0 ? '+' : '' }}{{ number_format($diff['memory']['percent_change'], 1) }}% |
|
|
{{ $this->formatBytes($diff['disk_read']['historical_rate']) }}/s | {{ $this->formatBytes($diff['disk_read']['current_rate']) }}/s | {{ $diff['disk_read']['percent_change'] > 0 ? '+' : '' }}{{ number_format($diff['disk_read']['percent_change'], 1) }}% |
|
|
{{ $this->formatBytes($diff['disk_write']['historical_rate']) }}/s | {{ $this->formatBytes($diff['disk_write']['current_rate']) }}/s | {{ $diff['disk_write']['percent_change'] > 0 ? '+' : '' }}{{ number_format($diff['disk_write']['percent_change'], 1) }}% |
|
|
{{ $this->formatBytes($diff['network_in']['historical_rate']) }}/s | {{ $this->formatBytes($diff['network_in']['current_rate']) }}/s | {{ $diff['network_in']['percent_change'] > 0 ? '+' : '' }}{{ number_format($diff['network_in']['percent_change'], 1) }}% |
|
|
{{ $this->formatBytes($diff['network_out']['historical_rate']) }}/s | {{ $this->formatBytes($diff['network_out']['current_rate']) }}/s | {{ $diff['network_out']['percent_change'] > 0 ? '+' : '' }}{{ number_format($diff['network_out']['percent_change'], 1) }}% |
{{ $historicalComparison['message'] }}
@if(isset($historicalComparison['total_stats']))Total statistics in database: {{ $historicalComparison['total_stats'] }} @if($historicalComparison['total_stats'] == 0) - Statistics are collected automatically every hour. You can also create manual statistics using the "Create Statistics" button above. @elseif($historicalComparison['total_stats'] < 2) - At least 2 statistics are needed for comparison. Wait for more data to be collected or create a manual statistic. @endif
@endifNo comparison data available
Please select periods with available statistics data.
Deep visibility into firewall sessions, security threats, and top consumers of bandwidth powered by the Core Router API.
Fetching data from Core Router... reload page
{{ $networkAnalysis['error'] }}
Ensure the Core Router API credentials are configured in your environment.
|
Direction
|
Protocol
|
Source
|
Destination
|
State
|
Traffic
|
|---|---|---|---|---|---|
|
@php
$direction = $connection['direction'] ?? '—';
@endphp
@if($direction !== '—')
{{ $direction }}
@else
—
@endif
|
@php
$protocol = $connection['protocol'] ?? '—';
@endphp
@if($protocol !== '—')
{{ $protocol }}
@else
—
@endif
|
@php
$sourceIP = $connection['source'] ?? '—';
$isSourcePublic = $sourceIP !== '—' && $this->checkIsPublicIP($sourceIP);
@endphp
{{ $sourceIP }}
@if($isSourcePublic)
@if(isset($connection['source_port']))
{{ $connection['source_port'] }}
@endif
|
@php
$destIP = $connection['destination'] ?? '—';
$isDestPublic = $destIP !== '—' && $this->checkIsPublicIP($destIP);
@endphp
{{ $destIP }}
@if($isDestPublic)
@if(isset($connection['destination_port']))
{{ $connection['destination_port'] }}
@endif
|
@php
$state = $connection['state'] ?? '—';
@endphp
@if($state !== '—')
{{ $state }}
@else
—
@endif
|
{{ $connection['bytes_human'] ?? '—' }}
@if(isset($connection['packets']))
{{ number_format($connection['packets']) }} packets
@endif
|
|
Endpoint
|
Port
|
Connections
|
Traffic
|
|---|---|---|---|
|
@php
$isEndpointPublic = $endpointIP !== '—' && $this->checkIsPublicIP($endpointIP);
@endphp
{{ $endpointIP }}
@if($isEndpointPublic)
|
@if(isset($row['port']) && $row['port'] !== '—')
{{ $row['port'] }}
@else
—
@endif
|
{{ number_format($row['count']) }} |
{{ $row['bytes_human'] }}
{{ number_format($row['packets']) }} packets
|
|
Port
|
Connections
|
Traffic
|
|---|---|---|
|
{{ $row['port'] }}
|
{{ number_format($row['connections']) }} |
{{ $row['bytes_human'] }}
{{ number_format($row['packets']) }} packets
|
{{ $warning['threat'] }} @if(isset($warning['quantity']) && $warning['quantity'] > 1) ({{ $warning['quantity'] }} similar connection{{ $warning['quantity'] > 1 ? 's' : '' }} detected) @endif
@php $threatIP = $warning['ip'] ?? '—'; $isThreatPublic = $threatIP !== '—' && $this->checkIsPublicIP($threatIP); @endphp