Skip to content

Commit 9b46d59

Browse files
committed
Cache resource lookup results for 20 seconds for each server
1 parent c7375f0 commit 9b46d59

File tree

2 files changed

+19
-5
lines changed

2 files changed

+19
-5
lines changed

app/Http/Controllers/Api/Client/Servers/ResourceUtilizationController.php

Lines changed: 18 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,9 @@
22

33
namespace Pterodactyl\Http\Controllers\Api\Client\Servers;
44

5+
use Carbon\Carbon;
56
use Pterodactyl\Models\Server;
7+
use Illuminate\Cache\Repository;
68
use Pterodactyl\Transformers\Api\Client\StatsTransformer;
79
use Pterodactyl\Repositories\Wings\DaemonServerRepository;
810
use Pterodactyl\Http\Controllers\Api\Client\ClientApiController;
@@ -13,26 +15,38 @@ class ResourceUtilizationController extends ClientApiController
1315
/**
1416
* @var \Pterodactyl\Repositories\Wings\DaemonServerRepository
1517
*/
16-
private $repository;
18+
private DaemonServerRepository $repository;
19+
20+
/**
21+
* @var \Illuminate\Cache\Repository
22+
*/
23+
private Repository $cache;
1724

1825
/**
1926
* ResourceUtilizationController constructor.
2027
*/
21-
public function __construct(DaemonServerRepository $repository)
28+
public function __construct(Repository $cache, DaemonServerRepository $repository)
2229
{
2330
parent::__construct();
2431

32+
$this->cache = $cache;
2533
$this->repository = $repository;
2634
}
2735

2836
/**
29-
* Return the current resource utilization for a server.
37+
* Return the current resource utilization for a server. This value is cached for up to
38+
* 20 seconds at a time to ensure that repeated requests to this endpoint do not cause
39+
* a flood of unnecessary API calls.
3040
*
3141
* @throws \Pterodactyl\Exceptions\Http\Connection\DaemonConnectionException
3242
*/
3343
public function __invoke(GetServerRequest $request, Server $server): array
3444
{
35-
$stats = $this->repository->setServer($server)->getDetails();
45+
$stats = $this->cache
46+
->tags(['resources'])
47+
->remember($server->uuid, Carbon::now()->addSeconds(20), function () use ($server) {
48+
return $this->repository->setServer($server)->getDetails();
49+
});
3650

3751
return $this->fractal->item($stats)
3852
->transformWith($this->getTransformer(StatsTransformer::class))

resources/scripts/components/dashboard/ServerRow.tsx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -59,7 +59,7 @@ export default ({ server, className }: { server: Server; className?: string }) =
5959

6060
getStats().then(() => {
6161
// @ts-ignore
62-
interval.current = setInterval(() => getStats(), 20000);
62+
interval.current = setInterval(() => getStats(), 30000);
6363
});
6464

6565
return () => {

0 commit comments

Comments
 (0)