Add specific logic for CF

This commit is contained in:
Lance Pioch 2024-05-07 20:00:02 -04:00
parent d0d388534b
commit 111b8b3cda

View File

@ -3,7 +3,10 @@
namespace App\Repositories\Daemon; namespace App\Repositories\Daemon;
use App\Enums\ContainerStatus; use App\Enums\ContainerStatus;
use App\Enums\HttpStatusCode;
use Exception; use Exception;
use Filament\Notifications\Notification;
use Illuminate\Http\Client\RequestException;
use Webmozart\Assert\Assert; use Webmozart\Assert\Assert;
use App\Models\Server; use App\Models\Server;
use GuzzleHttp\Exception\GuzzleException; use GuzzleHttp\Exception\GuzzleException;
@ -24,11 +27,25 @@ class DaemonServerRepository extends DaemonRepository
try { try {
$response = $this->getHttpClient()->get( $response = $this->getHttpClient()->get(
sprintf('/api/servers/%s', $this->server->uuid) sprintf('/api/servers/%s', $this->server->uuid)
); )->throw();
} catch (TransferException $exception) { } catch (RequestException $exception) {
throw new DaemonConnectionException($exception, false); $cfId = $exception->response->header('Cf-Ray');
} catch (Exception) { $cfCache = $exception->response->header('Cf-Cache-Status');
return ['state' => ContainerStatus::Missing->value]; $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]; return $response?->json() ?? ['state' => ContainerStatus::Missing->value];