From e7763f3b7361c14acd454a04d46f465d01e55319 Mon Sep 17 00:00:00 2001 From: Joao Patricio Date: Wed, 3 May 2023 06:15:45 +0100 Subject: [PATCH] Refactor for CoolifyTask. --- .gitignore | 1 + .../PrepareCoolifyTask.php} | 12 ++++----- .../RunRemoteProcess.php | 2 +- app/Data/CoolifyTaskArgs.php | 23 +++++++++++++++++ app/Data/RemoteProcessArgs.php | 24 ------------------ app/Http/Controllers/ProjectController.php | 5 +++- app/Http/Livewire/DeployApplication.php | 4 +-- app/Http/Livewire/PollActivity.php | 5 +++- app/Jobs/ContainerStatusJob.php | 4 +-- app/Jobs/DeployApplicationJob.php | 8 +++--- ...ocess.php => HandleCoolifyTaskInQueue.php} | 4 +-- app/Providers/AppServiceProvider.php | 3 ++- bootstrap/helpers.php | 25 +++++++++---------- .../views/livewire/poll-activity.blade.php | 5 +++- .../views/livewire/run-command.blade.php | 7 ++++-- tests/Feature/DockerCommandsTest.php | 4 +-- tests/Feature/RemoteProcessTest.php | 2 +- 17 files changed, 75 insertions(+), 63 deletions(-) rename app/Actions/{RemoteProcess/DispatchRemoteProcess.php => CoolifyTask/PrepareCoolifyTask.php} (75%) rename app/Actions/{RemoteProcess => CoolifyTask}/RunRemoteProcess.php (99%) create mode 100644 app/Data/CoolifyTaskArgs.php delete mode 100644 app/Data/RemoteProcessArgs.php rename app/Jobs/{ExecuteRemoteProcess.php => HandleCoolifyTaskInQueue.php} (89%) diff --git a/.gitignore b/.gitignore index 67c5e7aa9..084a8d2f2 100644 --- a/.gitignore +++ b/.gitignore @@ -23,3 +23,4 @@ yarn-error.log .lesshst psysh_history +.psql_history diff --git a/app/Actions/RemoteProcess/DispatchRemoteProcess.php b/app/Actions/CoolifyTask/PrepareCoolifyTask.php similarity index 75% rename from app/Actions/RemoteProcess/DispatchRemoteProcess.php rename to app/Actions/CoolifyTask/PrepareCoolifyTask.php index 2d23513ea..d9a3ece2b 100644 --- a/app/Actions/RemoteProcess/DispatchRemoteProcess.php +++ b/app/Actions/CoolifyTask/PrepareCoolifyTask.php @@ -1,16 +1,16 @@ model) { $properties = $remoteProcessArgs->toArray(); @@ -31,7 +31,7 @@ public function __construct(RemoteProcessArgs $remoteProcessArgs) public function __invoke(): Activity { - $job = new ExecuteRemoteProcess($this->activity); + $job = new HandleCoolifyTaskInQueue($this->activity); dispatch($job); $this->activity->refresh(); return $this->activity; diff --git a/app/Actions/RemoteProcess/RunRemoteProcess.php b/app/Actions/CoolifyTask/RunRemoteProcess.php similarity index 99% rename from app/Actions/RemoteProcess/RunRemoteProcess.php rename to app/Actions/CoolifyTask/RunRemoteProcess.php index 41e86b60d..a8c49a7c7 100644 --- a/app/Actions/RemoteProcess/RunRemoteProcess.php +++ b/app/Actions/CoolifyTask/RunRemoteProcess.php @@ -1,6 +1,6 @@ value, + ) { + } +} diff --git a/app/Data/RemoteProcessArgs.php b/app/Data/RemoteProcessArgs.php deleted file mode 100644 index cdf13cac4..000000000 --- a/app/Data/RemoteProcessArgs.php +++ /dev/null @@ -1,24 +0,0 @@ -value, - public string $status = ProcessStatus::HOLDING->value, - public ?Model $model = null, - ) { - } -} diff --git a/app/Http/Controllers/ProjectController.php b/app/Http/Controllers/ProjectController.php index 1bcb848f7..b1c65ec61 100644 --- a/app/Http/Controllers/ProjectController.php +++ b/app/Http/Controllers/ProjectController.php @@ -62,7 +62,10 @@ public function deployment() if (!$application) { return redirect()->route('home'); } - $activity = Activity::where('properties->deployment_uuid', '=', $deployment_uuid)->first(); + $activity = Activity::query() + ->where('properties->type', '=', 'deployment') + ->where('properties->uuid', '=', $deployment_uuid) + ->first(); return view('project.deployment', [ 'activity' => $activity, diff --git a/app/Http/Livewire/DeployApplication.php b/app/Http/Livewire/DeployApplication.php index 8531ed7db..321e11563 100644 --- a/app/Http/Livewire/DeployApplication.php +++ b/app/Http/Livewire/DeployApplication.php @@ -48,13 +48,13 @@ public function start() public function stop() { - runRemoteCommandSync($this->destination->server, ["docker stop -t 0 {$this->application->uuid} >/dev/null 2>&1"]); + instantRemoteProcess($this->destination->server, ["docker stop -t 0 {$this->application->uuid} >/dev/null 2>&1"]); $this->application->status = 'stopped'; $this->application->save(); } public function kill() { - runRemoteCommandSync($this->destination->server, ["docker rm -f {$this->application->uuid}"]); + instantRemoteProcess($this->destination->server, ["docker rm -f {$this->application->uuid}"]); if ($this->application->status != 'exited') { $this->application->status = 'exited'; $this->application->save(); diff --git a/app/Http/Livewire/PollActivity.php b/app/Http/Livewire/PollActivity.php index da8ed5252..f29a5b01f 100644 --- a/app/Http/Livewire/PollActivity.php +++ b/app/Http/Livewire/PollActivity.php @@ -2,6 +2,7 @@ namespace App\Http\Livewire; +use App\Enums\ActivityTypes; use Livewire\Component; use Spatie\Activitylog\Models\Activity; @@ -14,7 +15,9 @@ class PollActivity extends Component public function polling() { if ( is_null($this->activity) && isset($this->deployment_uuid)) { - $this->activity = Activity::where('properties->deployment_uuid', '=', $this->deployment_uuid) + $this->activity = Activity::query() + ->where('properties->type', '=', ActivityTypes::DEPLOYMENT->value) + ->where('properties->type_uuid', '=', $this->deployment_uuid) ->first(); } else { $this->activity?->refresh(); diff --git a/app/Jobs/ContainerStatusJob.php b/app/Jobs/ContainerStatusJob.php index b66d9fd78..bf9cb8eec 100644 --- a/app/Jobs/ContainerStatusJob.php +++ b/app/Jobs/ContainerStatusJob.php @@ -35,7 +35,7 @@ protected function checkAllServers() $not_found_applications = $applications; $containers = collect(); foreach ($servers as $server) { - $output = runRemoteCommandSync($server, ['docker ps -a -q --format \'{{json .}}\'']); + $output = instantRemoteProcess($server, ['docker ps -a -q --format \'{{json .}}\'']); $containers = $containers->concat(formatDockerCmdOutputToJson($output)); } foreach ($containers as $container) { @@ -68,7 +68,7 @@ protected function checkContainerStatus() return; } if ($application->destination->server) { - $container = runRemoteCommandSync($application->destination->server, ["docker inspect --format '{{json .State}}' {$this->container_id}"]); + $container = instantRemoteProcess($application->destination->server, ["docker inspect --format '{{json .State}}' {$this->container_id}"]); $container = formatDockerCmdOutputToJson($container); $application->status = $container[0]['Status']; $application->save(); diff --git a/app/Jobs/DeployApplicationJob.php b/app/Jobs/DeployApplicationJob.php index f9a6e1a07..055f67283 100644 --- a/app/Jobs/DeployApplicationJob.php +++ b/app/Jobs/DeployApplicationJob.php @@ -2,8 +2,8 @@ namespace App\Jobs; -use App\Actions\RemoteProcess\RunRemoteProcess; -use App\Data\RemoteProcessArgs; +use App\Actions\CoolifyTask\RunRemoteProcess; +use App\Data\CoolifyTaskArgs; use App\Enums\ActivityTypes; use App\Models\Application; use App\Models\CoolifyInstanceSettings; @@ -53,14 +53,14 @@ public function __construct( $private_key_location = savePrivateKeyForServer($server); - $remoteProcessArgs = new RemoteProcessArgs( + $remoteProcessArgs = new CoolifyTaskArgs( server_ip: $server->ip, private_key_location: $private_key_location, - deployment_uuid: $this->deployment_uuid, command: 'overwritten-later', port: $server->port, user: $server->user, type: ActivityTypes::DEPLOYMENT->value, + type_uuid: $this->deployment_uuid, ); $this->activity = activity() diff --git a/app/Jobs/ExecuteRemoteProcess.php b/app/Jobs/HandleCoolifyTaskInQueue.php similarity index 89% rename from app/Jobs/ExecuteRemoteProcess.php rename to app/Jobs/HandleCoolifyTaskInQueue.php index 3915c2d55..d2236027e 100755 --- a/app/Jobs/ExecuteRemoteProcess.php +++ b/app/Jobs/HandleCoolifyTaskInQueue.php @@ -2,7 +2,7 @@ namespace App\Jobs; -use App\Actions\RemoteProcess\RunRemoteProcess; +use App\Actions\CoolifyTask\RunRemoteProcess; use Illuminate\Bus\Queueable; use Illuminate\Contracts\Queue\ShouldQueue; use Illuminate\Foundation\Bus\Dispatchable; @@ -10,7 +10,7 @@ use Illuminate\Queue\SerializesModels; use Spatie\Activitylog\Models\Activity; -class ExecuteRemoteProcess implements ShouldQueue +class HandleCoolifyTaskInQueue implements ShouldQueue { use Dispatchable, InteractsWithQueue, Queueable, SerializesModels; diff --git a/app/Providers/AppServiceProvider.php b/app/Providers/AppServiceProvider.php index 5813a6235..1256de2cb 100644 --- a/app/Providers/AppServiceProvider.php +++ b/app/Providers/AppServiceProvider.php @@ -2,6 +2,7 @@ namespace App\Providers; +use App\Jobs\HandleCoolifyTaskInQueue; use Illuminate\Queue\Events\JobProcessed; use Illuminate\Support\Facades\Process; use Illuminate\Support\Facades\Queue; @@ -31,7 +32,7 @@ public function boot(): void { Queue::after(function (JobProcessed $event) { // @TODO: Remove `coolify-builder` container after the remoteProcess job is finishged and remoteProcess->type == `deployment`. - if ($event->job->resolveName() === 'App\Jobs\ExecuteRemoteProcess') { + if ($event->job->resolveName() === HandleCoolifyTaskInQueue::class) { } }); diff --git a/bootstrap/helpers.php b/bootstrap/helpers.php index 46028e545..9e81da07c 100644 --- a/bootstrap/helpers.php +++ b/bootstrap/helpers.php @@ -1,8 +1,7 @@ new RemoteProcessArgs( + return resolve(PrepareCoolifyTask::class, [ + 'remoteProcessArgs' => new CoolifyTaskArgs( server_ip: $server->ip, private_key_location: $private_key_location, - deployment_uuid: $deployment_uuid, command: <<port, user: $server->user, - type: $deployment_uuid ? ActivityTypes::DEPLOYMENT->value : ActivityTypes::REMOTE_PROCESS->value, + type: $type_uuid, + type_uuid: $type_uuid, model: $model, ), ])(); @@ -117,8 +116,8 @@ function formatDockerLabelsToJson($rawOutput): Collection })[0]; } } -if (!function_exists('runRemoteCommandSync')) { - function runRemoteCommandSync($server, array $command) +if (!function_exists('instantRemoteProcess')) { + function instantRemoteProcess($server, array $command) { $command_string = implode("\n", $command); $private_key_location = savePrivateKeyForServer($server); diff --git a/resources/views/livewire/poll-activity.blade.php b/resources/views/livewire/poll-activity.blade.php index c48f1e440..53a5987d6 100644 --- a/resources/views/livewire/poll-activity.blade.php +++ b/resources/views/livewire/poll-activity.blade.php @@ -1,3 +1,6 @@
-
{{ \App\Actions\RemoteProcess\RunRemoteProcess::decodeOutput($activity) }}
+
{{ \App\Actions\CoolifyTask\RunRemoteProcess::decodeOutput($activity) }}
diff --git a/resources/views/livewire/run-command.blade.php b/resources/views/livewire/run-command.blade.php index 085bc9bb7..3953f2fa4 100755 --- a/resources/views/livewire/run-command.blade.php +++ b/resources/views/livewire/run-command.blade.php @@ -1,7 +1,7 @@