mirror of
https://github.com/vitodeploy/vito.git
synced 2025-07-02 14:36:17 +00:00
Add workers to servers (#547)
This commit is contained in:
@ -12,7 +12,7 @@ class SyncDatabaseUsers
|
||||
public function sync(Server $server): void
|
||||
{
|
||||
$service = $server->database();
|
||||
if (! $service) {
|
||||
if (! $service instanceof \App\Models\Service) {
|
||||
return;
|
||||
}
|
||||
/** @var Database $handler */
|
||||
|
@ -12,7 +12,7 @@ class SyncDatabases
|
||||
public function sync(Server $server): void
|
||||
{
|
||||
$service = $server->database();
|
||||
if (! $service) {
|
||||
if (! $service instanceof \App\Models\Service) {
|
||||
return;
|
||||
}
|
||||
/** @var Database $handler */
|
||||
|
@ -1,13 +0,0 @@
|
||||
<?php
|
||||
|
||||
namespace App\Actions\Queue;
|
||||
|
||||
use App\Models\Queue;
|
||||
|
||||
class DeleteQueue
|
||||
{
|
||||
public function delete(Queue $queue): void
|
||||
{
|
||||
$queue->delete();
|
||||
}
|
||||
}
|
@ -1,21 +0,0 @@
|
||||
<?php
|
||||
|
||||
namespace App\Actions\Queue;
|
||||
|
||||
use App\Models\Queue;
|
||||
use App\Models\Service;
|
||||
use App\SSH\Services\ProcessManager\ProcessManager;
|
||||
|
||||
class GetQueueLogs
|
||||
{
|
||||
public function getLogs(Queue $queue): string
|
||||
{
|
||||
/** @var Service $service */
|
||||
$service = $queue->server->processManager();
|
||||
|
||||
/** @var ProcessManager $handler */
|
||||
$handler = $service->handler();
|
||||
|
||||
return $handler->getLogs($queue->user, $queue->getLogFile());
|
||||
}
|
||||
}
|
@ -1,56 +0,0 @@
|
||||
<?php
|
||||
|
||||
namespace App\Actions\Queue;
|
||||
|
||||
use App\Enums\QueueStatus;
|
||||
use App\Models\Queue;
|
||||
use App\Models\Service;
|
||||
use App\SSH\Services\ProcessManager\ProcessManager;
|
||||
|
||||
class ManageQueue
|
||||
{
|
||||
public function start(Queue $queue): void
|
||||
{
|
||||
$queue->status = QueueStatus::STARTING;
|
||||
$queue->save();
|
||||
dispatch(function () use ($queue): void {
|
||||
/** @var Service $service */
|
||||
$service = $queue->server->processManager();
|
||||
/** @var ProcessManager $handler */
|
||||
$handler = $service->handler();
|
||||
$handler->start($queue->id, $queue->site_id);
|
||||
$queue->status = QueueStatus::RUNNING;
|
||||
$queue->save();
|
||||
})->onConnection('ssh');
|
||||
}
|
||||
|
||||
public function stop(Queue $queue): void
|
||||
{
|
||||
$queue->status = QueueStatus::STOPPING;
|
||||
$queue->save();
|
||||
dispatch(function () use ($queue): void {
|
||||
/** @var Service $service */
|
||||
$service = $queue->server->processManager();
|
||||
/** @var ProcessManager $handler */
|
||||
$handler = $service->handler();
|
||||
$handler->stop($queue->id, $queue->site_id);
|
||||
$queue->status = QueueStatus::STOPPED;
|
||||
$queue->save();
|
||||
})->onConnection('ssh');
|
||||
}
|
||||
|
||||
public function restart(Queue $queue): void
|
||||
{
|
||||
$queue->status = QueueStatus::RESTARTING;
|
||||
$queue->save();
|
||||
dispatch(function () use ($queue): void {
|
||||
/** @var Service $service */
|
||||
$service = $queue->server->processManager();
|
||||
/** @var ProcessManager $handler */
|
||||
$handler = $service->handler();
|
||||
$handler->restart($queue->id, $queue->site_id);
|
||||
$queue->status = QueueStatus::RUNNING;
|
||||
$queue->save();
|
||||
})->onConnection('ssh');
|
||||
}
|
||||
}
|
@ -1,63 +1,63 @@
|
||||
<?php
|
||||
|
||||
namespace App\Actions\Queue;
|
||||
namespace App\Actions\Worker;
|
||||
|
||||
use App\Enums\QueueStatus;
|
||||
use App\Models\Queue;
|
||||
use App\Enums\WorkerStatus;
|
||||
use App\Models\Server;
|
||||
use App\Models\Service;
|
||||
use App\Models\Site;
|
||||
use App\Models\Worker;
|
||||
use App\SSH\Services\ProcessManager\ProcessManager;
|
||||
use Illuminate\Validation\Rule;
|
||||
use Illuminate\Validation\ValidationException;
|
||||
|
||||
class EditQueue
|
||||
class CreateWorker
|
||||
{
|
||||
/**
|
||||
* @param array<string, mixed> $input
|
||||
*
|
||||
* @throws ValidationException
|
||||
*/
|
||||
public function edit(Queue $queue, array $input): void
|
||||
public function create(Server $server, array $input, ?Site $site = null): void
|
||||
{
|
||||
$queue->fill([
|
||||
$worker = new Worker([
|
||||
'server_id' => $server->id,
|
||||
'site_id' => $site?->id,
|
||||
'command' => $input['command'],
|
||||
'user' => $input['user'],
|
||||
'auto_start' => $input['auto_start'] ? 1 : 0,
|
||||
'auto_restart' => $input['auto_restart'] ? 1 : 0,
|
||||
'numprocs' => $input['numprocs'],
|
||||
'status' => QueueStatus::RESTARTING,
|
||||
'status' => WorkerStatus::CREATING,
|
||||
]);
|
||||
$queue->save();
|
||||
$worker->save();
|
||||
|
||||
dispatch(function () use ($queue): void {
|
||||
dispatch(function () use ($worker): void {
|
||||
/** @var Service $service */
|
||||
$service = $queue->server->processManager();
|
||||
$service = $worker->server->processManager();
|
||||
/** @var ProcessManager $processManager */
|
||||
$processManager = $service->handler();
|
||||
$processManager->delete($queue->id, $queue->site_id);
|
||||
|
||||
$processManager->create(
|
||||
$queue->id,
|
||||
$queue->command,
|
||||
$queue->user,
|
||||
$queue->auto_start,
|
||||
$queue->auto_restart,
|
||||
$queue->numprocs,
|
||||
$queue->getLogFile(),
|
||||
$queue->site_id
|
||||
$worker->id,
|
||||
$worker->command,
|
||||
$worker->user,
|
||||
$worker->auto_start,
|
||||
$worker->auto_restart,
|
||||
$worker->numprocs,
|
||||
$worker->getLogFile(),
|
||||
$worker->site_id
|
||||
);
|
||||
$queue->status = QueueStatus::RUNNING;
|
||||
$queue->save();
|
||||
})->catch(function () use ($queue): void {
|
||||
$queue->status = QueueStatus::FAILED;
|
||||
$queue->save();
|
||||
$worker->status = WorkerStatus::RUNNING;
|
||||
$worker->save();
|
||||
})->catch(function () use ($worker): void {
|
||||
$worker->delete();
|
||||
})->onConnection('ssh');
|
||||
}
|
||||
|
||||
/**
|
||||
* @return array<string, array<string>>
|
||||
*/
|
||||
public static function rules(Server $server): array
|
||||
public static function rules(Server $server, ?Site $site = null): array
|
||||
{
|
||||
return [
|
||||
'command' => [
|
||||
@ -65,10 +65,7 @@ public static function rules(Server $server): array
|
||||
],
|
||||
'user' => [
|
||||
'required',
|
||||
Rule::in([
|
||||
'root',
|
||||
$server->ssh_user,
|
||||
]),
|
||||
Rule::in($site?->getSshUsers() ?? $server->getSshUsers()),
|
||||
],
|
||||
'numprocs' => [
|
||||
'required',
|
13
app/Actions/Worker/DeleteWorker.php
Normal file
13
app/Actions/Worker/DeleteWorker.php
Normal file
@ -0,0 +1,13 @@
|
||||
<?php
|
||||
|
||||
namespace App\Actions\Worker;
|
||||
|
||||
use App\Models\Worker;
|
||||
|
||||
class DeleteWorker
|
||||
{
|
||||
public function delete(Worker $worker): void
|
||||
{
|
||||
$worker->delete();
|
||||
}
|
||||
}
|
@ -1,64 +1,64 @@
|
||||
<?php
|
||||
|
||||
namespace App\Actions\Queue;
|
||||
namespace App\Actions\Worker;
|
||||
|
||||
use App\Enums\QueueStatus;
|
||||
use App\Models\Queue;
|
||||
use App\Enums\WorkerStatus;
|
||||
use App\Models\Server;
|
||||
use App\Models\Service;
|
||||
use App\Models\Site;
|
||||
use App\Models\Worker;
|
||||
use App\SSH\Services\ProcessManager\ProcessManager;
|
||||
use Illuminate\Validation\Rule;
|
||||
use Illuminate\Validation\ValidationException;
|
||||
|
||||
class CreateQueue
|
||||
class EditWorker
|
||||
{
|
||||
/**
|
||||
* @param Server|Site $queueable
|
||||
* @param array<string, mixed> $input
|
||||
*
|
||||
* @throws ValidationException
|
||||
*/
|
||||
public function create(mixed $queueable, array $input): void
|
||||
public function edit(Worker $worker, array $input): void
|
||||
{
|
||||
$queue = new Queue([
|
||||
'server_id' => $queueable instanceof Server ? $queueable->id : $queueable->server_id,
|
||||
'site_id' => $queueable instanceof Site ? $queueable->id : null,
|
||||
$worker->fill([
|
||||
'command' => $input['command'],
|
||||
'user' => $input['user'],
|
||||
'auto_start' => $input['auto_start'] ? 1 : 0,
|
||||
'auto_restart' => $input['auto_restart'] ? 1 : 0,
|
||||
'numprocs' => $input['numprocs'],
|
||||
'status' => QueueStatus::CREATING,
|
||||
'status' => WorkerStatus::RESTARTING,
|
||||
]);
|
||||
$queue->save();
|
||||
$worker->save();
|
||||
|
||||
dispatch(function () use ($queue): void {
|
||||
dispatch(function () use ($worker): void {
|
||||
/** @var Service $service */
|
||||
$service = $queue->server->processManager();
|
||||
$service = $worker->server->processManager();
|
||||
/** @var ProcessManager $processManager */
|
||||
$processManager = $service->handler();
|
||||
$processManager->delete($worker->id, $worker->site_id);
|
||||
|
||||
$processManager->create(
|
||||
$queue->id,
|
||||
$queue->command,
|
||||
$queue->user,
|
||||
$queue->auto_start,
|
||||
$queue->auto_restart,
|
||||
$queue->numprocs,
|
||||
$queue->getLogFile(),
|
||||
$queue->site_id
|
||||
$worker->id,
|
||||
$worker->command,
|
||||
$worker->user,
|
||||
$worker->auto_start,
|
||||
$worker->auto_restart,
|
||||
$worker->numprocs,
|
||||
$worker->getLogFile(),
|
||||
$worker->site_id
|
||||
);
|
||||
$queue->status = QueueStatus::RUNNING;
|
||||
$queue->save();
|
||||
})->catch(function () use ($queue): void {
|
||||
$queue->delete();
|
||||
$worker->status = WorkerStatus::RUNNING;
|
||||
$worker->save();
|
||||
})->catch(function () use ($worker): void {
|
||||
$worker->status = WorkerStatus::FAILED;
|
||||
$worker->save();
|
||||
})->onConnection('ssh');
|
||||
}
|
||||
|
||||
/**
|
||||
* @return array<string, array<string>>
|
||||
*/
|
||||
public static function rules(Site $site): array
|
||||
public static function rules(Server $server, ?Site $site = null): array
|
||||
{
|
||||
return [
|
||||
'command' => [
|
||||
@ -66,10 +66,7 @@ public static function rules(Site $site): array
|
||||
],
|
||||
'user' => [
|
||||
'required',
|
||||
Rule::in([
|
||||
'root',
|
||||
$site->user,
|
||||
]),
|
||||
Rule::in($site?->getSshUsers() ?? $server->getSshUsers()),
|
||||
],
|
||||
'numprocs' => [
|
||||
'required',
|
21
app/Actions/Worker/GetWorkerLogs.php
Normal file
21
app/Actions/Worker/GetWorkerLogs.php
Normal file
@ -0,0 +1,21 @@
|
||||
<?php
|
||||
|
||||
namespace App\Actions\Worker;
|
||||
|
||||
use App\Models\Service;
|
||||
use App\Models\Worker;
|
||||
use App\SSH\Services\ProcessManager\ProcessManager;
|
||||
|
||||
class GetWorkerLogs
|
||||
{
|
||||
public function getLogs(Worker $worker): string
|
||||
{
|
||||
/** @var Service $service */
|
||||
$service = $worker->server->processManager();
|
||||
|
||||
/** @var ProcessManager $handler */
|
||||
$handler = $service->handler();
|
||||
|
||||
return $handler->getLogs($worker->user, $worker->getLogFile());
|
||||
}
|
||||
}
|
56
app/Actions/Worker/ManageWorker.php
Normal file
56
app/Actions/Worker/ManageWorker.php
Normal file
@ -0,0 +1,56 @@
|
||||
<?php
|
||||
|
||||
namespace App\Actions\Worker;
|
||||
|
||||
use App\Enums\WorkerStatus;
|
||||
use App\Models\Service;
|
||||
use App\Models\Worker;
|
||||
use App\SSH\Services\ProcessManager\ProcessManager;
|
||||
|
||||
class ManageWorker
|
||||
{
|
||||
public function start(Worker $worker): void
|
||||
{
|
||||
$worker->status = WorkerStatus::STARTING;
|
||||
$worker->save();
|
||||
dispatch(function () use ($worker): void {
|
||||
/** @var Service $service */
|
||||
$service = $worker->server->processManager();
|
||||
/** @var ProcessManager $handler */
|
||||
$handler = $service->handler();
|
||||
$handler->start($worker->id, $worker->site_id);
|
||||
$worker->status = WorkerStatus::RUNNING;
|
||||
$worker->save();
|
||||
})->onConnection('ssh');
|
||||
}
|
||||
|
||||
public function stop(Worker $worker): void
|
||||
{
|
||||
$worker->status = WorkerStatus::STOPPING;
|
||||
$worker->save();
|
||||
dispatch(function () use ($worker): void {
|
||||
/** @var Service $service */
|
||||
$service = $worker->server->processManager();
|
||||
/** @var ProcessManager $handler */
|
||||
$handler = $service->handler();
|
||||
$handler->stop($worker->id, $worker->site_id);
|
||||
$worker->status = WorkerStatus::STOPPED;
|
||||
$worker->save();
|
||||
})->onConnection('ssh');
|
||||
}
|
||||
|
||||
public function restart(Worker $worker): void
|
||||
{
|
||||
$worker->status = WorkerStatus::RESTARTING;
|
||||
$worker->save();
|
||||
dispatch(function () use ($worker): void {
|
||||
/** @var Service $service */
|
||||
$service = $worker->server->processManager();
|
||||
/** @var ProcessManager $handler */
|
||||
$handler = $service->handler();
|
||||
$handler->restart($worker->id, $worker->site_id);
|
||||
$worker->status = WorkerStatus::RUNNING;
|
||||
$worker->save();
|
||||
})->onConnection('ssh');
|
||||
}
|
||||
}
|
Reference in New Issue
Block a user