Add Docker container management methods and update Livewire component

This commit is contained in:
Andras Bacsai
2024-02-16 23:09:35 +01:00
parent f8c86769a7
commit 7d6bd10cca
3 changed files with 181 additions and 47 deletions

View File

@@ -4,6 +4,7 @@ namespace App\Livewire\Server;
use App\Models\Server;
use Illuminate\Foundation\Auth\Access\AuthorizesRequests;
use Illuminate\Support\Collection;
use Livewire\Component;
class Resources extends Component
@@ -11,6 +12,7 @@ class Resources extends Component
use AuthorizesRequests;
public ?Server $server = null;
public $parameters = [];
public Collection $unmanagedContainers;
public function getListeners()
{
$teamId = auth()->user()->currentTeam()->id;
@@ -19,11 +21,31 @@ class Resources extends Component
];
}
public function startUnmanaged($id) {
$this->server->startUnmanaged($id);
$this->dispatch('success', 'Container started.');
$this->loadUnmanagedContainers();
}
public function restartUnmanaged($id) {
$this->server->restartUnmanaged($id);
$this->dispatch('success', 'Container restarted.');
$this->loadUnmanagedContainers();
}
public function stopUnmanaged($id) {
$this->server->stopUnmanaged($id);
$this->dispatch('success', 'Container stopped.');
$this->loadUnmanagedContainers();
}
public function refreshStatus() {
$this->server->refresh();
$this->loadUnmanagedContainers();
$this->dispatch('success', 'Resource statuses refreshed.');
}
public function loadUnmanagedContainers() {
$this->unmanagedContainers = $this->server->loadUnmanagedContainers();
}
public function mount() {
$this->unmanagedContainers = collect();
$this->parameters = get_route_parameters();
try {
$this->server = Server::ownedByCurrentTeam()->whereUuid(request()->server_uuid)->first();
@@ -33,6 +55,7 @@ class Resources extends Component
} catch (\Throwable $e) {
return handleError($e, $this);
}
$this->loadUnmanagedContainers();
}
public function render()
{

View File

@@ -225,6 +225,29 @@ class Server extends BaseModel
$services = $this->services();
return $applications->concat($databases)->concat($services->get());
}
public function stopUnmanaged($id) {
return instant_remote_process(["docker stop -t 0 $id"], $this);
}
public function restartUnmanaged($id) {
return instant_remote_process(["docker restart $id"], $this);
}
public function startUnmanaged($id) {
return instant_remote_process(["docker start $id"], $this);
}
public function loadUnmanagedContainers()
{
$containers = instant_remote_process(["docker ps -a --format '{{json .}}' "], $this);
$containers = format_docker_command_output_to_json($containers);
$containers = $containers->map(function ($container) {
$labels = data_get($container, 'Labels');
if (!str($labels)->contains("coolify.managed")) {
return $container;
}
return null;
});
$containers = $containers->filter();
return collect($containers);
}
public function hasDefinedResources()
{
$applications = $this->applications()->count() > 0;
@@ -246,7 +269,7 @@ class Server extends BaseModel
$mariadbs = data_get($standaloneDocker, 'mariadbs', collect([]));
return $postgresqls->concat($redis)->concat($mongodbs)->concat($mysqls)->concat($mariadbs);
})->filter(function ($item) {
return data_get($item,'name') === 'coolify-db';
return data_get($item, 'name') === 'coolify-db';
})->flatten();
}
public function applications()