Cache agent metrics for polling

This commit is contained in:
root
2026-01-31 17:35:19 +02:00
parent 748d6c56f8
commit 9100d5b031

View File

@@ -5,6 +5,7 @@ declare(strict_types=1);
namespace App\Services\Agent; namespace App\Services\Agent;
use Exception; use Exception;
use Illuminate\Support\Facades\Cache;
class AgentClient class AgentClient
{ {
@@ -66,6 +67,20 @@ class AgentClient
return $decoded; return $decoded;
} }
/**
* Cache lightweight metrics to reduce socket churn on polling pages.
*/
private function cachedMetrics(string $key, int $seconds, callable $callback): array
{
if ($seconds <= 0) {
return $callback();
}
return Cache::remember($key, now()->addSeconds($seconds), function () use ($callback): array {
return $callback();
});
}
/** /**
* Recursively sanitize array values to ensure they are JSON-safe. * Recursively sanitize array values to ensure they are JSON-safe.
* Removes control characters (except newlines/tabs) from strings. * Removes control characters (except newlines/tabs) from strings.
@@ -1089,7 +1104,7 @@ class AgentClient
*/ */
public function metricsOverview(): array public function metricsOverview(): array
{ {
return $this->send('metrics.overview', []); return $this->cachedMetrics('agent.metrics.overview', 5, fn (): array => $this->send('metrics.overview', []));
} }
/** /**
@@ -1097,7 +1112,7 @@ class AgentClient
*/ */
public function metricsCpu(): array public function metricsCpu(): array
{ {
return $this->send('metrics.cpu', []); return $this->cachedMetrics('agent.metrics.cpu', 5, fn (): array => $this->send('metrics.cpu', []));
} }
/** /**
@@ -1105,7 +1120,7 @@ class AgentClient
*/ */
public function metricsMemory(): array public function metricsMemory(): array
{ {
return $this->send('metrics.memory', []); return $this->cachedMetrics('agent.metrics.memory', 5, fn (): array => $this->send('metrics.memory', []));
} }
/** /**
@@ -1113,7 +1128,7 @@ class AgentClient
*/ */
public function metricsDisk(): array public function metricsDisk(): array
{ {
return $this->send('metrics.disk', []); return $this->cachedMetrics('agent.metrics.disk', 10, fn (): array => $this->send('metrics.disk', []));
} }
/** /**
@@ -1121,7 +1136,7 @@ class AgentClient
*/ */
public function metricsNetwork(): array public function metricsNetwork(): array
{ {
return $this->send('metrics.network', []); return $this->cachedMetrics('agent.metrics.network', 5, fn (): array => $this->send('metrics.network', []));
} }
/** /**