22
33namespace Pterodactyl \Http \Controllers \Api \Client \Servers ;
44
5+ use Carbon \Carbon ;
56use Pterodactyl \Models \Server ;
7+ use Illuminate \Cache \Repository ;
68use Pterodactyl \Transformers \Api \Client \StatsTransformer ;
79use Pterodactyl \Repositories \Wings \DaemonServerRepository ;
810use 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))
0 commit comments