mirror of
				https://github.com/pelican-dev/panel.git
				synced 2025-10-31 06:56:52 +01:00 
			
		
		
		
	back port power actions from v4 branch (#1470)
This commit is contained in:
		
							parent
							
								
									cdcd1c521e
								
							
						
					
					
						commit
						ba7f814300
					
				| @ -15,6 +15,7 @@ use Filament\Notifications\Notification; | ||||
| use Filament\Resources\Components\Tab; | ||||
| use Filament\Resources\Pages\ListRecords; | ||||
| use Filament\Support\Enums\Alignment; | ||||
| use Filament\Support\Enums\IconSize; | ||||
| use Filament\Tables\Actions\Action; | ||||
| use Filament\Tables\Actions\ActionGroup; | ||||
| use Filament\Tables\Columns\Column; | ||||
| @ -219,35 +220,41 @@ class ListServers extends ListRecords | ||||
|         } | ||||
|     } | ||||
| 
 | ||||
|     /** @return Action[] */ | ||||
|     /** @return Action[]|ActionGroup[] */ | ||||
|     public static function getPowerActions(): array | ||||
|     { | ||||
|         return [ | ||||
|             Action::make('start') | ||||
|                 ->color('primary') | ||||
|                 ->icon('tabler-player-play-filled') | ||||
|                 ->authorize(fn (Server $server) => auth()->user()->can(Permission::ACTION_CONTROL_START, $server)) | ||||
|                 ->visible(fn (Server $server) => !$server->isInConflictState() & $server->retrieveStatus()->isStartable()) | ||||
|                 ->dispatch('powerAction', fn (Server $server) => ['server' => $server, 'action' => 'start']), | ||||
|             Action::make('restart') | ||||
|                 ->color('gray') | ||||
|                 ->icon('tabler-reload') | ||||
|                 ->authorize(fn (Server $server) => auth()->user()->can(Permission::ACTION_CONTROL_RESTART, $server)) | ||||
|                 ->visible(fn (Server $server) => !$server->isInConflictState() & $server->retrieveStatus()->isRestartable()) | ||||
|                 ->dispatch('powerAction', fn (Server $server) => ['server' => $server, 'action' => 'restart']), | ||||
|             Action::make('stop') | ||||
|                 ->color('danger') | ||||
|                 ->icon('tabler-player-stop-filled') | ||||
|                 ->authorize(fn (Server $server) => auth()->user()->can(Permission::ACTION_CONTROL_STOP, $server)) | ||||
|                 ->visible(fn (Server $server) => !$server->isInConflictState() & $server->retrieveStatus()->isStoppable()) | ||||
|                 ->dispatch('powerAction', fn (Server $server) => ['server' => $server, 'action' => 'stop']), | ||||
|             Action::make('kill') | ||||
|                 ->color('danger') | ||||
|                 ->icon('tabler-alert-square') | ||||
|                 ->tooltip('This can result in data corruption and/or data loss!') | ||||
|                 ->authorize(fn (Server $server) => auth()->user()->can(Permission::ACTION_CONTROL_STOP, $server)) | ||||
|                 ->visible(fn (Server $server) => !$server->isInConflictState() & $server->retrieveStatus()->isKillable()) | ||||
|                 ->dispatch('powerAction', fn (Server $server) => ['server' => $server, 'action' => 'kill']), | ||||
|             ActionGroup::make([ | ||||
|                 Action::make('start') | ||||
|                     ->color('primary') | ||||
|                     ->icon('tabler-player-play-filled') | ||||
|                     ->authorize(fn (Server $server) => auth()->user()->can(Permission::ACTION_CONTROL_START, $server)) | ||||
|                     ->visible(fn (Server $server) => !$server->isInConflictState() & $server->retrieveStatus()->isStartable()) | ||||
|                     ->dispatch('powerAction', fn (Server $server) => ['server' => $server, 'action' => 'start']), | ||||
|                 Action::make('restart') | ||||
|                     ->color('gray') | ||||
|                     ->icon('tabler-reload') | ||||
|                     ->authorize(fn (Server $server) => auth()->user()->can(Permission::ACTION_CONTROL_RESTART, $server)) | ||||
|                     ->visible(fn (Server $server) => !$server->isInConflictState() & $server->retrieveStatus()->isRestartable()) | ||||
|                     ->dispatch('powerAction', fn (Server $server) => ['server' => $server, 'action' => 'restart']), | ||||
|                 Action::make('stop') | ||||
|                     ->color('danger') | ||||
|                     ->icon('tabler-player-stop-filled') | ||||
|                     ->authorize(fn (Server $server) => auth()->user()->can(Permission::ACTION_CONTROL_STOP, $server)) | ||||
|                     ->visible(fn (Server $server) => !$server->isInConflictState() & $server->retrieveStatus()->isStoppable()) | ||||
|                     ->dispatch('powerAction', fn (Server $server) => ['server' => $server, 'action' => 'stop']), | ||||
|                 Action::make('kill') | ||||
|                     ->color('danger') | ||||
|                     ->icon('tabler-alert-square') | ||||
|                     ->tooltip('This can result in data corruption and/or data loss!') | ||||
|                     ->authorize(fn (Server $server) => auth()->user()->can(Permission::ACTION_CONTROL_STOP, $server)) | ||||
|                     ->visible(fn (Server $server) => !$server->isInConflictState() & $server->retrieveStatus()->isKillable()) | ||||
|                     ->dispatch('powerAction', fn (Server $server) => ['server' => $server, 'action' => 'kill']), | ||||
|             ]) | ||||
|                 ->icon(fn (Server $server) => $server->condition->getIcon()) | ||||
|                 ->color(fn (Server $server) => $server->condition->getColor()) | ||||
|                 ->tooltip(fn (Server $server) => $server->condition->getLabel()) | ||||
|                 ->iconSize(IconSize::Large), | ||||
|         ]; | ||||
|     } | ||||
| } | ||||
|  | ||||
| @ -1,57 +1,55 @@ | ||||
| <div wire:poll.15s class="relative"> | ||||
|     <a href="{{ \App\Filament\Server\Pages\Console::getUrl(panel: 'server', tenant: $server) }}" wire:navigate> | ||||
|         <div | ||||
|             class="absolute left-0 top-1 bottom-0 w-1 rounded-lg" | ||||
|             style="background-color: {{ $server->condition->getColor(true) }};"> | ||||
|         </div> | ||||
| <div wire:poll.15s | ||||
|      class="relative cursor-pointer" | ||||
|      x-on:click="window.location.href = '{{ \App\Filament\Server\Pages\Console::getUrl(panel: 'server', tenant: $server) }}'"> | ||||
| 
 | ||||
