server->id))->dontRelease()]; } public function uniqueId(): int { return $this->server->id; } public function healthcheck() { $status = instant_remote_process(["docker inspect --format='{{json .State.Status}}' coolify-log-drain"], $this->server, false); if (str($status)->contains('running')) { return true; } else { return false; } } public function handle(): void { // ray("checking log drain statuses for {$this->server->id}"); try { if (!$this->server->isFunctional()) { return; }; $containers = instant_remote_process(["docker container ls -q"], $this->server, false); if (!$containers) { return; } $containers = instant_remote_process(["docker container inspect $(docker container ls -q) --format '{{json .}}'"], $this->server); $containers = format_docker_command_output_to_json($containers); $foundLogDrainContainer = $containers->filter(function ($value, $key) { return data_get($value, 'Name') === '/coolify-log-drain'; })->first(); if (!$foundLogDrainContainer || !$this->healthcheck()) { ray('Log drain container not found or unhealthy. Restarting...'); InstallLogDrain::run($this->server); Sleep::for(10)->seconds(); if ($this->healthcheck()) { if ($this->server->log_drain_notification_sent) { $this->server->team?->notify(new ContainerRestarted('Coolify Log Drainer', $this->server)); $this->server->update(['log_drain_notification_sent' => false]); } return; } if (!$this->server->log_drain_notification_sent) { ray('Log drain container still unhealthy. Sending notification...'); // $this->server->team?->notify(new ContainerStopped('Coolify Log Drainer', $this->server, null)); $this->server->update(['log_drain_notification_sent' => true]); } } else { if ($this->server->log_drain_notification_sent) { $this->server->team?->notify(new ContainerRestarted('Coolify Log Drainer', $this->server)); $this->server->update(['log_drain_notification_sent' => false]); } } } catch (\Throwable $e) { if (!isCloud()) send_internal_notification("CheckLogDrainContainerJob failed on ({$this->server->id}) with: " . $e->getMessage()); ray($e->getMessage()); return handleError($e); } } }