From d03366cf3df19d2485fa92efd2bfe51b83adef97 Mon Sep 17 00:00:00 2001 From: MartinOscar <40749467+rmartinoscar@users.noreply.github.com> Date: Sat, 22 Feb 2025 21:44:49 +0100 Subject: [PATCH] Enhance `Node` health column (#1023) * Make sure we are talking to a `Pelican Wings` instance * Enforce matching `token_id` * Refactor `NodeSystemInformation` --- .../NodeResource/Pages/ListNodes.php | 2 +- .../Tables/Columns/NodeHealthColumn.php | 2 + .../Daemon/DaemonConfigurationRepository.php | 17 +++++- .../node-system-information.blade.php | 52 +++++++++---------- 4 files changed, 44 insertions(+), 29 deletions(-) diff --git a/app/Filament/Admin/Resources/NodeResource/Pages/ListNodes.php b/app/Filament/Admin/Resources/NodeResource/Pages/ListNodes.php index e8adbdf0d..f773cfa6c 100644 --- a/app/Filament/Admin/Resources/NodeResource/Pages/ListNodes.php +++ b/app/Filament/Admin/Resources/NodeResource/Pages/ListNodes.php @@ -27,7 +27,7 @@ class ListNodes extends ListRecords ->label('UUID') ->searchable() ->hidden(), - NodeHealthColumn::make('health')->label(trans('admin/node.table.health')), + NodeHealthColumn::make('health'), TextColumn::make('name') ->label(trans('admin/node.table.name')) ->icon('tabler-server-2') diff --git a/app/Filament/Components/Tables/Columns/NodeHealthColumn.php b/app/Filament/Components/Tables/Columns/NodeHealthColumn.php index ebde23d0a..837791d15 100644 --- a/app/Filament/Components/Tables/Columns/NodeHealthColumn.php +++ b/app/Filament/Components/Tables/Columns/NodeHealthColumn.php @@ -12,6 +12,8 @@ class NodeHealthColumn extends IconColumn { parent::setUp(); + $this->label(trans('admin/node.table.health')); + $this->alignCenter(); } } diff --git a/app/Repositories/Daemon/DaemonConfigurationRepository.php b/app/Repositories/Daemon/DaemonConfigurationRepository.php index caf4aad7c..5d228fb96 100644 --- a/app/Repositories/Daemon/DaemonConfigurationRepository.php +++ b/app/Repositories/Daemon/DaemonConfigurationRepository.php @@ -17,7 +17,22 @@ class DaemonConfigurationRepository extends DaemonRepository { return $this->getHttpClient() ->connectTimeout(3) - ->get('/api/system')->throw()->json(); + ->get('/api/system') + ->throwIf(function ($result) { + $header = $result->header('User-Agent'); + if ( + filled($header) && + preg_match('/^Pelican Wings\/v(?:\d+\.\d+\.\d+|develop) \(id:(\w*)\)$/', $header, $matches) && + array_get($matches, 1, '') !== $this->node->daemon_token_id + ) { + throw new ConnectionException($result->effectiveUri()->__toString() . ' does not match node token_id !'); + } + if (!$result->collect()->has(['architecture', 'cpu_count', 'kernel_version', 'os', 'version'])) { + throw new ConnectionException($result->effectiveUri()->__toString() . ' is not Pelican Wings !'); + } + + return true; + })->json(); } /** diff --git a/resources/views/livewire/node-system-information.blade.php b/resources/views/livewire/node-system-information.blade.php index 64c51068b..efd70bb25 100644 --- a/resources/views/livewire/node-system-information.blade.php +++ b/resources/views/livewire/node-system-information.blade.php @@ -1,33 +1,31 @@