39 lines
		
	
	
		
			1.1 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
			
		
		
	
	
			39 lines
		
	
	
		
			1.1 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
| <?php
 | |
| 
 | |
| namespace App\Actions\Proxy;
 | |
| 
 | |
| use App\Events\ProxyStatusChanged;
 | |
| use App\Events\ProxyStatusChangedUI;
 | |
| use App\Models\Server;
 | |
| use App\Services\ProxyDashboardCacheService;
 | |
| use Lorisleiva\Actions\Concerns\AsAction;
 | |
| 
 | |
| class StopProxy
 | |
| {
 | |
|     use AsAction;
 | |
| 
 | |
|     public function handle(Server $server, bool $forceStop = true, int $timeout = 30)
 | |
|     {
 | |
|         try {
 | |
|             $containerName = $server->isSwarm() ? 'coolify-proxy_traefik' : 'coolify-proxy';
 | |
|             $server->proxy->status = 'stopping';
 | |
|             $server->save();
 | |
|             ProxyStatusChangedUI::dispatch($server->team_id);
 | |
| 
 | |
|             instant_remote_process(command: [
 | |
|                 "docker stop --time=$timeout $containerName",
 | |
|                 "docker rm -f $containerName",
 | |
|             ], server: $server, throwError: false);
 | |
| 
 | |
|             $server->proxy->force_stop = $forceStop;
 | |
|             $server->proxy->status = 'exited';
 | |
|             $server->save();
 | |
|         } catch (\Throwable $e) {
 | |
|             return handleError($e);
 | |
|         } finally {
 | |
|             ProxyDashboardCacheService::clearCache($server);
 | |
|             ProxyStatusChanged::dispatch($server->id);
 | |
|         }
 | |
|     }
 | |
| }
 | 
