Add workers to servers (#547)

This commit is contained in:
Saeed Vaziry
2025-03-16 14:09:15 +01:00
committed by GitHub
parent 48ae561ea4
commit 72352aad8d
42 changed files with 603 additions and 454 deletions

View File

@ -58,7 +58,7 @@
* @property Collection<int, DatabaseUser> $databaseUsers
* @property Collection<int, FirewallRule> $firewallRules
* @property Collection<int, CronJob> $cronJobs
* @property Collection<int, Queue> $queues
* @property Collection<int, Worker> $queues
* @property Collection<int, Backup> $backups
* @property Collection<int, SshKey> $sshKeys
* @property Collection<int, Tag> $tags
@ -125,7 +125,7 @@ public static function boot(): void
try {
$server->sites()->each(function ($site): void {
/** @var Site $site */
$site->queues()->delete();
$site->workers()->delete();
$site->ssls()->delete();
$site->deployments()->delete();
$site->deploymentScript()->delete();
@ -140,7 +140,7 @@ public static function boot(): void
$server->databaseUsers()->delete();
$server->firewallRules()->delete();
$server->cronJobs()->delete();
$server->queues()->delete();
$server->workers()->delete();
$server->daemons()->delete();
$server->sshKeys()->detach();
if (File::exists($server->sshKey()['public_key_path'])) {
@ -265,11 +265,11 @@ public function cronJobs(): HasMany
}
/**
* @return HasMany<Queue, covariant $this>
* @return HasMany<Worker, covariant $this>
*/
public function queues(): HasMany
public function workers(): HasMany
{
return $this->hasMany(Queue::class);
return $this->hasMany(Worker::class);
}
/**
@ -281,11 +281,11 @@ public function backups(): HasMany
}
/**
* @return HasMany<Queue, covariant $this>
* @return HasMany<Worker, covariant $this>
*/
public function daemons(): HasMany
{
return $this->queues()->whereNull('site_id');
return $this->workers()->whereNull('site_id');
}
/**

View File

@ -11,6 +11,7 @@
use App\SSH\Services\PHP\PHP;
use App\SSH\Services\Webserver\Webserver;
use App\Traits\HasProjectThroughServer;
use Database\Factories\SiteFactory;
use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Database\Eloquent\Relations\BelongsTo;
use Illuminate\Database\Eloquent\Relations\HasMany;
@ -44,7 +45,7 @@
* @property Collection<int, Command> $commands
* @property ?GitHook $gitHook
* @property ?DeploymentScript $deploymentScript
* @property Collection<int, Queue> $queues
* @property Collection<int, Worker> $workers
* @property Collection<int, Ssl> $ssls
* @property ?Ssl $activeSsl
* @property string $ssh_key_name
@ -54,7 +55,7 @@
*/
class Site extends AbstractModel
{
/** @use HasFactory<\Database\Factories\SiteFactory> */
/** @use HasFactory<SiteFactory> */
use HasFactory;
use HasProjectThroughServer;
@ -105,9 +106,9 @@ public static function boot(): void
parent::boot();
static::deleting(function (Site $site): void {
$site->queues()->each(function ($queue): void {
/** @var Queue $queue */
$queue->delete();
$site->workers()->each(function ($worker): void {
/** @var Worker $worker */
$worker->delete();
});
$site->ssls()->delete();
$site->deployments()->delete();
@ -186,11 +187,11 @@ public function deploymentScript(): HasOne
}
/**
* @return HasMany<Queue, covariant $this>
* @return HasMany<Worker, covariant $this>
*/
public function queues(): HasMany
public function workers(): HasMany
{
return $this->hasMany(Queue::class);
return $this->hasMany(Worker::class);
}
/**
@ -401,4 +402,21 @@ public function loadBalancerServers(): HasMany
{
return $this->hasMany(LoadBalancerServer::class, 'load_balancer_id');
}
/**
* @return array<string>
*/
public function getSshUsers(): array
{
$users = [
'root',
$this->server->getSshUser(),
];
if ($this->isIsolated()) {
$users[] = $this->user;
}
return $users;
}
}

View File

@ -2,9 +2,9 @@
namespace App\Models;
use App\Enums\QueueStatus;
use App\Enums\WorkerStatus;
use App\SSH\Services\ProcessManager\ProcessManager;
use Database\Factories\QueueFactory;
use Database\Factories\WorkerFactory;
use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Database\Eloquent\Relations\BelongsTo;
use Illuminate\Support\Facades\Log;
@ -24,9 +24,9 @@
* @property Server $server
* @property Site $site
*/
class Queue extends AbstractModel
class Worker extends AbstractModel
{
/** @use HasFactory<QueueFactory> */
/** @use HasFactory<WorkerFactory> */
use HasFactory;
protected $fillable = [
@ -55,28 +55,28 @@ class Queue extends AbstractModel
* @var array<string, string>
*/
public static array $statusColors = [
QueueStatus::RUNNING => 'success',
QueueStatus::CREATING => 'warning',
QueueStatus::DELETING => 'warning',
QueueStatus::FAILED => 'danger',
QueueStatus::STARTING => 'warning',
QueueStatus::STOPPING => 'warning',
QueueStatus::RESTARTING => 'warning',
QueueStatus::STOPPED => 'gray',
WorkerStatus::RUNNING => 'success',
WorkerStatus::CREATING => 'warning',
WorkerStatus::DELETING => 'warning',
WorkerStatus::FAILED => 'danger',
WorkerStatus::STARTING => 'warning',
WorkerStatus::STOPPING => 'warning',
WorkerStatus::RESTARTING => 'warning',
WorkerStatus::STOPPED => 'gray',
];
public static function boot(): void
{
parent::boot();
static::deleting(function (Queue $queue): void {
static::deleting(function (Worker $worker): void {
try {
/** @var Service $service */
$service = $queue->server->processManager();
$service = $worker->server->processManager();
/** @var ProcessManager $handler */
$handler = $service->handler();
$handler->delete($queue->id, $queue->site_id);
$handler->delete($worker->id, $worker->site_id);
} catch (Throwable $e) {
Log::error($e);
}