diff --git a/app/Exceptions/Handler.php b/app/Exceptions/Handler.php index de04dd0..0b08785 100755 --- a/app/Exceptions/Handler.php +++ b/app/Exceptions/Handler.php @@ -9,7 +9,6 @@ use Illuminate\Auth\Access\AuthorizationException; use Illuminate\Auth\AuthenticationException; use Illuminate\Database\QueryException; use Illuminate\Foundation\Exceptions\Handler as ExceptionHandler; -use Illuminate\Support\Facades\Artisan; use Illuminate\Support\Facades\Cache; use Illuminate\Support\Facades\Log; use Illuminate\Validation\ValidationException; @@ -38,85 +37,18 @@ class Handler extends ExceptionHandler private const int ERROR_COUNT_DURATION = 300; - private const array AUTO_RECOVERABLE_ERRORS = [ - 'ViteManifestNotFoundException', - 'filemtime', - 'stat failed for', - 'No application encryption key has been specified', - 'file does not exist', - 'view [', - 'Target class [view] does not exist', - 'BindingResolutionException', - ]; - - private const int AUTO_RECOVER_COOLDOWN = 60; - #[\Override] public function register(): void { $this->reportable(function (Throwable $e) { - $this->attemptAutoRecovery($e); $this->handleExceptionAlert($e); }); $this->renderable(function (Throwable $e) { - $recovered = $this->attemptAutoRecovery($e); - if ($recovered) { - return redirect()->to(request()->url()); - } - $this->handleExceptionAlert($e); }); } - private function attemptAutoRecovery(Throwable $e): bool - { - $message = $e->getMessage() ?: ''; - $exceptionClass = $e::class; - $isRecoverable = array_any(self::AUTO_RECOVERABLE_ERRORS, fn ($pattern) => str_contains($exceptionClass, (string) $pattern) || str_contains($message, (string) $pattern)); - - if (! $isRecoverable) { - return false; - } - - $cacheKey = 'auto_recovery_cooldown'; - if (Cache::has($cacheKey)) { - return false; - } - - Cache::put($cacheKey, true, self::AUTO_RECOVER_COOLDOWN); - - Log::warning('Attempting auto-recovery from error', [ - 'exception' => $exceptionClass, - 'message' => $message, - ]); - - try { - Artisan::call('view:clear'); - Artisan::call('cache:clear'); - Artisan::call('config:clear'); - Artisan::call('route:clear'); - - Artisan::call('config:cache'); - Artisan::call('view:cache'); - - if (function_exists('opcache_reset')) { - @opcache_reset(); - } - - Log::info('Auto-recovery completed successfully'); - - return true; - } catch (Throwable $recoveryError) { - Log::error('Auto-recovery failed', [ - 'original_error' => $message, - 'recovery_error' => $recoveryError->getMessage(), - ]); - - return false; - } - } - private function handleExceptionAlert(Throwable $e): void { if (! $this->shouldAlertException($e)) {