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 @@
- @switch($node->systemInformation()['version'] ?? 'false') - @case('false') - true]) - /> + @php + $exception = $node->systemInformation()['exception'] ?? null; + $version = $node->systemInformation()['version'] ?? null; + $content = $exception ? 'Error connecting to node!
Check browser console for details.' : $version; + $icon = 'tabler-heart' . ($exception ? '-off' : 'beat'); + $animated = $exception ? '' : 'animate-pulse'; + $condition = $exception ? 'danger' : 'success'; + $class = ['fi-ta-icon-item', $sizeClasses, 'fi-color-custom text-custom-500 dark:text-custom-400', 'fi-color-'.$condition, $animated]; + $style = [Filament\Support\get_color_css_variables($condition, shades: [400, 500], alias: 'tables::columns.icon-column.item')]; + @endphp + + @if($exception) @script @endscript - @break - @default - true]) - @style([\Filament\Support\get_color_css_variables('success', shades: [400, 500], alias: 'tables::columns.icon-column.item') => true]) - /> - @endswitch + @endif +