Refactoring: extract process handling from async job.

This commit is contained in:
Joao Patricio
2023-03-21 09:56:49 +00:00
parent 83a7ef21f3
commit cf121062a1
6 changed files with 34 additions and 14 deletions

View File

@@ -0,0 +1,45 @@
<?php
namespace App\Actions\RemoteProcess;
use App\Enums\ActivityTypes;
use App\Enums\ProcessStatus;
use App\Jobs\ExecuteCoolifyProcess;
use Spatie\Activitylog\Contracts\Activity;
class DispatchRemoteProcess
{
protected Activity $activity;
// TODO Left 'root' as default user instead of 'coolify' because
// there's a task at TODO.md to run docker without sudo
public function __construct(
protected string $destination,
protected string $command,
protected ?int $port = 22,
protected ?string $user = 'root',
){
$this->activity = activity()
->withProperties([
'type' => ActivityTypes::COOLIFY_PROCESS,
'status' => ProcessStatus::HOLDING,
'user' => $this->user,
'destination' => $this->destination,
'port' => $this->port,
'command' => $this->command,
])
->log("Awaiting command to start...\n\n");
}
public function __invoke(): Activity
{
$job = new ExecuteCoolifyProcess($this->activity);
dispatch($job);
$this->activity->refresh();
return $this->activity;
}
}

View File

@@ -2,14 +2,17 @@
namespace App\Actions\RemoteProcess;
use App\Enums\ActivityTypes;
use App\Enums\ProcessStatus;
use Illuminate\Process\ProcessResult;
use Illuminate\Support\Facades\DB;
use Illuminate\Support\Facades\Process;
use Spatie\Activitylog\Contracts\Activity;
class RemoteProcess
class RunRemoteProcess
{
public Activity $activity;
protected $timeStart;
protected $currentTime;
@@ -25,9 +28,14 @@ class RemoteProcess
/**
* Create a new job instance.
*/
public function __construct(
public Activity $activity,
){}
public function __construct(Activity $activity)
{
if ($activity->getExtraProperty('type') !== ActivityTypes::COOLIFY_PROCESS->value) {
throw new \RuntimeException('Incompatible Activity to run a remote command.');
}
$this->activity = $activity;
}
public function __invoke(): ProcessResult
{