From a249ee1b1ff0edb7e333cebbd03c71331429a86c Mon Sep 17 00:00:00 2001 From: Andras Bacsai Date: Fri, 8 Dec 2023 13:55:55 +0100 Subject: [PATCH] fix: live event --- app/Actions/Service/StartService.php | 2 +- app/Livewire/ActivityMonitor.php | 25 +++++++++---------- app/Livewire/Project/Service/Index.php | 1 + app/Livewire/Project/Service/Navbar.php | 3 +-- .../Shared/ExecuteContainerCommand.php | 24 +++++++++++++++--- .../livewire/project/service/index.blade.php | 2 +- 6 files changed, 36 insertions(+), 21 deletions(-) diff --git a/app/Actions/Service/StartService.php b/app/Actions/Service/StartService.php index 7b79b2f32..6f73c2f45 100644 --- a/app/Actions/Service/StartService.php +++ b/app/Actions/Service/StartService.php @@ -21,7 +21,7 @@ class StartService $commands[] = "echo 'Pulling images.'"; $commands[] = "docker compose pull"; $commands[] = "echo 'Starting containers.'"; - $commands[] = "docker compose up -d --remove-orphans --force-recreate --build"; + $commands[] = "docker compose up --wait --remove-orphans --force-recreate --build"; $commands[] = "docker network connect $service->uuid coolify-proxy >/dev/null 2>&1 || true"; $compose = data_get($service, 'docker_compose', []); $serviceNames = data_get(Yaml::parse($compose), 'services', []); diff --git a/app/Livewire/ActivityMonitor.php b/app/Livewire/ActivityMonitor.php index 2bfbe7348..703899b65 100644 --- a/app/Livewire/ActivityMonitor.php +++ b/app/Livewire/ActivityMonitor.php @@ -8,7 +8,7 @@ use Spatie\Activitylog\Models\Activity; class ActivityMonitor extends Component { - public string|null $header = null; + public ?string $header = null; public $activityId; public $isPollingActive = false; @@ -26,31 +26,30 @@ class ActivityMonitor extends Component public function hydrateActivity() { - $this->activity = Activity::query() - ->find($this->activityId); + $this->activity = Activity::find($this->activityId); } public function polling() { $this->hydrateActivity(); - $this->setStatus(ProcessStatus::IN_PROGRESS); + // $this->setStatus(ProcessStatus::IN_PROGRESS); $exit_code = data_get($this->activity, 'properties.exitCode'); if ($exit_code !== null) { if ($exit_code === 0) { - $this->setStatus(ProcessStatus::FINISHED); + // $this->setStatus(ProcessStatus::FINISHED); } else { - $this->setStatus(ProcessStatus::ERROR); + // $this->setStatus(ProcessStatus::ERROR); } $this->isPollingActive = false; $this->dispatch('activityFinished'); } } - protected function setStatus($status) - { - $this->activity->properties = $this->activity->properties->merge([ - 'status' => $status, - ]); - $this->activity->save(); - } + // protected function setStatus($status) + // { + // $this->activity->properties = $this->activity->properties->merge([ + // 'status' => $status, + // ]); + // $this->activity->save(); + // } } diff --git a/app/Livewire/Project/Service/Index.php b/app/Livewire/Project/Service/Index.php index 4f3f9ce11..c2114bf15 100644 --- a/app/Livewire/Project/Service/Index.php +++ b/app/Livewire/Project/Service/Index.php @@ -38,6 +38,7 @@ class Index extends Component { dispatch_sync(new ContainerStatusJob($this->service->server)); $this->refreshStacks(); + $this->dispatch('serviceStatusChanged'); } public function refreshStacks() { diff --git a/app/Livewire/Project/Service/Navbar.php b/app/Livewire/Project/Service/Navbar.php index 25cbeb17e..b3551b874 100644 --- a/app/Livewire/Project/Service/Navbar.php +++ b/app/Livewire/Project/Service/Navbar.php @@ -29,9 +29,8 @@ class Navbar extends Component } public function getListeners() { - $userId = auth()->user()->id; return [ - "echo-private:custom.{$userId},ServiceStatusChanged" => 'serviceStatusChanged', + "serviceStatusChanged" ]; } public function serviceStatusChanged() diff --git a/app/Livewire/Project/Shared/ExecuteContainerCommand.php b/app/Livewire/Project/Shared/ExecuteContainerCommand.php index c0a373c38..ec8bcb340 100644 --- a/app/Livewire/Project/Shared/ExecuteContainerCommand.php +++ b/app/Livewire/Project/Shared/ExecuteContainerCommand.php @@ -10,6 +10,7 @@ use App\Models\StandaloneMongodb; use App\Models\StandaloneMysql; use App\Models\StandalonePostgresql; use App\Models\StandaloneRedis; +use Illuminate\Support\Sleep; use Livewire\Component; class ExecuteContainerCommand extends Component @@ -23,7 +24,16 @@ class ExecuteContainerCommand extends Component public string $workDir = ''; public Server $server; public $servers = []; - + public function getListeners() + { + return [ + "serviceStatusChanged", + ]; + } + public function serviceStatusChanged() + { + $this->getContainers(); + } protected $rules = [ 'server' => 'required', 'container' => 'required', @@ -33,8 +43,12 @@ class ExecuteContainerCommand extends Component public function mount() { - $this->containers = collect(); $this->parameters = get_route_parameters(); + $this->getContainers(); + } + public function getContainers() + { + $this->containers = collect(); if (data_get($this->parameters, 'application_uuid')) { $this->type = 'application'; $this->resource = Application::where('uuid', $this->parameters['application_uuid'])->firstOrFail(); @@ -92,10 +106,12 @@ class ExecuteContainerCommand extends Component { $this->validate(); try { + // Wrap command to prevent escaped execution in the host. + $cmd = 'sh -c "' . str_replace('"', '\"', $this->command) . '"'; if (!empty($this->workDir)) { - $exec = "docker exec -w {$this->workDir} {$this->container} {$this->command}"; + $exec = "docker exec -w {$this->workDir} {$this->container} {$cmd}"; } else { - $exec = "docker exec {$this->container} {$this->command}"; + $exec = "docker exec {$this->container} {$cmd}"; } $activity = remote_process([$exec], $this->server, ignore_errors: true); $this->dispatch('newMonitorActivity', $activity->id); diff --git a/resources/views/livewire/project/service/index.blade.php b/resources/views/livewire/project/service/index.blade.php index ed25dd169..ec1d76922 100644 --- a/resources/views/livewire/project/service/index.blade.php +++ b/resources/views/livewire/project/service/index.blade.php @@ -115,7 +115,7 @@
- +