diff --git a/extensions/Servers/Proxmox/Livewire/Server.php b/extensions/Servers/Proxmox/Livewire/Server.php
index 6a0f0876f..52b688bf6 100644
--- a/extensions/Servers/Proxmox/Livewire/Server.php
+++ b/extensions/Servers/Proxmox/Livewire/Server.php
@@ -3,7 +3,9 @@
namespace Paymenter\Extensions\Servers\Proxmox\Livewire;
use Paymenter\Extensions\Servers\Proxmox\Models\Server as ServerModel;
+use Paymenter\Extensions\Servers\Proxmox\Models\ServerStatistics;
use Carbon\Carbon;
+use Illuminate\Support\Facades\Cache;
class Server extends Component
{
@@ -40,6 +42,58 @@ class Server extends Component
return round($totalBytes / (1024 * 1024 * 1024), 2);
}
+ public function getBandwidthThreshold95Property()
+ {
+ // Cache for 15 minutes to avoid recalculating for every server
+ return Cache::remember('bandwidth_threshold_95_' . Carbon::now()->format('Y-m'), 15, function () {
+ $startOfMonth = Carbon::now()->startOfMonth();
+
+ // Get all servers
+ $allServers = ServerModel::all();
+
+ if ($allServers->isEmpty()) {
+ return 0;
+ }
+
+ $totalTraffic = 0;
+ $serverCount = 0;
+
+ foreach ($allServers as $server) {
+ // Get the earliest and latest statistics for this month for each server
+ $firstStat = ServerStatistics::where('server_id', $server->id)
+ ->where('DateTime', '>=', $startOfMonth)
+ ->orderBy('DateTime', 'asc')
+ ->first();
+
+ $latestStat = ServerStatistics::where('server_id', $server->id)
+ ->where('DateTime', '>=', $startOfMonth)
+ ->orderBy('DateTime', 'desc')
+ ->first();
+
+ if ($firstStat && $latestStat) {
+ // Calculate total traffic (in + out) for the month
+ $netinDiff = max(0, $latestStat->netin - $firstStat->netin);
+ $netoutDiff = max(0, $latestStat->netout - $firstStat->netout);
+ $totalBytes = $netinDiff + $netoutDiff;
+
+ // Convert to GiB and add to total
+ $totalTraffic += $totalBytes / (1024 * 1024 * 1024);
+ $serverCount++;
+ }
+ }
+
+ if ($serverCount === 0) {
+ return 0;
+ }
+
+ // Calculate average bandwidth across all servers
+ $averageBandwidth = $totalTraffic / $serverCount;
+
+ // Return 95% of average
+ return round($averageBandwidth * 0.95, 2);
+ });
+ }
+
public function render()
{
return view('proxmox::server');
diff --git a/extensions/Servers/Proxmox/views/server.blade.php b/extensions/Servers/Proxmox/views/server.blade.php
index ff5b86f7c..dbeb7a071 100644
--- a/extensions/Servers/Proxmox/views/server.blade.php
+++ b/extensions/Servers/Proxmox/views/server.blade.php
@@ -119,9 +119,11 @@
Bandwidth
- {{ $this->monthlyTraffic }} GiB this month
+
+ {{ $this->monthlyTraffic }} GiB / {{ $this->bandwidthThreshold95 }} GiB (95%)
+
- Connection reduced to 1 MiB/s if account's data usage exceeds network's 95% threshold.
+ Connection reduced to 1 MiB/s if usage exceeds the 95% threshold.