mirror of
https://github.com/pelican-dev/panel.git
synced 2025-09-09 19:18:48 +02:00
Add cloud so far
This commit is contained in:
parent
8ae3c88c91
commit
3212ad21ab
@ -3,19 +3,26 @@
|
|||||||
namespace App\Filament\Admin\Resources\NodeResource\Pages;
|
namespace App\Filament\Admin\Resources\NodeResource\Pages;
|
||||||
|
|
||||||
use App\Filament\Admin\Resources\NodeResource;
|
use App\Filament\Admin\Resources\NodeResource;
|
||||||
|
use App\Models\ApiKey;
|
||||||
use App\Models\Node;
|
use App\Models\Node;
|
||||||
|
use App\Services\Acl\Api\AdminAcl;
|
||||||
|
use App\Services\Api\KeyCreationService;
|
||||||
use Filament\Forms;
|
use Filament\Forms;
|
||||||
use Filament\Forms\Components\Actions\Action;
|
use Filament\Forms\Components\Actions\Action;
|
||||||
use Filament\Forms\Components\Grid;
|
use Filament\Forms\Components\Grid;
|
||||||
use Filament\Forms\Components\TagsInput;
|
use Filament\Forms\Components\TagsInput;
|
||||||
use Filament\Forms\Components\TextInput;
|
use Filament\Forms\Components\TextInput;
|
||||||
use Filament\Forms\Components\ToggleButtons;
|
use Filament\Forms\Components\ToggleButtons;
|
||||||
|
use Filament\Forms\Components\View;
|
||||||
use Filament\Forms\Components\Wizard;
|
use Filament\Forms\Components\Wizard;
|
||||||
use Filament\Forms\Components\Wizard\Step;
|
use Filament\Forms\Components\Wizard\Step;
|
||||||
use Filament\Forms\Get;
|
use Filament\Forms\Get;
|
||||||
use Filament\Forms\Set;
|
use Filament\Forms\Set;
|
||||||
|
use Filament\Notifications\Notification;
|
||||||
use Filament\Resources\Pages\CreateRecord;
|
use Filament\Resources\Pages\CreateRecord;
|
||||||
use Illuminate\Support\Facades\Blade;
|
use Illuminate\Support\Facades\Blade;
|
||||||
|
use Illuminate\Support\Facades\Http;
|
||||||
|
use Illuminate\Support\Facades\Request;
|
||||||
use Illuminate\Support\HtmlString;
|
use Illuminate\Support\HtmlString;
|
||||||
|
|
||||||
class CreateNode extends CreateRecord
|
class CreateNode extends CreateRecord
|
||||||
@ -24,11 +31,83 @@ class CreateNode extends CreateRecord
|
|||||||
|
|
||||||
protected static bool $canCreateAnother = false;
|
protected static bool $canCreateAnother = false;
|
||||||
|
|
||||||
|
private KeyCreationService $keyCreationService;
|
||||||
|
|
||||||
|
public function boot(KeyCreationService $keyCreationService): void
|
||||||
|
{
|
||||||
|
$this->keyCreationService = $keyCreationService;
|
||||||
|
}
|
||||||
|
|
||||||
|
public function local(): void
|
||||||
|
{
|
||||||
|
$wizard = null;
|
||||||
|
foreach ($this->form->getComponents() as $component) {
|
||||||
|
if ($component instanceof Wizard) {
|
||||||
|
$wizard = $component;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
$wizard->dispatchEvent('wizard::nextStep', $wizard->getStatePath(), 0);
|
||||||
|
}
|
||||||
|
|
||||||
|
public function cloud(): void
|
||||||
|
{
|
||||||
|
$key = ApiKey::query()
|
||||||
|
->where('key_type', ApiKey::TYPE_APPLICATION)
|
||||||
|
->whereJsonContains('permissions->' . Node::RESOURCE_NAME, AdminAcl::READ|AdminAcl::WRITE)
|
||||||
|
->first();
|
||||||
|
|
||||||
|
if (!$key) {
|
||||||
|
$key = $this->keyCreationService->setKeyType(ApiKey::TYPE_APPLICATION)->handle([
|
||||||
|
'memo' => 'Automatically generated node cloud key.',
|
||||||
|
'user_id' => auth()->user()->id,
|
||||||
|
'permissions' => [Node::RESOURCE_NAME => AdminAcl::READ|AdminAcl::WRITE],
|
||||||
|
]);
|
||||||
|
}
|
||||||
|
|
||||||
|
$vars = [
|
||||||
|
'url' => Request::root(),
|
||||||
|
'token' => $key->identifier . $key->token,
|
||||||
|
];
|
||||||
|
|
||||||
|
$domain = config('PELICAN_CLOUD_DOMAIN', 'https://hub.pelican.dev');
|
||||||
|
|
||||||
|
$response = Http::post("$domain/api/cloud/start", $vars);
|
||||||
|
|
||||||
|
if ($response->json('error')) {
|
||||||
|
$code = $response->json('code');
|
||||||
|
Notification::make()
|
||||||
|
->danger()
|
||||||
|
->persistent()
|
||||||
|
->title('Pelican Cloud Error')->body(new HtmlString("
|
||||||
|
It looks like there was a problem communicating with Pelican Cloud!
|
||||||
|
Please make a ticket by <a class='underline text-blue-400' href='https://hub.pelican.dev/tickets?code=$code'>clicking here</a>.
|
||||||
|
"))
|
||||||
|
->send()
|
||||||
|
;
|
||||||
|
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
$uuid = $response->json('uuid');
|
||||||
|
|
||||||
|
$this->redirect("$domain/cloud/$uuid");
|
||||||
|
}
|
||||||
|
|
||||||
public function form(Forms\Form $form): Forms\Form
|
public function form(Forms\Form $form): Forms\Form
|
||||||
{
|
{
|
||||||
return $form
|
return $form
|
||||||
->schema([
|
->schema([
|
||||||
Wizard::make([
|
Wizard::make([
|
||||||
|
Step::make('select')
|
||||||
|
->label(trans('admin/node.tabs.select_type'))
|
||||||
|
->icon('tabler-cloud')
|
||||||
|
->columns(2)
|
||||||
|
->schema([
|
||||||
|
View::make('filament.admin.nodes.config.left'),
|
||||||
|
View::make('filament.admin.nodes.config.right'),
|
||||||
|
])
|
||||||
|
,
|
||||||
Step::make('basic')
|
Step::make('basic')
|
||||||
->label(trans('admin/node.tabs.basic_settings'))
|
->label(trans('admin/node.tabs.basic_settings'))
|
||||||
->icon('tabler-server')
|
->icon('tabler-server')
|
||||||
@ -374,16 +453,25 @@ class CreateNode extends CreateRecord
|
|||||||
->required(),
|
->required(),
|
||||||
]),
|
]),
|
||||||
]),
|
]),
|
||||||
])->columnSpanFull()
|
])
|
||||||
->nextAction(fn (Action $action) => $action->label(trans('admin/node.next_step')))
|
->columnSpanFull()
|
||||||
->submitAction(new HtmlString(Blade::render(<<<'BLADE'
|
->nextAction(function (Action $action, Wizard $wizard) {
|
||||||
|
if ($wizard->getCurrentStepIndex() === 0) {
|
||||||
|
return $action->label(trans('admin/node.next_step'))->view('filament.admin.nodes.config.empty');
|
||||||
|
}
|
||||||
|
|
||||||
|
return $action->label(trans('admin/node.next_step'));
|
||||||
|
})
|
||||||
|
->submitAction(new HtmlString(Blade::render(
|
||||||
|
<<<'BLADE'
|
||||||
<x-filament::button
|
<x-filament::button
|
||||||
type="submit"
|
type="submit"
|
||||||
size="sm"
|
size="sm"
|
||||||
>
|
>
|
||||||
Create Node
|
Create Node
|
||||||
</x-filament::button>
|
</x-filament::button>
|
||||||
BLADE))),
|
BLADE
|
||||||
|
))),
|
||||||
]);
|
]);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -55,19 +55,19 @@ class ListServers extends ListRecords
|
|||||||
|
|
||||||
$viewThree = [
|
$viewThree = [
|
||||||
TextColumn::make('cpuUsage')
|
TextColumn::make('cpuUsage')
|
||||||
->label('')
|
->label('CPU')
|
||||||
->icon('tabler-cpu')
|
->icon('tabler-cpu')
|
||||||
->tooltip(fn (Server $server) => 'Usage Limit: ' . $server->formatResource('cpu', limit: true, type: ServerResourceType::Percentage, precision: 0))
|
->tooltip(fn (Server $server) => 'Usage Limit: ' . $server->formatResource('cpu', limit: true, type: ServerResourceType::Percentage, precision: 0))
|
||||||
->state(fn (Server $server) => $server->formatResource('cpu_absolute', type: ServerResourceType::Percentage))
|
->state(fn (Server $server) => $server->formatResource('cpu_absolute', type: ServerResourceType::Percentage))
|
||||||
->color(fn (Server $server) => $this->getResourceColor($server, 'cpu')),
|
->color(fn (Server $server) => $this->getResourceColor($server, 'cpu')),
|
||||||
TextColumn::make('memoryUsage')
|
TextColumn::make('memoryUsage')
|
||||||
->label('')
|
->label('Memory')
|
||||||
->icon('tabler-memory')
|
->icon('tabler-memory')
|
||||||
->tooltip(fn (Server $server) => 'Usage Limit: ' . $server->formatResource('memory', limit: true))
|
->tooltip(fn (Server $server) => 'Usage Limit: ' . $server->formatResource('memory', limit: true))
|
||||||
->state(fn (Server $server) => $server->formatResource('memory_bytes'))
|
->state(fn (Server $server) => $server->formatResource('memory_bytes'))
|
||||||
->color(fn (Server $server) => $this->getResourceColor($server, 'memory')),
|
->color(fn (Server $server) => $this->getResourceColor($server, 'memory')),
|
||||||
TextColumn::make('diskUsage')
|
TextColumn::make('diskUsage')
|
||||||
->label('')
|
->label('Disk')
|
||||||
->icon('tabler-device-floppy')
|
->icon('tabler-device-floppy')
|
||||||
->tooltip(fn (Server $server) => 'Usage Limit: ' . $server->formatResource('disk', limit: true))
|
->tooltip(fn (Server $server) => 'Usage Limit: ' . $server->formatResource('disk', limit: true))
|
||||||
->state(fn (Server $server) => $server->formatResource('disk_bytes'))
|
->state(fn (Server $server) => $server->formatResource('disk_bytes'))
|
||||||
|
@ -18,7 +18,8 @@ class DaemonConfigurationRepository extends DaemonRepository
|
|||||||
public function getSystemInformation(): array
|
public function getSystemInformation(): array
|
||||||
{
|
{
|
||||||
return $this->getHttpClient()
|
return $this->getHttpClient()
|
||||||
->connectTimeout(3)
|
->connectTimeout(1)
|
||||||
|
->timeout(1)
|
||||||
->get('/api/system')
|
->get('/api/system')
|
||||||
->throwIf(function ($result) {
|
->throwIf(function ($result) {
|
||||||
$header = $result->header('User-Agent');
|
$header = $result->header('User-Agent');
|
||||||
|
@ -9,6 +9,7 @@ return [
|
|||||||
'basic_settings' => 'Basic Settings',
|
'basic_settings' => 'Basic Settings',
|
||||||
'advanced_settings' => 'Advanced Settings',
|
'advanced_settings' => 'Advanced Settings',
|
||||||
'config_file' => 'Configuration File',
|
'config_file' => 'Configuration File',
|
||||||
|
'select_type' => 'Node Type',
|
||||||
],
|
],
|
||||||
'table' => [
|
'table' => [
|
||||||
'health' => 'Health',
|
'health' => 'Health',
|
||||||
|
BIN
public/images/cloud.png
Normal file
BIN
public/images/cloud.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 1.4 MiB |
BIN
public/images/local.png
Normal file
BIN
public/images/local.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 1.2 MiB |
16
resources/views/filament/admin/nodes/config/left.blade.php
Normal file
16
resources/views/filament/admin/nodes/config/left.blade.php
Normal file
@ -0,0 +1,16 @@
|
|||||||
|
<div class="text-center mb-2">
|
||||||
|
<x-filament::button
|
||||||
|
icon="tabler-cloud"
|
||||||
|
wire:click="cloud"
|
||||||
|
class="text-center"
|
||||||
|
size="xl"
|
||||||
|
color="info"
|
||||||
|
>
|
||||||
|
Pelican Cloud
|
||||||
|
</x-filament::button>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="text-center block">
|
||||||
|
<p class="mb-2">Very easily and quickly set up a powerful game server on our cloud!</p>
|
||||||
|
<img src="/images/cloud.png" class="w-1/2 mx-auto" alt="pelican cloud" />
|
||||||
|
</div>
|
16
resources/views/filament/admin/nodes/config/right.blade.php
Normal file
16
resources/views/filament/admin/nodes/config/right.blade.php
Normal file
@ -0,0 +1,16 @@
|
|||||||
|
<div class="text-center mb-2">
|
||||||
|
<x-filament::button
|
||||||
|
icon="tabler-server"
|
||||||
|
wire:click="local"
|
||||||
|
class="text-center"
|
||||||
|
size="xl"
|
||||||
|
color="primary"
|
||||||
|
>
|
||||||
|
Self Host
|
||||||
|
</x-filament::button>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="text-center block">
|
||||||
|
<p class="mb-2">Use your own hardware either in your home or somewhere else.</p>
|
||||||
|
<img src="/images/local.png" class="w-1/2 mx-auto" alt="pelican cloud" />
|
||||||
|
</div>
|
Loading…
x
Reference in New Issue
Block a user