Skip to content

Commit 25f18dc

Browse files
authored
Merge pull request pterodactyl#1903 from matthewpi/enhancement/wings-improved-server-loading
[Wings] Improved Server Loading
2 parents c8a78c6 + 658a959 commit 25f18dc

File tree

5 files changed

+70
-2
lines changed

5 files changed

+70
-2
lines changed

app/Contracts/Repository/ServerRepositoryInterface.php

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -171,4 +171,16 @@ public function getSuspendedServersCount(): int;
171171
* @return \Illuminate\Contracts\Pagination\LengthAwarePaginator
172172
*/
173173
public function loadAllServersForNode(int $node, int $limit): LengthAwarePaginator;
174+
175+
/**
176+
* Returns every server that exists for a given node.
177+
*
178+
* This is different from {@see loadAllServersForNode} because
179+
* it does not paginate the response.
180+
*
181+
* @param int $node
182+
*
183+
* @return \Illuminate\Database\Eloquent\Builder[]|\Illuminate\Database\Eloquent\Collection
184+
*/
185+
public function loadEveryServerForNode(int $node);
174186
}

app/Http/Controllers/Api/Remote/Servers/ServerDetailsController.php

Lines changed: 36 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55
use Illuminate\Http\Request;
66
use Illuminate\Http\JsonResponse;
77
use Pterodactyl\Http\Controllers\Controller;
8+
use Pterodactyl\Repositories\Eloquent\NodeRepository;
89
use Pterodactyl\Services\Eggs\EggConfigurationService;
910
use Pterodactyl\Repositories\Eloquent\ServerRepository;
1011
use Pterodactyl\Services\Servers\ServerConfigurationStructureService;
@@ -26,21 +27,29 @@ class ServerDetailsController extends Controller
2627
*/
2728
private $configurationStructureService;
2829

30+
/**
31+
* @var \Pterodactyl\Repositories\Eloquent\NodeRepository
32+
*/
33+
private $nodeRepository;
34+
2935
/**
3036
* ServerConfigurationController constructor.
3137
*
3238
* @param \Pterodactyl\Repositories\Eloquent\ServerRepository $repository
3339
* @param \Pterodactyl\Services\Servers\ServerConfigurationStructureService $configurationStructureService
3440
* @param \Pterodactyl\Services\Eggs\EggConfigurationService $eggConfigurationService
41+
* @param \Pterodactyl\Repositories\Eloquent\NodeRepository $nodeRepository
3542
*/
3643
public function __construct(
3744
ServerRepository $repository,
3845
ServerConfigurationStructureService $configurationStructureService,
39-
EggConfigurationService $eggConfigurationService
46+
EggConfigurationService $eggConfigurationService,
47+
NodeRepository $nodeRepository
4048
) {
4149
$this->eggConfigurationService = $eggConfigurationService;
4250
$this->repository = $repository;
4351
$this->configurationStructureService = $configurationStructureService;
52+
$this->nodeRepository = $nodeRepository;
4453
}
4554

4655
/**
@@ -62,4 +71,30 @@ public function __invoke(Request $request, $uuid)
6271
'process_configuration' => $this->eggConfigurationService->handle($server),
6372
]);
6473
}
74+
75+
/**
76+
* Lists all servers with their configurations that are assigned to the requesting node.
77+
*
78+
* @param \Illuminate\Http\Request $request
79+
*
80+
* @return \Illuminate\Http\JsonResponse
81+
*
82+
* @throws \Pterodactyl\Exceptions\Repository\RecordNotFoundException
83+
*/
84+
public function list(Request $request)
85+
{
86+
$node = $request->attributes->get('node');
87+
$servers = $this->repository->loadEveryServerForNode($node->id);
88+
89+
$configurations = [];
90+
91+
foreach ($servers as $server) {
92+
$configurations[$server->uuid] = [
93+
'settings' => $this->configurationStructureService->handle($server),
94+
'process_configuration' => $this->eggConfigurationService->handle($server),
95+
];
96+
}
97+
98+
return JsonResponse::create($configurations);
99+
}
65100
}

app/Http/Middleware/Api/Daemon/DaemonAuthenticate.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -69,7 +69,7 @@ public function handle(Request $request, Closure $next)
6969
// Ensure that all of the correct parts are provided in the header.
7070
if (count($parts) !== 2 || empty($parts[0]) || empty($parts[1])) {
7171
throw new BadRequestHttpException(
72-
'The Authorization headed provided was not in a valid format.',
72+
'The Authorization headed provided was not in a valid format.'
7373
);
7474
}
7575

app/Repositories/Eloquent/ServerRepository.php

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -378,4 +378,22 @@ public function loadAllServersForNode(int $node, int $limit): LengthAwarePaginat
378378
->where('node_id', '=', $node)
379379
->paginate($limit);
380380
}
381+
382+
/**
383+
* Returns every server that exists for a given node.
384+
*
385+
* This is different from {@see loadAllServersForNode} because
386+
* it does not paginate the response.
387+
*
388+
* @param int $node
389+
*
390+
* @return \Illuminate\Database\Eloquent\Builder[]|\Illuminate\Database\Eloquent\Collection
391+
*/
392+
public function loadEveryServerForNode(int $node)
393+
{
394+
return $this->getBuilder()
395+
->with('nest')
396+
->where('node_id', '=', $node)
397+
->get();
398+
}
381399
}

routes/api-remote.php

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,9 @@
77

88
// Routes for the Wings daemon.
99
Route::post('/sftp/auth', 'SftpAuthenticationController');
10+
11+
Route::get('/servers', 'Servers\ServerDetailsController@list');
12+
1013
Route::group(['prefix' => '/servers/{uuid}'], function () {
1114
Route::get('/', 'Servers\ServerDetailsController');
1215
Route::get('/install', 'Servers\ServerInstallController@index');

0 commit comments

Comments
 (0)