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.
@if($networkAnalysis['lastUpdated'])Streaming · Last updated {{ \Carbon\Carbon::parse($networkAnalysis['lastUpdated'])->diffForHumans() }}
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