From 45a2c01c48a983ef7aaf574a9c2cceb374ffa66a Mon Sep 17 00:00:00 2001 From: Jonny Barnes Date: Fri, 1 Feb 2019 21:59:59 +0000 Subject: [PATCH] Notify Slack on Exceptions (issue #97) Squashed commit of the following: commit 104a106d735f586f893dffb57e07f15b2e20d901 Author: Jonny Barnes Date: Fri Feb 1 21:54:06 2019 +0000 Remove unused class use statement, add array trailing comma commit 8fbc46e816789d26447a01cbd0d542c62a287671 Author: Jonny Barnes Date: Fri Feb 1 21:27:42 2019 +0000 Set default values for slack message commit b54650d85d73702dfb836436a964dd882844fff5 Author: Jonny Barnes Date: Fri Feb 1 21:26:06 2019 +0000 Post exceptions to Slack commit 74f394ab2b5e66eac8c3f75ccf13aae0a7bc8e11 Author: Jonny Barnes Date: Fri Feb 1 21:25:47 2019 +0000 Slack Webhook env variable --- .env.example | 2 ++ app/Exceptions/Handler.php | 29 ++++++++++++++++++++++++++++- 2 files changed, 30 insertions(+), 1 deletion(-) diff --git a/.env.example b/.env.example index 21e860aa..4cee6347 100644 --- a/.env.example +++ b/.env.example @@ -60,3 +60,5 @@ APP_TIMEZONE=UTC APP_LANG=en APP_LOG=daily SECURE_SESSION_COOKIE=true + +SLACK_WEBHOOK_URL= diff --git a/app/Exceptions/Handler.php b/app/Exceptions/Handler.php index 971523ba..1da163fb 100644 --- a/app/Exceptions/Handler.php +++ b/app/Exceptions/Handler.php @@ -2,6 +2,7 @@ namespace App\Exceptions; +use App; use Exception; use Illuminate\Support\Facades\Route; use Illuminate\Session\TokenMismatchException; @@ -18,7 +19,7 @@ class Handler extends ExceptionHandler * @var array */ protected $dontReport = [ - // + \Symfony\Component\HttpKernel\Exception\HttpException::class, ]; /** @@ -41,6 +42,32 @@ class Handler extends ExceptionHandler */ public function report(Exception $exception) { + $guzzle = new \GuzzleHttp\Client([ + 'headers' => [ + 'Content-Type' => 'application/json', + ], + ]); + + $guzzle->post( + env('SLACK_WEBHOOK_URL'), + [ + 'body' => json_encode([ + 'attachments' => [[ + 'fallback' => 'There was an exception.', + 'pretext' => 'There was an exception.', + 'color' => '#d00000', + 'author_name' => App::environment(), + 'author_link' => config('app.url'), + 'fields' => [[ + 'title' => get_class($exception) ?? 'Unkown Exception', + 'value' => $exception->getMessage() ?? '', + ]], + 'ts' => time(), + ]], + ]), + ] + ); + parent::report($exception); }