coolifyWebUrl = config('coolify.web_url'); $this->refreshServices($client); $this->refreshLogs(); } public function restart(string $serviceId): void { $this->performAction($serviceId, 'restart'); } public function redeploy(string $serviceId): void { $this->performAction($serviceId, 'redeploy'); } protected function performAction(string $serviceId, string $action): void { $client = app(CoolifyClient::class); if (! $this->isKnownService($serviceId)) { Notification::make() ->danger() ->title('Unknown service') ->body("The service ID {$serviceId} is not configured.") ->send(); return; } try { $action === 'restart' ? $client->restartService($serviceId, auth()->user()) : $client->redeployService($serviceId, auth()->user()); Notification::make() ->success() ->title(ucfirst($action).' requested') ->body("Coolify accepted the {$action} action for {$serviceId}.") ->send(); } catch (\Throwable $exception) { Notification::make() ->danger() ->title('Coolify request failed') ->body($exception->getMessage()) ->send(); } $this->refreshServices($client); $this->refreshLogs(); } protected function refreshServices(CoolifyClient $client): void { $serviceMap = config('coolify.services', []); $results = []; foreach ($serviceMap as $label => $id) { try { $status = $client->serviceStatus($id); $results[] = [ 'label' => ucfirst($label), 'service_id' => $id, 'status' => Arr::get($status, 'data.status', 'unknown'), ]; } catch (\Throwable $e) { $results[] = [ 'label' => ucfirst($label), 'service_id' => $id, 'status' => 'error', ]; } } $this->services = $results; } protected function refreshLogs(): void { $this->recentLogs = CoolifyActionLog::query() ->with('user') ->latest() ->limit(5) ->get() ->map(fn ($log) => [ 'created_at' => $log->created_at->diffForHumans(), 'user' => $log->user?->name ?? 'System', 'service_id' => $log->service_id, 'action' => $log->action, 'status_code' => $log->status_code, ]) ->toArray(); } protected function isKnownService(string $serviceId): bool { return in_array($serviceId, array_values(config('coolify.services', [])), true); } }