mirror of
https://github.com/pelican-dev/panel.git
synced 2025-05-28 10:24:45 +02:00
Implement container statuses from wings
This commit is contained in:
parent
7df5f12c75
commit
5d2248ab1f
@ -27,12 +27,7 @@ class ListServers extends ListRecords
|
||||
return $server->status;
|
||||
}
|
||||
|
||||
$statuses = collect($server->retrieveStatus())
|
||||
->mapWithKeys(function ($status) {
|
||||
return [$status['configuration']['uuid'] => $status['state']];
|
||||
})->all();
|
||||
|
||||
return $statuses[$server->uuid] ?? 'node_fail';
|
||||
return $server->retrieveStatus() ?? 'node_fail';
|
||||
})
|
||||
->icon(fn ($state) => match ($state) {
|
||||
'node_fail' => 'tabler-server-off',
|
||||
|
@ -0,0 +1,23 @@
|
||||
<?php
|
||||
|
||||
namespace App\Http\Controllers\Api\Remote\Servers;
|
||||
|
||||
use Illuminate\Http\Request;
|
||||
use App\Models\Server;
|
||||
use Illuminate\Http\JsonResponse;
|
||||
use App\Http\Controllers\Controller;
|
||||
|
||||
class ServerContainersController extends Controller
|
||||
{
|
||||
/**
|
||||
* Updates the server container's status on the Panel
|
||||
*/
|
||||
public function status(Server $server, Request $request): JsonResponse
|
||||
{
|
||||
$status = fluent($request->json()->all())->get('data.new_state');
|
||||
|
||||
cache()->set("servers.$server->uuid.container.status", $status, now()->addMinute());
|
||||
|
||||
return new JsonResponse([]);
|
||||
}
|
||||
}
|
@ -292,13 +292,19 @@ class Node extends Model
|
||||
|
||||
public function serverStatuses(): array
|
||||
{
|
||||
return cache()->remember("nodes.$this->id.servers", now()->addMinute(), function () {
|
||||
try {
|
||||
return Http::daemon($this)->connectTimeout(1)->timeout(1)->get('/api/servers')->json() ?? [];
|
||||
} catch (Exception) {
|
||||
return [];
|
||||
}
|
||||
});
|
||||
$statuses = [];
|
||||
try {
|
||||
$statuses = Http::daemon($this)->connectTimeout(1)->timeout(1)->get('/api/servers')->json() ?? [];
|
||||
} catch (Exception $exception) {
|
||||
report($exception);
|
||||
}
|
||||
|
||||
foreach ($statuses as $status) {
|
||||
$uuid = fluent($status)->get('configuration.uuid');
|
||||
cache()->remember("servers.$uuid.container.status", now()->addMinute(), fn() => fluent($status)->get('state'));
|
||||
}
|
||||
|
||||
return $statuses;
|
||||
}
|
||||
|
||||
public function ipAddresses(): array
|
||||
|
@ -395,8 +395,16 @@ class Server extends Model
|
||||
}
|
||||
}
|
||||
|
||||
public function retrieveStatus()
|
||||
public function retrieveStatus(): string
|
||||
{
|
||||
return $this->node->serverStatuses();
|
||||
$status = cache()->get("servers.$this->uuid.container.status");
|
||||
|
||||
if ($status) {
|
||||
return $status;
|
||||
}
|
||||
|
||||
$this->node->serverStatuses();
|
||||
|
||||
return cache()->get("servers.$this->uuid.container.status") ?? 'missing';
|
||||
}
|
||||
}
|
||||
|
@ -19,6 +19,8 @@ Route::prefix('/servers/{server:uuid}')->group(function () {
|
||||
Route::get('/transfer/success', [Remote\Servers\ServerTransferController::class, 'success']);
|
||||
Route::post('/transfer/failure', [Remote\Servers\ServerTransferController::class, 'failure']);
|
||||
Route::post('/transfer/success', [Remote\Servers\ServerTransferController::class, 'success']);
|
||||
|
||||
Route::post('/container/status', [Remote\Servers\ServerContainersController::class, 'status']);
|
||||
});
|
||||
|
||||
Route::prefix('/backups')->group(function () {
|
||||
|
Loading…
x
Reference in New Issue
Block a user