Merge branch 'patricio-wip-11' into patricio-wip-11-merger

# Conflicts:
#	app/Http/Livewire/DeployApplication.php
#	app/Jobs/ContainerStatusJob.php
#	bootstrap/helpers.php
This commit is contained in:
Joao Patricio
2023-05-03 06:29:05 +01:00
16 changed files with 75 additions and 61 deletions

View File

@@ -1,16 +1,16 @@
<?php
namespace App\Actions\RemoteProcess;
namespace App\Actions\CoolifyTask;
use App\Data\RemoteProcessArgs;
use App\Jobs\ExecuteRemoteProcess;
use App\Data\CoolifyTaskArgs;
use App\Jobs\HandleCoolifyTaskInQueue;
use Spatie\Activitylog\Models\Activity;
class DispatchRemoteProcess
class PrepareCoolifyTask
{
protected Activity $activity;
public function __construct(RemoteProcessArgs $remoteProcessArgs)
public function __construct(CoolifyTaskArgs $remoteProcessArgs)
{
if ($remoteProcessArgs->model) {
$properties = $remoteProcessArgs->toArray();
@@ -31,7 +31,7 @@ class DispatchRemoteProcess
public function __invoke(): Activity
{
$job = new ExecuteRemoteProcess($this->activity);
$job = new HandleCoolifyTaskInQueue($this->activity);
dispatch($job);
$this->activity->refresh();
return $this->activity;

View File

@@ -1,6 +1,6 @@
<?php
namespace App\Actions\RemoteProcess;
namespace App\Actions\CoolifyTask;
use App\Enums\ActivityTypes;
use App\Enums\ProcessStatus;

View File

@@ -0,0 +1,23 @@
<?php
namespace App\Data;
use App\Enums\ProcessStatus;
use Illuminate\Database\Eloquent\Model;
use Spatie\LaravelData\Data;
class CoolifyTaskArgs extends Data
{
public function __construct(
public string $server_ip,
public string $private_key_location,
public string $command,
public int $port,
public string $user,
public string $type,
public ?string $type_uuid = null,
public ?Model $model = null,
public string $status = ProcessStatus::HOLDING->value,
) {
}
}

View File

@@ -1,24 +0,0 @@
<?php
namespace App\Data;
use App\Enums\ActivityTypes;
use App\Enums\ProcessStatus;
use Illuminate\Database\Eloquent\Model;
use Spatie\LaravelData\Data;
class RemoteProcessArgs extends Data
{
public function __construct(
public string $server_ip,
public string $private_key_location,
public string|null $deployment_uuid,
public string $command,
public int $port,
public string $user,
public string $type = ActivityTypes::REMOTE_PROCESS->value,
public string $status = ProcessStatus::HOLDING->value,
public ?Model $model = null,
) {
}
}

View File

@@ -93,7 +93,10 @@ class ProjectController extends Controller
if (!$application) {
return redirect()->route('dashboard');
}
$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.application.deployment', [
'application' => $application,

View File

@@ -2,6 +2,7 @@
namespace App\Http\Livewire\Project\Application;
use App\Enums\ActivityTypes;
use Livewire\Component;
use Spatie\Activitylog\Models\Activity;
@@ -14,7 +15,9 @@ class PollDeployment 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();

View File

@@ -38,7 +38,7 @@ class ContainerStatusJob implements ShouldQueue
$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) {
@@ -67,7 +67,7 @@ class ContainerStatusJob implements ShouldQueue
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();

View File

@@ -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\InstanceSettings;
@@ -55,14 +55,14 @@ class DeployApplicationJob implements ShouldQueue
$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()

View File

@@ -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\InteractsWithQueue;
use Illuminate\Queue\SerializesModels;
use Spatie\Activitylog\Models\Activity;
class ExecuteRemoteProcess implements ShouldQueue
class HandleCoolifyTaskInQueue implements ShouldQueue
{
use Dispatchable, InteractsWithQueue, Queueable, SerializesModels;

View File

@@ -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 @@ class AppServiceProvider extends ServiceProvider
{
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) {
}
});