Feat/Fix: Proxy stop and restart confirmation
This commit is contained in:
@@ -7,6 +7,8 @@ use App\Actions\Proxy\StartProxy;
|
||||
use App\Events\ProxyStatusChanged;
|
||||
use App\Models\Server;
|
||||
use Livewire\Component;
|
||||
use Illuminate\Support\Facades\Process;
|
||||
use Illuminate\Process\InvokedProcess;
|
||||
|
||||
class Deploy extends Component
|
||||
{
|
||||
@@ -94,21 +96,43 @@ class Deploy extends Component
|
||||
public function stop(bool $forceStop = true)
|
||||
{
|
||||
try {
|
||||
if ($this->server->isSwarm()) {
|
||||
instant_remote_process([
|
||||
'docker service rm coolify-proxy_traefik',
|
||||
], $this->server);
|
||||
} else {
|
||||
instant_remote_process([
|
||||
'docker rm -f coolify-proxy',
|
||||
], $this->server);
|
||||
$containerName = $this->server->isSwarm() ? 'coolify-proxy_traefik' : 'coolify-proxy';
|
||||
$timeout = 30;
|
||||
|
||||
$process = $this->stopContainer($containerName, $timeout);
|
||||
|
||||
$startTime = time();
|
||||
while ($process->running()) {
|
||||
if (time() - $startTime >= $timeout) {
|
||||
$this->forceStopContainer($containerName);
|
||||
break;
|
||||
}
|
||||
usleep(100000);
|
||||
}
|
||||
$this->server->proxy->status = 'exited';
|
||||
$this->server->proxy->force_stop = $forceStop;
|
||||
$this->server->save();
|
||||
$this->dispatch('proxyStatusUpdated');
|
||||
|
||||
$this->removeContainer($containerName);
|
||||
} catch (\Throwable $e) {
|
||||
return handleError($e, $this);
|
||||
} finally {
|
||||
$this->server->proxy->force_stop = $forceStop;
|
||||
$this->server->proxy->status = 'exited';
|
||||
$this->server->save();
|
||||
$this->dispatch('proxyStatusUpdated');
|
||||
}
|
||||
}
|
||||
|
||||
private function stopContainer(string $containerName, int $timeout): InvokedProcess
|
||||
{
|
||||
return Process::timeout($timeout)->start("docker stop --time=$timeout $containerName");
|
||||
}
|
||||
|
||||
private function forceStopContainer(string $containerName)
|
||||
{
|
||||
instant_remote_process(["docker kill $containerName"], $this->server, throwError: false);
|
||||
}
|
||||
|
||||
private function removeContainer(string $containerName)
|
||||
{
|
||||
instant_remote_process(["docker rm -f $containerName"], $this->server, throwError: false);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -24,7 +24,17 @@
|
||||
</a>
|
||||
</button>
|
||||
@endif
|
||||
<x-modal-confirmation @click="$wire.dispatch('restartEvent')">
|
||||
<x-modal-confirmation
|
||||
title="Confirm Proxy Restart?"
|
||||
buttonTitle="Restart Proxy"
|
||||
submitAction="restart"
|
||||
:actions="['This proxy will be stopped and started again.', 'All resources hosted on coolify will be unavailable during the restart.']"
|
||||
:confirmWithText="false"
|
||||
:confirmWithPassword="false"
|
||||
step2ButtonText="Restart Proxy"
|
||||
:dispatchEvent="true"
|
||||
dispatchEventType="restartEvent"
|
||||
>
|
||||
<x-slot:button-title>
|
||||
<svg class="w-5 h-5 dark:text-warning" viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg">
|
||||
<g fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round"
|
||||
@@ -35,10 +45,18 @@
|
||||
</svg>
|
||||
Restart Proxy
|
||||
</x-slot:button-title>
|
||||
This proxy will be stopped and started. It is not reversible. <br>All resources will be unavailable
|
||||
during the restart. <br>Please think again.
|
||||
</x-modal-confirmation>
|
||||
<x-modal-confirmation @click="$wire.dispatch('stopEvent')">
|
||||
<x-modal-confirmation
|
||||
title="Confirm Proxy Stopping?"
|
||||
buttonTitle="Stop Proxy"
|
||||
submitAction="stop(true)"
|
||||
:actions="['The coolify proxy will be stopped.', 'All resources hosted on coolify will be unavailable.']"
|
||||
:confirmWithText="false"
|
||||
:confirmWithPassword="false"
|
||||
step2ButtonText="Stop Proxy"
|
||||
:dispatchEvent="true"
|
||||
dispatchEventType="stopEvent"
|
||||
>
|
||||
<x-slot:button-title>
|
||||
<svg xmlns="http://www.w3.org/2000/svg" class="w-5 h-5 text-error" viewBox="0 0 24 24"
|
||||
stroke-width="2" stroke="currentColor" fill="none" stroke-linecap="round"
|
||||
@@ -51,8 +69,6 @@
|
||||
</svg>
|
||||
Stop Proxy
|
||||
</x-slot:button-title>
|
||||
This proxy will be stopped. It is not reversible. <br>All resources will be unavailable.
|
||||
<br>Please think again.
|
||||
</x-modal-confirmation>
|
||||
</div>
|
||||
@else
|
||||
|
||||
Reference in New Issue
Block a user