mirror of
https://github.com/vitodeploy/vito.git
synced 2025-04-21 10:51:36 +00:00
85 lines
2.7 KiB
PHP
85 lines
2.7 KiB
PHP
<?php
|
|
|
|
namespace App\Actions\Service;
|
|
|
|
use App\Enums\ServiceStatus;
|
|
use App\Models\Service;
|
|
|
|
class Manage
|
|
{
|
|
public function start(Service $service): void
|
|
{
|
|
$service->status = ServiceStatus::STARTING;
|
|
$service->save();
|
|
dispatch(function () use ($service) {
|
|
$status = $service->server->systemd()->start($service->unit);
|
|
if (str($status)->contains('Active: active')) {
|
|
$service->status = ServiceStatus::READY;
|
|
} else {
|
|
$service->status = ServiceStatus::FAILED;
|
|
}
|
|
$service->save();
|
|
})->onConnection('ssh');
|
|
}
|
|
|
|
public function stop(Service $service): void
|
|
{
|
|
$service->status = ServiceStatus::STOPPING;
|
|
$service->save();
|
|
dispatch(function () use ($service) {
|
|
$status = $service->server->systemd()->stop($service->unit);
|
|
if (str($status)->contains('Active: inactive')) {
|
|
$service->status = ServiceStatus::STOPPED;
|
|
} else {
|
|
$service->status = ServiceStatus::FAILED;
|
|
}
|
|
$service->save();
|
|
})->onConnection('ssh');
|
|
}
|
|
|
|
public function restart(Service $service): void
|
|
{
|
|
$service->status = ServiceStatus::RESTARTING;
|
|
$service->save();
|
|
dispatch(function () use ($service) {
|
|
$status = $service->server->systemd()->restart($service->unit);
|
|
if (str($status)->contains('Active: active')) {
|
|
$service->status = ServiceStatus::READY;
|
|
} else {
|
|
$service->status = ServiceStatus::FAILED;
|
|
}
|
|
$service->save();
|
|
})->onConnection('ssh');
|
|
}
|
|
|
|
public function enable(Service $service): void
|
|
{
|
|
$service->status = ServiceStatus::ENABLING;
|
|
$service->save();
|
|
dispatch(function () use ($service) {
|
|
$status = $service->server->systemd()->enable($service->unit);
|
|
if (str($status)->contains('Active: active')) {
|
|
$service->status = ServiceStatus::READY;
|
|
} else {
|
|
$service->status = ServiceStatus::FAILED;
|
|
}
|
|
$service->save();
|
|
})->onConnection('ssh');
|
|
}
|
|
|
|
public function disable(Service $service): void
|
|
{
|
|
$service->status = ServiceStatus::DISABLING;
|
|
$service->save();
|
|
dispatch(function () use ($service) {
|
|
$status = $service->server->systemd()->disable($service->unit);
|
|
if (str($status)->contains('Active: inactive')) {
|
|
$service->status = ServiceStatus::DISABLED;
|
|
} else {
|
|
$service->status = ServiceStatus::FAILED;
|
|
}
|
|
$service->save();
|
|
})->onConnection('ssh');
|
|
}
|
|
}
|