coolify/app/Livewire/RunCommand.php

102 lines
3.6 KiB
PHP
Raw Normal View History

2023-03-20 12:04:22 +00:00
<?php
2023-12-07 18:06:32 +00:00
namespace App\Livewire;
2023-03-20 12:04:22 +00:00
2024-09-13 10:21:02 +00:00
use Livewire\Attributes\On;
2023-03-20 12:04:22 +00:00
use Livewire\Component;
class RunCommand extends Component
{
public $selected_uuid = 'default';
2024-06-10 20:43:34 +00:00
public $servers = [];
2024-09-13 10:21:02 +00:00
public $containers = [];
2023-05-12 13:39:07 +00:00
public function mount($servers)
{
2023-05-12 13:39:07 +00:00
$this->servers = $servers;
2024-09-13 10:21:02 +00:00
$this->containers = $this->getAllActiveContainers();
}
2023-03-20 12:04:22 +00:00
2024-09-13 10:21:02 +00:00
private function getAllActiveContainers()
2023-03-20 12:04:22 +00:00
{
2024-09-13 10:21:02 +00:00
return collect($this->servers)->flatMap(function ($server) {
if (! $server->isFunctional()) {
return [];
}
return $server->definedResources()
->filter(function ($resource) {
$status = method_exists($resource, 'realStatus') ? $resource->realStatus() : (method_exists($resource, 'status') ? $resource->status() : 'exited');
return str_starts_with($status, 'running:');
})
->map(function ($resource) use ($server) {
if (isDev()) {
if (data_get($resource, 'name') === 'coolify-db') {
$container_name = 'coolify-db';
return [
'name' => $resource->name,
'connection_name' => $container_name,
'uuid' => $resource->uuid,
'status' => 'running',
'server' => $server,
'server_uuid' => $server->uuid,
];
}
}
if (class_basename($resource) === 'Application') {
if (! $server->isSwarm()) {
$current_containers = getCurrentApplicationContainerStatus($server, $resource->id, includePullrequests: true);
}
$status = $resource->status;
} elseif (class_basename($resource) === 'Service') {
$current_containers = getCurrentServiceContainerStatus($server, $resource->id);
$status = $resource->status();
} else {
$status = getContainerStatus($server, $resource->uuid);
if ($status === 'running') {
$current_containers = collect([
'Names' => $resource->name,
]);
}
}
if ($server->isSwarm()) {
$container_name = $resource->uuid.'_'.$resource->uuid;
} else {
$container_name = data_get($current_containers->first(), 'Names');
}
return [
'name' => $resource->name,
'connection_name' => $container_name,
'uuid' => $resource->uuid,
'status' => $status,
'server' => $server,
'server_uuid' => $server->uuid,
];
});
});
}
public function updatedSelectedUuid($value)
{
$this->connectToContainer();
}
2024-09-13 10:21:02 +00:00
#[On('connectToContainer')]
public function connectToContainer()
{
$container = collect($this->containers)->firstWhere('uuid', $this->selected_uuid);
$this->dispatch('send-terminal-command',
isset($container),
$container['connection_name'] ?? $this->selected_uuid,
$container['server_uuid'] ?? $this->selected_uuid
);
2023-03-20 12:04:22 +00:00
}
}