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;
|
return $server->status;
|
||||||
}
|
}
|
||||||
|
|
||||||
$statuses = collect($server->retrieveStatus())
|
return $server->retrieveStatus() ?? 'node_fail';
|
||||||
->mapWithKeys(function ($status) {
|
|
||||||
return [$status['configuration']['uuid'] => $status['state']];
|
|
||||||
})->all();
|
|
||||||
|
|
||||||
return $statuses[$server->uuid] ?? 'node_fail';
|
|
||||||
})
|
})
|
||||||
->icon(fn ($state) => match ($state) {
|
->icon(fn ($state) => match ($state) {
|
||||||
'node_fail' => 'tabler-server-off',
|
'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
|
public function serverStatuses(): array
|
||||||
{
|
{
|
||||||
return cache()->remember("nodes.$this->id.servers", now()->addMinute(), function () {
|
$statuses = [];
|
||||||
try {
|
try {
|
||||||
return Http::daemon($this)->connectTimeout(1)->timeout(1)->get('/api/servers')->json() ?? [];
|
$statuses = Http::daemon($this)->connectTimeout(1)->timeout(1)->get('/api/servers')->json() ?? [];
|
||||||
} catch (Exception) {
|
} catch (Exception $exception) {
|
||||||
return [];
|
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
|
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::get('/transfer/success', [Remote\Servers\ServerTransferController::class, 'success']);
|
||||||
Route::post('/transfer/failure', [Remote\Servers\ServerTransferController::class, 'failure']);
|
Route::post('/transfer/failure', [Remote\Servers\ServerTransferController::class, 'failure']);
|
||||||
Route::post('/transfer/success', [Remote\Servers\ServerTransferController::class, 'success']);
|
Route::post('/transfer/success', [Remote\Servers\ServerTransferController::class, 'success']);
|
||||||
|
|
||||||
|
Route::post('/container/status', [Remote\Servers\ServerContainersController::class, 'status']);
|
||||||
});
|
});
|
||||||
|
|
||||||
Route::prefix('/backups')->group(function () {
|
Route::prefix('/backups')->group(function () {
|
||||||
|
Loading…
x
Reference in New Issue
Block a user