From 97ac74bcc09088ca69e026c979638486d556faa1 Mon Sep 17 00:00:00 2001 From: Bishwajeet Parhi Date: Tue, 18 Oct 2022 16:06:37 +0000 Subject: [PATCH 01/11] update raw links --- docs/tutorials/add-logger-adapter.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/tutorials/add-logger-adapter.md b/docs/tutorials/add-logger-adapter.md index 8b5850f..0f4de4a 100644 --- a/docs/tutorials/add-logger-adapter.md +++ b/docs/tutorials/add-logger-adapter.md @@ -1,6 +1,6 @@ # Adding a new logger adapter 💾 -This document is part of the Utopia contributors' guide. Before you continue reading this document make sure you have read the [Code of Conduct](https://raw.githubusercontent.com/utopia-php/logger/main/CODE_OF_CONDUCT.md) and the [Contributing Guide](https://raw.githubusercontent.com/utopia-php/logger/main/CONTRIBUTING.md). +This document is part of the Utopia contributors' guide. Before you continue reading this document make sure you have read the [Code of Conduct](../../CODE_OF_CONDUCT.md) and the [Contributing Guide](../../CONTRIBUTING.md). ## Getting started From f2a70442ad1e9830186d016e4994a2640be50b3b Mon Sep 17 00:00:00 2001 From: Bishwajeet Parhi Date: Tue, 18 Oct 2022 17:52:25 +0000 Subject: [PATCH 02/11] minor typo fixes --- docs/tutorials/add-logger-adapter.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/tutorials/add-logger-adapter.md b/docs/tutorials/add-logger-adapter.md index 0f4de4a..8e5dfd5 100644 --- a/docs/tutorials/add-logger-adapter.md +++ b/docs/tutorials/add-logger-adapter.md @@ -139,7 +139,7 @@ In `src/Logger/Logger.php` update variable `const PROVIDERS` to include your pro ## 3. Test your adapter -After you finished adding your new adapter, you should write a proper test for it. To do that, you enter `tests/LoggerTests.php` and take a look at `testAdapters()` method. In there, we already build a whole log object and all you need to do is to push the log using your provider. Take a look at how test for already existign adapter looks or use template below: +After you finished adding your new adapter, you should write a proper test for it. To do that, you enter `tests/LoggerTests.php` and take a look at `testAdapters()` method. In there, we already build a whole log object and all you need to do is to push the log using your provider. Take a look at how test for already existing adapter looks or use the template below: ```php // Test [ADAPTER_NAME] From f35dc53f9bab56861c193f24edc80305f5e84e26 Mon Sep 17 00:00:00 2001 From: Bishwajeet Parhi Date: Tue, 25 Oct 2022 08:48:11 +0000 Subject: [PATCH 03/11] feat honeyBadger adaptor --- src/Logger/Adapter/HoneyBadger.php | 161 +++++++++++++++++++++++++++++ src/Logger/Logger.php | 3 +- tests/LoggerTest.php | 22 ++-- 3 files changed, 177 insertions(+), 9 deletions(-) create mode 100644 src/Logger/Adapter/HoneyBadger.php diff --git a/src/Logger/Adapter/HoneyBadger.php b/src/Logger/Adapter/HoneyBadger.php new file mode 100644 index 0000000..0a61a08 --- /dev/null +++ b/src/Logger/Adapter/HoneyBadger.php @@ -0,0 +1,161 @@ +getExtra() as $paramKey => $paramValue) { + $params[$paramKey] = var_export($paramValue, true); + } + + $breadcrumbsObject = $log->getBreadcrumbs(); + $breadcrumbsArray = []; + + foreach ($breadcrumbsObject as $breadcrumb) { + \array_push($breadcrumbsArray, [ + 'timestamp' => \intval($breadcrumb->getTimestamp()), + 'category' => $breadcrumb->getCategory(), + 'action' => $breadcrumb->getMessage(), + 'metadata' => [ + 'type' => $breadcrumb->getType() + ] + ]); + } + + $tags = array(); + + foreach ($log->getTags() as $tagKey => $tagValue) { + $tags[$tagKey] = $tagValue; + } + + if (!empty($log->getType())) { + $tags['type'] = $log->getType(); + } + if (!empty($log->getUser()) && !empty($log->getUser()->getId())) { + $tags['userId'] = $log->getUser()->getId(); + } + if (!empty($log->getUser()) && !empty($log->getUser()->getUsername())) { + $tags['userName'] = $log->getUser()->getUsername(); + } + if (!empty($log->getUser()) && !empty($log->getUser()->getEmail())) { + $tags['userEmail'] = $log->getUser()->getEmail(); + } + + $requestBody = [ + 'timestamp' => \intval($log->getTimestamp()), + 'namespace' => $log->getNamespace(), + 'error' => [ + 'name' => $log->getMessage(), + 'message' => $log->getMessage(), + 'backtrace' => [] + ], + 'environment' => [ + 'environment' => $log->getEnvironment(), + 'server' => $log->getServer(), + 'version' => $log->getVersion(), + ], + 'revision' => $log->getVersion(), + 'action' => $log->getAction(), + 'params' => $params, + 'tags' => $tags, + 'breadcrumbs' => $breadcrumbsArray + ]; + + // init curl object + $ch = \curl_init(); + + // define options + $optArray = array( + CURLOPT_URL => 'https://api.honeybadger.io/v1/notices', + CURLOPT_RETURNTRANSFER => true, + CURLOPT_POST => true, + CURLOPT_POSTFIELDS => \json_encode($requestBody), + CURLOPT_HEADEROPT => \CURLHEADER_UNIFIED, + CURLOPT_HTTPHEADER => array('Content-Type: application/json', 'X-API-Key: ' . $this->apiKey, 'Accept: application/json', 'User-Agent: utopia-logger/' . Logger::LIBRARY_VERSION) + ); + + // apply those options + \curl_setopt_array($ch, $optArray); + + // execute request and get response + $result = \curl_exec($ch); + $response = \curl_getinfo($ch, \CURLINFO_HTTP_CODE); + + if (!$result && $response >= 400) { + throw new Exception("Log could not be pushed with status code " . $response . ": " . \curl_error($ch)); + } + + \curl_close($ch); + + return $response; + } + /** + * [ADAPTER_NAME] constructor. + * + * @param string $configKey + */ + public function __construct(string $configKey) + { + $this->apiKey = $configKey; + } + + public function getSupportedTypes(): array + { + return [ + Log::TYPE_INFO, + Log::TYPE_DEBUG, + Log::TYPE_VERBOSE, + Log::TYPE_WARNING, + Log::TYPE_ERROR + ]; + } + + public function getSupportedEnvironments(): array + { + return [ + Log::ENVIRONMENT_STAGING, + Log::ENVIRONMENT_PRODUCTION, + ]; + } + + public function getSupportedBreadcrumbTypes(): array + { + return [ + Log::TYPE_INFO, + Log::TYPE_DEBUG, + Log::TYPE_VERBOSE, + Log::TYPE_WARNING, + Log::TYPE_ERROR + ]; + } +} diff --git a/src/Logger/Logger.php b/src/Logger/Logger.php index d81a5db..c8ae257 100644 --- a/src/Logger/Logger.php +++ b/src/Logger/Logger.php @@ -11,7 +11,8 @@ class Logger "raygun", "sentry", "appSignal", - "logOwl" + "logOwl", + "honeyBadger" ]; /** diff --git a/tests/LoggerTest.php b/tests/LoggerTest.php index 409853f..ab08263 100755 --- a/tests/LoggerTest.php +++ b/tests/LoggerTest.php @@ -4,6 +4,7 @@ use PHPUnit\Framework\TestCase; use Utopia\Logger\Adapter\AppSignal; +use Utopia\Logger\Adapter\HoneyBadger; use Utopia\Logger\Adapter\LogOwl; use Utopia\Logger\Adapter\Raygun; use Utopia\Logger\Adapter\Sentry; @@ -75,11 +76,11 @@ public function testLog() self::assertEquals("aws-001", $log->getServer()); $log->addExtra('isLoggedIn', false); - self::assertEquals([ 'isLoggedIn' => false ], $log->getExtra()); + self::assertEquals(['isLoggedIn' => false], $log->getExtra()); $log->addTag('authMethod', 'session'); $log->addTag('authProvider', 'basic'); - self::assertEquals([ 'authMethod' => 'session', 'authProvider' => 'basic' ], $log->getTags()); + self::assertEquals(['authMethod' => 'session', 'authProvider' => 'basic'], $log->getTags()); $user = new User("myid123"); $log->setUser($user); @@ -93,7 +94,6 @@ public function testLog() self::assertEquals("http", $log->getBreadcrumbs()[0]->getCategory()); self::assertEquals("DELETE /api/v1/database/abcd1234/efgh5678", $log->getBreadcrumbs()[0]->getMessage()); self::assertEquals($timestamp, $log->getBreadcrumbs()[0]->getTimestamp()); - } /** @@ -175,10 +175,16 @@ public function testAdapters() $response = $logger->addLog($log); $this->assertEquals(202, $response); - // Test LogOwl - $adapter = new LogOwl(\getenv("TEST_LOGOWL_KEY")); - $logger = new Logger($adapter); - $response = $logger->addLog($log); - $this->assertEquals(200, $response); + // Test LogOwl + $adapter = new LogOwl(\getenv("TEST_LOGOWL_KEY")); + $logger = new Logger($adapter); + $response = $logger->addLog($log); + $this->assertEquals(200, $response); + + // Test HoneyBadger + $adapter = new HoneyBadger(\getenv("TEST_HONEYBADGER_KEY")); + $logger = new Logger($adapter); + $response = $logger->addLog($log); + $this->assertEquals(201, $response); } } From 50f4ac73c245ac2e897308dd3d9570031d5a681f Mon Sep 17 00:00:00 2001 From: Bishwajeet Parhi Date: Tue, 25 Oct 2022 08:53:25 +0000 Subject: [PATCH 04/11] minor changes --- src/Logger/Adapter/HoneyBadger.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Logger/Adapter/HoneyBadger.php b/src/Logger/Adapter/HoneyBadger.php index 0a61a08..50a0478 100644 --- a/src/Logger/Adapter/HoneyBadger.php +++ b/src/Logger/Adapter/HoneyBadger.php @@ -120,7 +120,7 @@ public function push(Log $log): int return $response; } /** - * [ADAPTER_NAME] constructor. + * HoneyBadger constructor. * * @param string $configKey */ From d6a984672d1c65ed996bafe8b0de93c8ae37548c Mon Sep 17 00:00:00 2001 From: Bishwajeet Parhi Date: Fri, 20 Jan 2023 18:30:16 +0530 Subject: [PATCH 05/11] wip: change request body --- src/Logger/Adapter/HoneyBadger.php | 73 ++++++++++++++++++------------ 1 file changed, 44 insertions(+), 29 deletions(-) diff --git a/src/Logger/Adapter/HoneyBadger.php b/src/Logger/Adapter/HoneyBadger.php index 50a0478..79a7a8e 100644 --- a/src/Logger/Adapter/HoneyBadger.php +++ b/src/Logger/Adapter/HoneyBadger.php @@ -3,6 +3,7 @@ namespace Utopia\Logger\Adapter; use Exception; +use phpDocumentor\Reflection\DocBlock\Tags\Var_; use Utopia\Logger\Adapter; use Utopia\Logger\Log; use Utopia\Logger\Logger; @@ -52,45 +53,58 @@ public function push(Log $log): int ]); } - $tags = array(); - - foreach ($log->getTags() as $tagKey => $tagValue) { - $tags[$tagKey] = $tagValue; - } - - if (!empty($log->getType())) { - $tags['type'] = $log->getType(); - } - if (!empty($log->getUser()) && !empty($log->getUser()->getId())) { - $tags['userId'] = $log->getUser()->getId(); - } - if (!empty($log->getUser()) && !empty($log->getUser()->getUsername())) { - $tags['userName'] = $log->getUser()->getUsername(); - } - if (!empty($log->getUser()) && !empty($log->getUser()->getEmail())) { - $tags['userEmail'] = $log->getUser()->getEmail(); - } + // $tags = array(); + + // foreach ($log->getTags() as $tagKey => $tagValue) { + // $tags[$tagKey] = $tagValue; + // } + + // if (!empty($log->getType())) { + // $tags['type'] = $log->getType(); + // } + // if (!empty($log->getUser()) && !empty($log->getUser()->getId())) { + // $tags['userId'] = $log->getUser()->getId(); + // } + // if (!empty($log->getUser()) && !empty($log->getUser()->getUsername())) { + // $tags['userName'] = $log->getUser()->getUsername(); + // } + // if (!empty($log->getUser()) && !empty($log->getUser()->getEmail())) { + // $tags['userEmail'] = $log->getUser()->getEmail(); + // } $requestBody = [ - 'timestamp' => \intval($log->getTimestamp()), - 'namespace' => $log->getNamespace(), + 'notifier' => [ + 'name' => 'utopia-logger', + 'url' => 'https://github.com/utopia-php/logger', + 'version' => $log->getVersion(), + ], 'error' => [ - 'name' => $log->getMessage(), + 'class' => $log->getType(), 'message' => $log->getMessage(), 'backtrace' => [] ], - 'environment' => [ - 'environment' => $log->getEnvironment(), - 'server' => $log->getServer(), - 'version' => $log->getVersion(), + // 'environment' => [ + // 'environment' => $log->getEnvironment(), + // 'server' => $log->getServer(), + // 'version' => $log->getVersion(), + // ], + 'request' => [ + 'params' => $params, + 'action' => $log->getAction(), + 'context' => empty($log->getUser()) ? null : [ + 'user_id' => $log->getUser()->getId(), + 'user_email' => $log->getUser()->getEmail(), + ] + ], - 'revision' => $log->getVersion(), - 'action' => $log->getAction(), - 'params' => $params, - 'tags' => $tags, + // 'revision' => $log->getVersion(), + // 'action' => $log->getAction(), + // 'tags' => $tags, 'breadcrumbs' => $breadcrumbsArray ]; + var_dump($requestBody); + // init curl object $ch = \curl_init(); @@ -111,6 +125,7 @@ public function push(Log $log): int $result = \curl_exec($ch); $response = \curl_getinfo($ch, \CURLINFO_HTTP_CODE); + if (!$result && $response >= 400) { throw new Exception("Log could not be pushed with status code " . $response . ": " . \curl_error($ch)); } From 6f43aba0210e058becfd01c7d1d21d93e4c698aa Mon Sep 17 00:00:00 2001 From: Bishwajeet Parhi Date: Fri, 20 Jan 2023 23:09:04 +0530 Subject: [PATCH 06/11] fix: now able to see in the UI --- src/Logger/Adapter/HoneyBadger.php | 52 +++++++++++------------------- tests/LoggerTest.php | 2 +- 2 files changed, 19 insertions(+), 35 deletions(-) diff --git a/src/Logger/Adapter/HoneyBadger.php b/src/Logger/Adapter/HoneyBadger.php index 79a7a8e..6862f2e 100644 --- a/src/Logger/Adapter/HoneyBadger.php +++ b/src/Logger/Adapter/HoneyBadger.php @@ -3,7 +3,6 @@ namespace Utopia\Logger\Adapter; use Exception; -use phpDocumentor\Reflection\DocBlock\Tags\Var_; use Utopia\Logger\Adapter; use Utopia\Logger\Log; use Utopia\Logger\Logger; @@ -44,50 +43,34 @@ public function push(Log $log): int foreach ($breadcrumbsObject as $breadcrumb) { \array_push($breadcrumbsArray, [ - 'timestamp' => \intval($breadcrumb->getTimestamp()), 'category' => $breadcrumb->getCategory(), - 'action' => $breadcrumb->getMessage(), + 'timestamp' => \intval($breadcrumb->getTimestamp()), + 'message' => $breadcrumb->getMessage(), 'metadata' => [ - 'type' => $breadcrumb->getType() + 'exception' => $breadcrumb->getType() ] ]); } - // $tags = array(); - - // foreach ($log->getTags() as $tagKey => $tagValue) { - // $tags[$tagKey] = $tagValue; - // } - - // if (!empty($log->getType())) { - // $tags['type'] = $log->getType(); - // } - // if (!empty($log->getUser()) && !empty($log->getUser()->getId())) { - // $tags['userId'] = $log->getUser()->getId(); - // } - // if (!empty($log->getUser()) && !empty($log->getUser()->getUsername())) { - // $tags['userName'] = $log->getUser()->getUsername(); - // } - // if (!empty($log->getUser()) && !empty($log->getUser()->getEmail())) { - // $tags['userEmail'] = $log->getUser()->getEmail(); - // } - $requestBody = [ 'notifier' => [ 'name' => 'utopia-logger', 'url' => 'https://github.com/utopia-php/logger', + 'tags' => $log->getTags(), 'version' => $log->getVersion(), ], 'error' => [ 'class' => $log->getType(), 'message' => $log->getMessage(), - 'backtrace' => [] + 'backtrace' => [], + //TODO: Add causes + 'causes' => [] + ], + 'breadcrumbs' => [ + "enabled" => true, + "trail" => $breadcrumbsArray ], - // 'environment' => [ - // 'environment' => $log->getEnvironment(), - // 'server' => $log->getServer(), - // 'version' => $log->getVersion(), - // ], + 'request' => [ 'params' => $params, 'action' => $log->getAction(), @@ -97,13 +80,14 @@ public function push(Log $log): int ] ], - // 'revision' => $log->getVersion(), - // 'action' => $log->getAction(), - // 'tags' => $tags, - 'breadcrumbs' => $breadcrumbsArray + 'server' => [ + 'project_root' => $log->getServer(), + 'environment_name' => $log->getEnvironment(), + 'hostname' => $log->getServer(), + ], + ]; - var_dump($requestBody); // init curl object $ch = \curl_init(); diff --git a/tests/LoggerTest.php b/tests/LoggerTest.php index 0f07309..f5b37ac 100644 --- a/tests/LoggerTest.php +++ b/tests/LoggerTest.php @@ -141,7 +141,7 @@ public function testAdapters(): void $log->setType(Log::TYPE_ERROR); $log->setVersion("0.11.5"); $log->setMessage("Document efgh5678 not found"); - $log->setUser(new User("efgh5678")); + $log->setUser(new User("efgh5678", "abc@test.com", "John Doe")); $log->addBreadcrumb(new Breadcrumb(Log::TYPE_DEBUG, "http", "DELETE /api/v1/database/abcd1234/efgh5678", \microtime(true) - 500)); $log->addBreadcrumb(new Breadcrumb(Log::TYPE_DEBUG, "auth", "Using API key", \microtime(true) - 400)); $log->addBreadcrumb(new Breadcrumb(Log::TYPE_INFO, "auth", "Authenticated with * Using API Key", \microtime(true) - 350)); From 0a371b4682df3dc14598d7d803df13258462f46f Mon Sep 17 00:00:00 2001 From: Bishwajeet Parhi Date: Sat, 21 Jan 2023 14:29:57 +0530 Subject: [PATCH 07/11] fix lint --- tests/LoggerTest.php | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/tests/LoggerTest.php b/tests/LoggerTest.php index f5b37ac..74aba92 100644 --- a/tests/LoggerTest.php +++ b/tests/LoggerTest.php @@ -178,12 +178,12 @@ public function testAdapters(): void $response = $logger->addLog($log); $this->assertEquals(202, $response); - // Test LogOwl + // Test LogOwl $logOwlKey = \getenv("TEST_LOGOWL_KEY"); - $adapter = new LogOwl($logOwlKey ? $logOwlKey : ""); - $logger = new Logger($adapter); - $response = $logger->addLog($log); - $this->assertEquals(200, $response); + $adapter = new LogOwl($logOwlKey ? $logOwlKey : ""); + $logger = new Logger($adapter); + $response = $logger->addLog($log); + $this->assertEquals(200, $response); // Test HoneyBadger $adapter = new HoneyBadger(\getenv("TEST_HONEYBADGER_KEY")); From 3346692bbd76b085aef32e1848a4c8fe3acf4e70 Mon Sep 17 00:00:00 2001 From: Bishwajeet Parhi Date: Sat, 21 Jan 2023 16:05:20 +0530 Subject: [PATCH 08/11] feat: stacktrace --- src/Logger/Adapter/HoneyBadger.php | 23 ++++++++++++++++++++--- tests/LoggerTest.php | 1 + 2 files changed, 21 insertions(+), 3 deletions(-) diff --git a/src/Logger/Adapter/HoneyBadger.php b/src/Logger/Adapter/HoneyBadger.php index 6862f2e..cee8144 100644 --- a/src/Logger/Adapter/HoneyBadger.php +++ b/src/Logger/Adapter/HoneyBadger.php @@ -52,6 +52,25 @@ public function push(Log $log): int ]); } + $stackFrames = []; + + if (isset($log->getExtra()['stackTrace'])) { + $detailedTrace = $log->getExtra()['stackTrace']; + if (!is_array($detailedTrace)) { + throw new Exception("stackTrace must be an array"); + } + foreach ($detailedTrace as $trace) { + if (!is_array($trace)) { + throw new Exception("stackTrace must be an array of arrays"); + } + \array_push($stackFrames, [ + 'number' => $trace['number'], + 'file' => $trace['file'], + 'method' => $trace['method'], + ]); + } + } + $requestBody = [ 'notifier' => [ 'name' => 'utopia-logger', @@ -62,9 +81,7 @@ public function push(Log $log): int 'error' => [ 'class' => $log->getType(), 'message' => $log->getMessage(), - 'backtrace' => [], - //TODO: Add causes - 'causes' => [] + 'backtrace' => $stackFrames, ], 'breadcrumbs' => [ "enabled" => true, diff --git a/tests/LoggerTest.php b/tests/LoggerTest.php index 74aba92..0ed183e 100644 --- a/tests/LoggerTest.php +++ b/tests/LoggerTest.php @@ -157,6 +157,7 @@ public function testAdapters(): void $log->addExtra('isExpected', true); $log->addExtra('file', '/User/example/server/src/server/server.js'); $log->addExtra('line', '15'); + $log->addExtra('stackTrace', [["number" => 15, "file" => "User/example/server/src/server/server.js", "method" => "runtime_error"]]); // Test Sentry $adapter = new Sentry(\getenv("TEST_SENTRY_KEY") . ';' . \getenv("TEST_SENTRY_PROJECT_ID") . ';' . \getenv("TEST_SENTRY_HOST")); From 3e8f9d1112e750bc0e42a975117b03a3b40d63d6 Mon Sep 17 00:00:00 2001 From: Bishwajeet Parhi Date: Tue, 28 Feb 2023 11:15:30 +0530 Subject: [PATCH 09/11] fix lints --- tests/LoggerTest.php | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/tests/LoggerTest.php b/tests/LoggerTest.php index 8810db1..dea5015 100644 --- a/tests/LoggerTest.php +++ b/tests/LoggerTest.php @@ -183,5 +183,12 @@ public function testAdapters(): void $logger = new Logger($adapter); $response = $logger->addLog($log); $this->assertEquals(200, $response); + + // Test HoneyBadger + $honebadgerkey = \getenv('TEST_HONEYBADGER_KEY'); + $adapter = new HoneyBadger($honebadgerkey ? $honebadgerkey : ''); + $logger = new Logger($adapter); + $response = $logger->addLog($log); + $this->assertEquals(201, $response); } } From 081ebeddf51dc3602624528d24f1c569c47a298e Mon Sep 17 00:00:00 2001 From: Bishwajeet Parhi Date: Fri, 7 Apr 2023 13:57:33 +0000 Subject: [PATCH 10/11] applied suggesstions --- src/Logger/Adapter/HoneyBadger.php | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/src/Logger/Adapter/HoneyBadger.php b/src/Logger/Adapter/HoneyBadger.php index cee8144..2aaae3e 100644 --- a/src/Logger/Adapter/HoneyBadger.php +++ b/src/Logger/Adapter/HoneyBadger.php @@ -54,19 +54,19 @@ public function push(Log $log): int $stackFrames = []; - if (isset($log->getExtra()['stackTrace'])) { - $detailedTrace = $log->getExtra()['stackTrace']; + if (isset($log->getExtra()['detailedTrace'])) { + $detailedTrace = $log->getExtra()['detailedTrace']; if (!is_array($detailedTrace)) { - throw new Exception("stackTrace must be an array"); + throw new Exception("detailedTrace must be an array"); } foreach ($detailedTrace as $trace) { if (!is_array($trace)) { - throw new Exception("stackTrace must be an array of arrays"); + throw new Exception("detailedTrace must be an array of arrays"); } \array_push($stackFrames, [ - 'number' => $trace['number'], - 'file' => $trace['file'], - 'method' => $trace['method'], + 'filename' => $trace['file'] ?? '', + 'lineno' => $trace['line'] ?? '', + 'function' => $trace['function'] ?? '', ]); } } From 8f8fb488eea921c92fa859631da2f1a338e0eec2 Mon Sep 17 00:00:00 2001 From: Bishwajeet Parhi Date: Wed, 26 Apr 2023 22:50:25 +0530 Subject: [PATCH 11/11] fix lint errors --- src/Logger/Adapter/HoneyBadger.php | 41 +++++++++++++++--------------- src/Logger/Logger.php | 10 ++++---- tests/LoggerTest.php | 20 +++++++-------- 3 files changed, 35 insertions(+), 36 deletions(-) diff --git a/src/Logger/Adapter/HoneyBadger.php b/src/Logger/Adapter/HoneyBadger.php index 2aaae3e..ae5fdef 100644 --- a/src/Logger/Adapter/HoneyBadger.php +++ b/src/Logger/Adapter/HoneyBadger.php @@ -21,13 +21,13 @@ class HoneyBadger extends Adapter */ public static function getName(): string { - return "honeyBadger"; + return 'honeyBadger'; } /** * Push log to external provider * - * @param Log $log + * @param Log $log * @return int */ public function push(Log $log): int @@ -47,8 +47,8 @@ public function push(Log $log): int 'timestamp' => \intval($breadcrumb->getTimestamp()), 'message' => $breadcrumb->getMessage(), 'metadata' => [ - 'exception' => $breadcrumb->getType() - ] + 'exception' => $breadcrumb->getType(), + ], ]); } @@ -56,12 +56,12 @@ public function push(Log $log): int if (isset($log->getExtra()['detailedTrace'])) { $detailedTrace = $log->getExtra()['detailedTrace']; - if (!is_array($detailedTrace)) { - throw new Exception("detailedTrace must be an array"); + if (! is_array($detailedTrace)) { + throw new Exception('detailedTrace must be an array'); } foreach ($detailedTrace as $trace) { - if (!is_array($trace)) { - throw new Exception("detailedTrace must be an array of arrays"); + if (! is_array($trace)) { + throw new Exception('detailedTrace must be an array of arrays'); } \array_push($stackFrames, [ 'filename' => $trace['file'] ?? '', @@ -84,8 +84,8 @@ public function push(Log $log): int 'backtrace' => $stackFrames, ], 'breadcrumbs' => [ - "enabled" => true, - "trail" => $breadcrumbsArray + 'enabled' => true, + 'trail' => $breadcrumbsArray, ], 'request' => [ @@ -94,7 +94,7 @@ public function push(Log $log): int 'context' => empty($log->getUser()) ? null : [ 'user_id' => $log->getUser()->getId(), 'user_email' => $log->getUser()->getEmail(), - ] + ], ], 'server' => [ @@ -105,19 +105,18 @@ public function push(Log $log): int ]; - // init curl object $ch = \curl_init(); // define options - $optArray = array( + $optArray = [ CURLOPT_URL => 'https://api.honeybadger.io/v1/notices', CURLOPT_RETURNTRANSFER => true, CURLOPT_POST => true, CURLOPT_POSTFIELDS => \json_encode($requestBody), CURLOPT_HEADEROPT => \CURLHEADER_UNIFIED, - CURLOPT_HTTPHEADER => array('Content-Type: application/json', 'X-API-Key: ' . $this->apiKey, 'Accept: application/json', 'User-Agent: utopia-logger/' . Logger::LIBRARY_VERSION) - ); + CURLOPT_HTTPHEADER => ['Content-Type: application/json', 'X-API-Key: '.$this->apiKey, 'Accept: application/json', 'User-Agent: utopia-logger/'.Logger::LIBRARY_VERSION], + ]; // apply those options \curl_setopt_array($ch, $optArray); @@ -126,19 +125,19 @@ public function push(Log $log): int $result = \curl_exec($ch); $response = \curl_getinfo($ch, \CURLINFO_HTTP_CODE); - - if (!$result && $response >= 400) { - throw new Exception("Log could not be pushed with status code " . $response . ": " . \curl_error($ch)); + if (! $result && $response >= 400) { + throw new Exception('Log could not be pushed with status code '.$response.': '.\curl_error($ch)); } \curl_close($ch); return $response; } + /** * HoneyBadger constructor. * - * @param string $configKey + * @param string $configKey */ public function __construct(string $configKey) { @@ -152,7 +151,7 @@ public function getSupportedTypes(): array Log::TYPE_DEBUG, Log::TYPE_VERBOSE, Log::TYPE_WARNING, - Log::TYPE_ERROR + Log::TYPE_ERROR, ]; } @@ -171,7 +170,7 @@ public function getSupportedBreadcrumbTypes(): array Log::TYPE_DEBUG, Log::TYPE_VERBOSE, Log::TYPE_WARNING, - Log::TYPE_ERROR + Log::TYPE_ERROR, ]; } } diff --git a/src/Logger/Logger.php b/src/Logger/Logger.php index fbadbfa..458fc81 100644 --- a/src/Logger/Logger.php +++ b/src/Logger/Logger.php @@ -9,11 +9,11 @@ class Logger const LIBRARY_VERSION = '0.1.0'; const PROVIDERS = [ - "raygun", - "sentry", - "appSignal", - "logOwl", - "honeyBadger" + 'raygun', + 'sentry', + 'appSignal', + 'logOwl', + 'honeyBadger', ]; /** diff --git a/tests/LoggerTest.php b/tests/LoggerTest.php index dea5015..9261286 100644 --- a/tests/LoggerTest.php +++ b/tests/LoggerTest.php @@ -137,15 +137,15 @@ public function testAdapters(): void $log->setNamespace('api'); $log->setServer('digitalocean-us-001'); $log->setType(Log::TYPE_ERROR); - $log->setVersion("0.11.5"); - $log->setMessage("Document efgh5678 not found"); - $log->setUser(new User("efgh5678", "abc@test.com", "John Doe")); - $log->addBreadcrumb(new Breadcrumb(Log::TYPE_DEBUG, "http", "DELETE /api/v1/database/abcd1234/efgh5678", \microtime(true) - 500)); - $log->addBreadcrumb(new Breadcrumb(Log::TYPE_DEBUG, "auth", "Using API key", \microtime(true) - 400)); - $log->addBreadcrumb(new Breadcrumb(Log::TYPE_INFO, "auth", "Authenticated with * Using API Key", \microtime(true) - 350)); - $log->addBreadcrumb(new Breadcrumb(Log::TYPE_INFO, "database", "Found collection abcd1234", \microtime(true) - 300)); - $log->addBreadcrumb(new Breadcrumb(Log::TYPE_DEBUG, "database", "Permission for collection abcd1234 met", \microtime(true) - 200)); - $log->addBreadcrumb(new Breadcrumb(Log::TYPE_ERROR, "database", "Missing document when searching by ID!", \microtime(true))); + $log->setVersion('0.11.5'); + $log->setMessage('Document efgh5678 not found'); + $log->setUser(new User('efgh5678', 'abc@test.com', 'John Doe')); + $log->addBreadcrumb(new Breadcrumb(Log::TYPE_DEBUG, 'http', 'DELETE /api/v1/database/abcd1234/efgh5678', \microtime(true) - 500)); + $log->addBreadcrumb(new Breadcrumb(Log::TYPE_DEBUG, 'auth', 'Using API key', \microtime(true) - 400)); + $log->addBreadcrumb(new Breadcrumb(Log::TYPE_INFO, 'auth', 'Authenticated with * Using API Key', \microtime(true) - 350)); + $log->addBreadcrumb(new Breadcrumb(Log::TYPE_INFO, 'database', 'Found collection abcd1234', \microtime(true) - 300)); + $log->addBreadcrumb(new Breadcrumb(Log::TYPE_DEBUG, 'database', 'Permission for collection abcd1234 met', \microtime(true) - 200)); + $log->addBreadcrumb(new Breadcrumb(Log::TYPE_ERROR, 'database', 'Missing document when searching by ID!', \microtime(true))); $log->addTag('sdk', 'Flutter'); $log->addTag('sdkVersion', '0.0.1'); $log->addTag('authMode', 'default'); @@ -155,7 +155,7 @@ public function testAdapters(): void $log->addExtra('isExpected', true); $log->addExtra('file', '/User/example/server/src/server/server.js'); $log->addExtra('line', '15'); - $log->addExtra('stackTrace', [["number" => 15, "file" => "User/example/server/src/server/server.js", "method" => "runtime_error"]]); + $log->addExtra('stackTrace', [['number' => 15, 'file' => 'User/example/server/src/server/server.js', 'method' => 'runtime_error']]); // Test Sentry $adapter = new Sentry(\getenv('TEST_SENTRY_KEY').';'.\getenv('TEST_SENTRY_PROJECT_ID').';'.\getenv('TEST_SENTRY_HOST'));