fix: double ws connection
This commit is contained in:
		@@ -27,7 +27,7 @@ class RunRemoteProcess
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
    protected $last_write_at = 0;
 | 
					    protected $last_write_at = 0;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    protected $throttle_interval_ms = 500;
 | 
					    protected $throttle_interval_ms = 200;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    protected int $counter = 1;
 | 
					    protected int $counter = 1;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -74,8 +74,14 @@ class RunRemoteProcess
 | 
				
			|||||||
        $this->time_start = hrtime(true);
 | 
					        $this->time_start = hrtime(true);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        $status = ProcessStatus::IN_PROGRESS;
 | 
					        $status = ProcessStatus::IN_PROGRESS;
 | 
				
			||||||
        $processResult = Process::forever()->run($this->getCommand(), $this->handleOutput(...));
 | 
					        $timeout = config('constants.ssh.command_timeout');
 | 
				
			||||||
 | 
					        $process = Process::timeout($timeout)->start($this->getCommand(), $this->handleOutput(...));
 | 
				
			||||||
 | 
					        $this->activity->properties = $this->activity->properties->merge([
 | 
				
			||||||
 | 
					            'process_id' => $process->id(),
 | 
				
			||||||
 | 
					        ]);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        $processResult = $process->wait();
 | 
				
			||||||
 | 
					        // $processResult = Process::timeout($timeout)->run($this->getCommand(), $this->handleOutput(...));
 | 
				
			||||||
        if ($this->activity->properties->get('status') === ProcessStatus::ERROR->value) {
 | 
					        if ($this->activity->properties->get('status') === ProcessStatus::ERROR->value) {
 | 
				
			||||||
            $status = ProcessStatus::ERROR;
 | 
					            $status = ProcessStatus::ERROR;
 | 
				
			||||||
        } else {
 | 
					        } else {
 | 
				
			||||||
@@ -131,7 +137,6 @@ class RunRemoteProcess
 | 
				
			|||||||
        }
 | 
					        }
 | 
				
			||||||
        $this->current_time = $this->elapsedTime();
 | 
					        $this->current_time = $this->elapsedTime();
 | 
				
			||||||
        $this->activity->description = $this->encodeOutput($type, $output);
 | 
					        $this->activity->description = $this->encodeOutput($type, $output);
 | 
				
			||||||
 | 
					 | 
				
			||||||
        if ($this->isAfterLastThrottle()) {
 | 
					        if ($this->isAfterLastThrottle()) {
 | 
				
			||||||
            // Let's write to database.
 | 
					            // Let's write to database.
 | 
				
			||||||
            DB::transaction(function () {
 | 
					            DB::transaction(function () {
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -16,6 +16,7 @@ class CoolifyTaskArgs extends Data
 | 
				
			|||||||
        public string  $command,
 | 
					        public string  $command,
 | 
				
			||||||
        public string  $type,
 | 
					        public string  $type,
 | 
				
			||||||
        public ?string $type_uuid = null,
 | 
					        public ?string $type_uuid = null,
 | 
				
			||||||
 | 
					        public ?int $process_id = null,
 | 
				
			||||||
        public ?Model  $model = null,
 | 
					        public ?Model  $model = null,
 | 
				
			||||||
        public ?string  $status = null ,
 | 
					        public ?string  $status = null ,
 | 
				
			||||||
        public bool    $ignore_errors = false,
 | 
					        public bool    $ignore_errors = false,
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -8,5 +8,6 @@ enum ProcessStatus: string
 | 
				
			|||||||
    case IN_PROGRESS = 'in_progress';
 | 
					    case IN_PROGRESS = 'in_progress';
 | 
				
			||||||
    case FINISHED = 'finished';
 | 
					    case FINISHED = 'finished';
 | 
				
			||||||
    case ERROR = 'error';
 | 
					    case ERROR = 'error';
 | 
				
			||||||
 | 
					    case KILLED = 'killed';
 | 
				
			||||||
    case CANCELLED = 'cancelled';
 | 
					    case CANCELLED = 'cancelled';
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -11,4 +11,46 @@
 | 
				
			|||||||
    <main class="pb-10 main max-w-screen-2xl">
 | 
					    <main class="pb-10 main max-w-screen-2xl">
 | 
				
			||||||
        {{ $slot }}
 | 
					        {{ $slot }}
 | 
				
			||||||
    </main>
 | 
					    </main>
 | 
				
			||||||
 | 
					    <script data-navigate-once>
 | 
				
			||||||
 | 
					        @auth
 | 
				
			||||||
 | 
					        window.Pusher = Pusher;
 | 
				
			||||||
 | 
					        window.Echo = new Echo({
 | 
				
			||||||
 | 
					            broadcaster: 'pusher',
 | 
				
			||||||
 | 
					            cluster: "{{ env('PUSHER_HOST') }}" || window.location.hostname,
 | 
				
			||||||
 | 
					            key: "{{ env('PUSHER_APP_KEY') }}" || 'coolify',
 | 
				
			||||||
 | 
					            wsHost: "{{ env('PUSHER_HOST') }}" || window.location.hostname,
 | 
				
			||||||
 | 
					            wsPort: "{{ env('PUSHER_PORT') }}" || 6001,
 | 
				
			||||||
 | 
					            wssPort: "{{ env('PUSHER_PORT') }}" || 6001,
 | 
				
			||||||
 | 
					            forceTLS: false,
 | 
				
			||||||
 | 
					            encrypted: true,
 | 
				
			||||||
 | 
					            enableStats: false,
 | 
				
			||||||
 | 
					            enableLogging: true,
 | 
				
			||||||
 | 
					            enabledTransports: ['ws', 'wss'],
 | 
				
			||||||
 | 
					        });
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        if ("{{ auth()->user()->id }}" == 0) {
 | 
				
			||||||
 | 
					            let checkPusherInterval = null;
 | 
				
			||||||
 | 
					            let checkNumber = 0;
 | 
				
			||||||
 | 
					            let errorMessage =
 | 
				
			||||||
 | 
					                "Coolify could not connect to the new realtime service introduced in beta.154.<br>Please check the related <a href='https://coolify.io/docs/cloudflare-tunnels' target='_blank'>documentation</a> or get help on <a href='https://coollabs.io/discord' target='_blank'>Discord</a>.";
 | 
				
			||||||
 | 
					            checkPusherInterval = setInterval(() => {
 | 
				
			||||||
 | 
					                if (window.Echo) {
 | 
				
			||||||
 | 
					                    if (window.Echo.connector.pusher.connection.state !== 'connected') {
 | 
				
			||||||
 | 
					                        checkNumber++;
 | 
				
			||||||
 | 
					                        if (checkNumber > 5) {
 | 
				
			||||||
 | 
					                            clearInterval(checkPusherInterval);
 | 
				
			||||||
 | 
					                            Livewire.emit('error', errorMessage);
 | 
				
			||||||
 | 
					                        }
 | 
				
			||||||
 | 
					                    } else {
 | 
				
			||||||
 | 
					                        console.log('Coolify is now connected to the new realtime service introduced in beta.154.');
 | 
				
			||||||
 | 
					                        clearInterval(checkPusherInterval);
 | 
				
			||||||
 | 
					                    }
 | 
				
			||||||
 | 
					                } else {
 | 
				
			||||||
 | 
					                    clearInterval(checkPusherInterval);
 | 
				
			||||||
 | 
					                    Livewire.emit('error', errorMessage);
 | 
				
			||||||
 | 
					                }
 | 
				
			||||||
 | 
					            }, 2000);
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					        @endauth
 | 
				
			||||||
 | 
					    </script>
 | 
				
			||||||
@endsection
 | 
					@endsection
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -46,46 +46,6 @@
 | 
				
			|||||||
        <x-version class="fixed left-2 bottom-1" />
 | 
					        <x-version class="fixed left-2 bottom-1" />
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        <script data-navigate-once>
 | 
					        <script data-navigate-once>
 | 
				
			||||||
            @auth
 | 
					 | 
				
			||||||
            window.Pusher = Pusher;
 | 
					 | 
				
			||||||
            window.Echo = new Echo({
 | 
					 | 
				
			||||||
                broadcaster: 'pusher',
 | 
					 | 
				
			||||||
                cluster: "{{ env('PUSHER_HOST') }}" || window.location.hostname,
 | 
					 | 
				
			||||||
                key: "{{ env('PUSHER_APP_KEY') }}" || 'coolify',
 | 
					 | 
				
			||||||
                wsHost: "{{ env('PUSHER_HOST') }}" || window.location.hostname,
 | 
					 | 
				
			||||||
                wsPort: "{{ env('PUSHER_PORT') }}" || 6001,
 | 
					 | 
				
			||||||
                wssPort: "{{ env('PUSHER_PORT') }}" || 6001,
 | 
					 | 
				
			||||||
                forceTLS: false,
 | 
					 | 
				
			||||||
                encrypted: true,
 | 
					 | 
				
			||||||
                enableStats: false,
 | 
					 | 
				
			||||||
                enableLogging: true,
 | 
					 | 
				
			||||||
                enabledTransports: ['ws', 'wss'],
 | 
					 | 
				
			||||||
            });
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
            if ("{{ auth()->user()->id }}" == 0) {
 | 
					 | 
				
			||||||
                let checkPusherInterval = null;
 | 
					 | 
				
			||||||
                let checkNumber = 0;
 | 
					 | 
				
			||||||
                let errorMessage =
 | 
					 | 
				
			||||||
                    "Coolify could not connect to the new realtime service introduced in beta.154.<br>Please check the related <a href='https://coolify.io/docs/cloudflare-tunnels' target='_blank'>documentation</a> or get help on <a href='https://coollabs.io/discord' target='_blank'>Discord</a>.";
 | 
					 | 
				
			||||||
                checkPusherInterval = setInterval(() => {
 | 
					 | 
				
			||||||
                    if (window.Echo) {
 | 
					 | 
				
			||||||
                        if (window.Echo.connector.pusher.connection.state !== 'connected') {
 | 
					 | 
				
			||||||
                            checkNumber++;
 | 
					 | 
				
			||||||
                            if (checkNumber > 5) {
 | 
					 | 
				
			||||||
                                clearInterval(checkPusherInterval);
 | 
					 | 
				
			||||||
                                Livewire.emit('error', errorMessage);
 | 
					 | 
				
			||||||
                            }
 | 
					 | 
				
			||||||
                        } else {
 | 
					 | 
				
			||||||
                            console.log('Coolify is now connected to the new realtime service introduced in beta.154.');
 | 
					 | 
				
			||||||
                            clearInterval(checkPusherInterval);
 | 
					 | 
				
			||||||
                        }
 | 
					 | 
				
			||||||
                    } else {
 | 
					 | 
				
			||||||
                        clearInterval(checkPusherInterval);
 | 
					 | 
				
			||||||
                        Livewire.emit('error', errorMessage);
 | 
					 | 
				
			||||||
                    }
 | 
					 | 
				
			||||||
                }, 2000);
 | 
					 | 
				
			||||||
            }
 | 
					 | 
				
			||||||
            @endauth
 | 
					 | 
				
			||||||
            let checkHealthInterval = null;
 | 
					            let checkHealthInterval = null;
 | 
				
			||||||
            let checkIfIamDeadInterval = null;
 | 
					            let checkIfIamDeadInterval = null;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -12,7 +12,7 @@
 | 
				
			|||||||
        <div
 | 
					        <div
 | 
				
			||||||
            class="scrollbar flex flex-col-reverse w-full overflow-y-auto border border-solid rounded border-coolgray-300 max-h-[32rem] p-4 pt-6 text-xs text-white">
 | 
					            class="scrollbar flex flex-col-reverse w-full overflow-y-auto border border-solid rounded border-coolgray-300 max-h-[32rem] p-4 pt-6 text-xs text-white">
 | 
				
			||||||
 | 
					
 | 
				
			||||||
            <pre class="font-mono whitespace-pre-wrap" @if ($isPollingActive) wire:poll.2000ms="polling" @endif>{{ RunRemoteProcess::decodeOutput($this->activity) }}</pre>
 | 
					            <pre class="font-mono whitespace-pre-wrap" @if ($isPollingActive) wire:poll.1000ms="polling" @endif>{{ RunRemoteProcess::decodeOutput($this->activity) }}</pre>
 | 
				
			||||||
        </div>
 | 
					        </div>
 | 
				
			||||||
    @endif
 | 
					    @endif
 | 
				
			||||||
</div>
 | 
					</div>
 | 
				
			||||||
 
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user