|         <div class="flex-1 dark:bg-gray-850 dark:text-white rounded-t-lg overflow-hidden p-2"> | ||||
|             <div class="flex items-center mb-5 gap-2"> | ||||
|                 <x-filament::icon-button | ||||
|                     :icon="$server->condition->getIcon()" | ||||
|                     :color="$server->condition->getColor()" | ||||
|                     :tooltip="$server->condition->getLabel()" | ||||
|                     size="xl" | ||||
|                 /> | ||||
|                 <h2 class="text-xl font-bold"> | ||||
|                     {{ $server->name }} | ||||
|                     <span class="dark:text-gray-400">({{ $server->formatResource('uptime', type: \App\Enums\ServerResourceType::Time) }})</span> | ||||
|                 </h2> | ||||
|     <div class="absolute left-0 top-1 bottom-0 w-1 rounded-lg" | ||||
|          style="background-color: {{ $server->condition->getColor(true) }};"> | ||||
|     </div> | ||||
| 
 | ||||
|     <div class="flex-1 dark:bg-gray-800 dark:text-white rounded-lg overflow-hidden p-3"> | ||||
|         <div class="flex items-center mb-5 gap-2"> | ||||
|             <div class="end-0" x-on:click.stop> | ||||
|                 <div class="flex-1 dark:bg-gray-800 dark:text-white rounded-b-lg overflow-hidden p-1"> | ||||
|                     <x-filament-tables::actions | ||||
|                         :actions="\App\Filament\App\Resources\ServerResource\Pages\ListServers::getPowerActions()" | ||||
|                         :alignment="\Filament\Support\Enums\Alignment::Center" | ||||
|                         :record="$server" | ||||
|                     /> | ||||
|                 </div> | ||||
|             </div> | ||||
| 
 | ||||
