From 111b8b3cda2bf08c48d30fd96a51bcf9e7ff9ba2 Mon Sep 17 00:00:00 2001 From: Lance Pioch Date: Tue, 7 May 2024 20:00:02 -0400 Subject: [PATCH] Add specific logic for CF --- .../Daemon/DaemonServerRepository.php | 27 +++++++++++++++---- 1 file changed, 22 insertions(+), 5 deletions(-) diff --git a/app/Repositories/Daemon/DaemonServerRepository.php b/app/Repositories/Daemon/DaemonServerRepository.php index 6c33d12d0..4c854bee6 100644 --- a/app/Repositories/Daemon/DaemonServerRepository.php +++ b/app/Repositories/Daemon/DaemonServerRepository.php @@ -3,7 +3,10 @@ namespace App\Repositories\Daemon; use App\Enums\ContainerStatus; +use App\Enums\HttpStatusCode; use Exception; +use Filament\Notifications\Notification; +use Illuminate\Http\Client\RequestException; use Webmozart\Assert\Assert; use App\Models\Server; use GuzzleHttp\Exception\GuzzleException; @@ -24,11 +27,25 @@ class DaemonServerRepository extends DaemonRepository try { $response = $this->getHttpClient()->get( sprintf('/api/servers/%s', $this->server->uuid) - ); - } catch (TransferException $exception) { - throw new DaemonConnectionException($exception, false); - } catch (Exception) { - return ['state' => ContainerStatus::Missing->value]; + )->throw(); + } catch (RequestException $exception) { + $cfId = $exception->response->header('Cf-Ray'); + $cfCache = $exception->response->header('Cf-Cache-Status'); + $code = HttpStatusCode::tryFrom($exception->getCode()); + + $requestFromCloudflare = !empty($cfId); + $requestCachedFromCloudflare = !empty($cfCache); + $requestBadGateway = $code === HttpStatusCode::BadGateway; + + if ($requestBadGateway && $requestFromCloudflare && !$requestCachedFromCloudflare) { + Notification::make() + ->title('Cloudflare Issue') + ->body('Your Node is not accessible by Cloudflare') + ->danger() + ->send(); + } + } catch (Exception $exception) { + report($exception); } return $response?->json() ?? ['state' => ContainerStatus::Missing->value];