From 205b7a9f48518524b26d347338552adda5616e12 Mon Sep 17 00:00:00 2001 From: James Collins Date: Thu, 30 Nov 2023 20:49:36 +1000 Subject: [PATCH] add exception reporter --- app/Exceptions/Handler.php | 45 +++++++++++++++++++++++++++++++++++++- 1 file changed, 44 insertions(+), 1 deletion(-) diff --git a/app/Exceptions/Handler.php b/app/Exceptions/Handler.php index 56af264..66bd21c 100644 --- a/app/Exceptions/Handler.php +++ b/app/Exceptions/Handler.php @@ -3,6 +3,12 @@ namespace App\Exceptions; use Illuminate\Foundation\Exceptions\Handler as ExceptionHandler; +use Illuminate\Support\Facades\App; +use Illuminate\Support\Facades\Log; +use Illuminate\Support\Facades\Mail; +use Symfony\Component\ErrorHandler\Exception\FlattenException; +use Symfony\Component\ErrorHandler\ErrorRenderer\HtmlErrorRenderer; +use PDOException; use Throwable; class Handler extends ExceptionHandler @@ -23,8 +29,45 @@ class Handler extends ExceptionHandler */ public function register(): void { + $this->renderable(function (PDOException $e, $request) { + if ($request->is('api/*') === true) { + return response()->json([ + 'message' => 'The server is currently unavailable' + ], 503); + } + }); + $this->reportable(function (Throwable $e) { - // + if ($this->shouldReport($e) === true) { + if (App::runningUnitTests() === false) { + $this->sendEmail($e); + } + } }); } + + /** + * Send email + * + * @param Throwable $exception Throwable object. + * @return void + */ + public function sendEmail(Throwable $exception) + { + try { + $e = FlattenException::createFromThrowable($exception); + $handler = new HtmlErrorRenderer(true); + $css = $handler->getStylesheet(); + $content = $handler->getBody($e); + + Mail::send('emails.exception', compact('css', 'content'), function ($message) { + $message + ->to('webmaster@stemmechanics.com.au') + ->subject('Exception Generated') + ; + }); + } catch (Throwable $ex) { + Log::error($ex); + } + } }