Enhance resource management in Proxmox: implement caching for available resources in Node model; add cache invalidation on server updates and deletions
This commit is contained in:
@@ -3,6 +3,7 @@
|
||||
namespace Paymenter\Extensions\Servers\Proxmox\Models;
|
||||
|
||||
use Illuminate\Database\Eloquent\Model;
|
||||
use Illuminate\Support\Facades\Cache;
|
||||
|
||||
class Node extends Model
|
||||
{
|
||||
@@ -56,25 +57,33 @@ class Node extends Model
|
||||
|
||||
public function resourcesAvailable()
|
||||
{
|
||||
$servers = $this->servers()->with('service.product')->get();
|
||||
return Cache::remember('proxmox-node-resources-' . $this->id, 30, function () {
|
||||
$servers = $this->servers()->with('service.product.settings')->get();
|
||||
|
||||
$totalMemory = $this->memory;
|
||||
$totalDisk = $this->disk;
|
||||
$totalCpu = $this->cpu;
|
||||
$usedMemory = 0;
|
||||
$usedDisk = 0;
|
||||
$usedCpu = 0;
|
||||
foreach ($servers as $server) {
|
||||
$usedMemory += (int) ($server->service->product->settings()->where('key', 'memory')->first()?->value ?? 0);
|
||||
$usedDisk += (int) ($server->service->product->settings()->where('key', 'disk')->first()?->value ?? 0);
|
||||
$usedCpu += (int) ($server->service->product->settings()->where('key', 'cpu')->first()?->value ?? 0);
|
||||
}
|
||||
$totalMemory = $this->memory;
|
||||
$totalDisk = $this->disk;
|
||||
$totalCpu = $this->cpu;
|
||||
$usedMemory = 0;
|
||||
$usedDisk = 0;
|
||||
$usedCpu = 0;
|
||||
foreach ($servers as $server) {
|
||||
$productSettings = $server->service->product->settings->keyBy('key');
|
||||
$usedMemory += (int) ($productSettings->get('memory')?->value ?? 0);
|
||||
$usedDisk += (int) ($productSettings->get('disk')?->value ?? 0);
|
||||
$usedCpu += (int) ($productSettings->get('cpu')?->value ?? 0);
|
||||
}
|
||||
|
||||
return [
|
||||
'memory' => $totalMemory == 0 ? null : $totalMemory - $usedMemory,
|
||||
'disk' => $totalDisk == 0 ? null : $totalDisk - $usedDisk,
|
||||
'cpu' => $totalCpu == 0 ? null : $totalCpu - $usedCpu,
|
||||
];
|
||||
return [
|
||||
'memory' => $totalMemory == 0 ? null : $totalMemory - $usedMemory,
|
||||
'disk' => $totalDisk == 0 ? null : $totalDisk - $usedDisk,
|
||||
'cpu' => $totalCpu == 0 ? null : $totalCpu - $usedCpu,
|
||||
];
|
||||
});
|
||||
}
|
||||
|
||||
public function forgetResourceCache(): void
|
||||
{
|
||||
Cache::forget('proxmox-node-resources-' . $this->id);
|
||||
}
|
||||
|
||||
public function canStoreServer($memory, $disk, $cpu)
|
||||
|
||||
Reference in New Issue
Block a user