|             <div class="flex justify-between text-center"> | ||||
|                 <div> | ||||
|                     <p class="text-sm dark:text-gray-400">CPU</p> | ||||
|                     <p class="text-md font-semibold">{{ $server->formatResource('cpu_absolute', type: \App\Enums\ServerResourceType::Percentage) }}</p> | ||||
|                     <hr class="p-0.5"> | ||||
|                     <p class="text-xs dark:text-gray-400">{{ $server->formatResource('cpu', type: \App\Enums\ServerResourceType::Percentage, limit: true) }}</p> | ||||
|                 </div> | ||||
|                 <div> | ||||
|                     <p class="text-sm dark:text-gray-400">Memory</p> | ||||
|                     <p class="text-md font-semibold">{{ $server->formatResource('memory_bytes') }}</p> | ||||
|                     <hr class="p-0.5"> | ||||
|                     <p class="text-xs dark:text-gray-400">{{ $server->formatResource('memory', limit: true) }}</p> | ||||
|                 </div> | ||||
|                 <div> | ||||
|                     <p class="text-sm dark:text-gray-400">Disk</p> | ||||
|                     <p class="text-md font-semibold">{{ $server->formatResource('disk_bytes') }}</p> | ||||
|                     <hr class="p-0.5"> | ||||
|                     <p class="text-xs dark:text-gray-400">{{ $server->formatResource('disk', limit: true) }}</p> | ||||
|                 </div> | ||||
|                 <div class="hidden sm:block"> | ||||
|                     <p class="text-sm dark:text-gray-400">Network</p> | ||||
|                     <hr class="p-0.5"> | ||||
|                     <p class="text-md font-semibold">{{ $server->allocation?->address ?? 'None' }} </p> | ||||
|                 </div> | ||||
|             <h2 class="text-xl font-bold"> | ||||
|                 {{ $server->name }} | ||||
|                 <span class="dark:text-gray-400"> | ||||
|                     ({{ $server->formatResource('uptime', type: \App\Enums\ServerResourceType::Time) }}) | ||||
|                 </span> | ||||
|             </h2> | ||||
|         </div> | ||||
| 
 | ||||
|         <div class="flex justify-between text-center items-center gap-4"> | ||||
|             <div> | ||||
|                 <p class="text-sm dark:text-gray-400">CPU</p> | ||||
|                 <p class="text-md font-semibold">{{ $server->formatResource('cpu_absolute', type: \App\Enums\ServerResourceType::Percentage) }}</p> | ||||
|                 <hr class="p-0.5"> | ||||
|                 <p class="text-xs dark:text-gray-400">{{ $server->formatResource('cpu', limit: true, type: \App\Enums\ServerResourceType::Percentage) }}</p> | ||||
|             </div> | ||||
|             <div> | ||||
|                 <p class="text-sm dark:text-gray-400">Memory</p> | ||||
|                 <p class="text-md font-semibold">{{ $server->formatResource('memory_bytes') }}</p> | ||||
|                 <hr class="p-0.5"> | ||||
|                 <p class="text-xs dark:text-gray-400">{{ $server->formatResource('memory', limit: true) }}</p> | ||||
|             </div> | ||||
|             <div> | ||||
|                 <p class="text-sm dark:text-gray-400">Disk</p> | ||||
|                 <p class="text-md font-semibold">{{ $server->formatResource('disk_bytes') }}</p> | ||||
|                 <hr class="p-0.5"> | ||||
|                 <p class="text-xs dark:text-gray-400">{{ $server->formatResource('disk', limit: true) }}</p> | ||||
|             </div> | ||||
|             <div class="hidden sm:block"> | ||||
|                 <p class="text-sm dark:text-gray-400">Network</p> | ||||
|                 <hr class="p-0.5"> | ||||
|                 <p class="text-md font-semibold">{{ $server->allocation->address }} </p> | ||||
|             </div> | ||||
|         </div> | ||||
|     </a> | ||||
| 
 | ||||
|     <div class="flex-1 dark:bg-gray-850 dark:text-white rounded-b-lg overflow-hidden p-1"> | ||||
|         <x-filament-tables::actions | ||||
|             :actions="\App\Filament\App\Resources\ServerResource\Pages\ListServers::getPowerActions()" | ||||
|             :alignment="\Filament\Support\Enums\Alignment::Center" | ||||
|             :record="$server" | ||||
|         /> | ||||
|     </div> | ||||
| </div> | ||||
|  | ||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user
	 Charles
						Charles