From d733e8b75fe82a24bfb9eda3b828362c4ac01c3f Mon Sep 17 00:00:00 2001 From: Khushboo Verma <43381712+vermakhushboo@users.noreply.github.com> Date: Thu, 10 Apr 2025 16:39:37 +0530 Subject: [PATCH] Add trace button --- app/controllers/general.php | 29 +++++++ app/views/general/error.phtml | 143 ++++++++++++++++++++++++++++++++-- 2 files changed, 164 insertions(+), 8 deletions(-) diff --git a/app/controllers/general.php b/app/controllers/general.php index c78d7ef925..80097cc471 100644 --- a/app/controllers/general.php +++ b/app/controllers/general.php @@ -555,6 +555,35 @@ function router(App $utopia, Database $dbForPlatform, callable $getProjectDB, Sw $execution->setAttribute('responseStatusCode', $executionResponse['statusCode']); $execution->setAttribute('responseHeaders', $headersFiltered); $execution->setAttribute('duration', $executionResponse['duration']); + if ($executionResponse['statusCode'] >= 500) { //TODO: if body is empty + $errorView = __DIR__ . '/../views/general/error.phtml'; + $layout = new View($errorView); + $layout + ->setParam('title', $project->getAttribute('name') . ' - Error') + ->setParam('development', App::isDevelopment()) + ->setParam('message', empty($executionResponse['body']) ? 'A server error occurred.' : $executionResponse['body']) + ->setParam('type', 'general_server_error') + ->setParam('code', $executionResponse['statusCode']) + ->setParam('trace', []) + ->setParam('exception', null); + + $response->html($layout->render()); + return; + } elseif ($executionResponse['statusCode'] >= 400) { + $errorView = __DIR__ . '/../views/general/error.phtml'; + $layout = new View($errorView); + $layout + ->setParam('title', $project->getAttribute('name') . ' - Error') + ->setParam('development', App::isDevelopment()) + ->setParam('message', empty($executionResponse['body']) ? 'A client error occurred.' : $executionResponse['body']) + ->setParam('type', 'client_error') + ->setParam('code', $executionResponse['statusCode']) + ->setParam('trace', []) + ->setParam('exception', null); + + $response->html($layout->render()); + return; + } } catch (\Throwable $th) { $durationEnd = \microtime(true); diff --git a/app/views/general/error.phtml b/app/views/general/error.phtml index 791ef695d6..75ec39b970 100644 --- a/app/views/general/error.phtml +++ b/app/views/general/error.phtml @@ -15,13 +15,24 @@ $label = ''; $labelClass = ''; $buttons = []; -foreach ($exception->getCTAs() as $index => $cta) { - $class = ($index === 0) ? 'bordered-button' : 'button'; +if($exception !== null && $exception instanceof AppwriteException) { + foreach ($exception->getCTAs() as $index => $cta) { + $class = ($index === 0) ? 'bordered-button' : 'button'; + + $buttons[] = [ + 'text' => $cta['label'], + 'url' => $cta['url'], + 'class' => $class + ]; + } +} +if ($development && !empty($buttons)) { $buttons[] = [ - 'text' => $cta['label'], - 'url' => $cta['url'], - 'class' => $class + 'text' => 'View error trace', + 'url' => '#', + 'class' => 'button', + 'x-on:click' => "page = 'trace'" ]; } @@ -65,6 +76,7 @@ switch ($type) {
+ - +