mirror of
https://github.com/vitodeploy/vito.git
synced 2025-07-05 16:02:34 +00:00
Add workers to servers (#547)
This commit is contained in:
@ -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');
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -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;
|
||||
}
|
||||
}
|
||||
|
@ -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);
|
||||
}
|
Reference in New Issue
Block a user