From cfcda68a99914a5a096480fe59f8ad526bbad855 Mon Sep 17 00:00:00 2001 From: Roman Kelesidis Date: Sat, 6 Apr 2024 10:41:14 +0700 Subject: [PATCH] Improved app debug (#1438) * Improved app debug * Updated * Update config.php * Update Dev.php * Update Dev.php * Update Dev.php * Update Dev.php * Update config.php * Update Dev.php * Update CHANGELOG.md --- CHANGELOG.md | 1 + common.php | 4 +- library/config.php | 9 ++-- library/defines.php | 4 +- src/Dev.php | 107 ++++++++++++++++++++++++++++---------------- 5 files changed, 77 insertions(+), 48 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index a9836ed95..4600ea18f 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -6,6 +6,7 @@ **Merged pull requests:** - Release 2.4.3 🐎 ([belomaxorka](https://github.com/belomaxorka)) +- Improved app debug [\#1438](https://github.com/torrentpier/torrentpier/pull/1438) ([belomaxorka](https://github.com/belomaxorka)) - Minor improvements [\#1435](https://github.com/torrentpier/torrentpier/pull/1435) ([belomaxorka](https://github.com/belomaxorka)) ## [v2.4.2](https://github.com/torrentpier/torrentpier/tree/v2.4.2) (2024-03-30) diff --git a/common.php b/common.php index a60d45e00..a9e73c8eb 100644 --- a/common.php +++ b/common.php @@ -87,9 +87,9 @@ if (is_file(BB_PATH . '/library/config.local.php')) { } /** - * Progressive error reporting + * Error reporting */ -\TorrentPier\Dev::initDebug(); +$debug = new \TorrentPier\Dev(); /** * Server variables initialize diff --git a/library/config.php b/library/config.php index b0fbb7bcf..1c21b0b76 100644 --- a/library/config.php +++ b/library/config.php @@ -447,14 +447,15 @@ $bb_cfg['adv_email'] = "adv@$domain_name"; // advertisement email // Error reporting $bb_cfg['bugsnag'] = [ 'enabled' => true, - 'api_key' => '33b3ed0102946bab71341f9edc125e21', + 'api_key' => '33b3ed0102946bab71341f9edc125e21', // Don't change this if you want to help us find bugs ]; $bb_cfg['telegram_sender'] = [ + // How to get chat_id? https://api.telegram.org/bot{YOUR_TOKEN}/getUpdates 'enabled' => false, - 'token' => '', - 'chat_id' => '', - 'timeout' => 10 + 'token' => '', // Bot token + 'chat_id' => '', // Bot chat_id + 'timeout' => 10 // Timeout for responses ]; // Special users diff --git a/library/defines.php b/library/defines.php index 21c244e69..ef165abbe 100644 --- a/library/defines.php +++ b/library/defines.php @@ -64,10 +64,8 @@ define('LOG_MAX_SIZE', 1048576); // bytes // Error reporting ini_set('error_reporting', E_ALL); // PHP error reporting mode | https://www.php.net/manual/en/errorfunc.constants.php -ini_set('display_errors', 1); // Show general php errors -ini_set('display_startup_errors', 1); // Show startup php errors define('MYSQLI_ERROR_REPORTING', MYSQLI_REPORT_ERROR); // MySQL error reporting mode | https://www.php.net/manual/mysqli-driver.report-mode.php -ini_set('log_errors', 1); // php native logging +ini_set('log_errors', 1); // Enable logging (For native & Whoops) ini_set('error_log', LOG_DIR . '/php_errors.log'); // path to log file enabled only if log_errors == 1 (native) define('WHOOPS_LOG_FILE', LOG_DIR . '/php_whoops.log'); // log file enabled only if log_errors == 1 and APP_DEBUG == true (whoops) diff --git a/src/Dev.php b/src/Dev.php index bd357cab0..6452aa4c3 100644 --- a/src/Dev.php +++ b/src/Dev.php @@ -35,24 +35,41 @@ class Dev /** * Environment type * - * @var string|null + * @var string */ - public static ?string $envType = null; + public string $envType = 'local'; /** - * Base debug functionality init + * Whoops instance * - * @return void + * @var Run */ - public static function initDebug(): void - { - self::$envType = env('APP_ENV', 'local'); + private Run $whoops; - if (self::$envType === 'production') { - self::getBugsnag(); - } else { - self::getWhoops(); + /** + * Constructor + */ + public function __construct() + { + $this->envType = env('APP_ENV', 'local'); + $this->whoops = new Run; + + switch ($this->envType) { + case 'production': + ini_set('display_errors', 0); + ini_set('display_startup_errors', 0); + $this->getWhoopsProduction(); + break; + case 'local': + ini_set('display_errors', 1); + ini_set('display_startup_errors', 1); + $this->getWhoops(); + break; } + $this->getBugsnag(); + $this->getTelegramSender(); + + $this->whoops->register(); } /** @@ -60,7 +77,7 @@ class Dev * * @return void */ - private static function getBugsnag(): void + private function getBugsnag(): void { global $bb_cfg; @@ -68,8 +85,40 @@ class Dev return; } - $bugsnag = Client::make($bb_cfg['bugsnag']['api_key']); - Handler::register($bugsnag); + Handler::register(Client::make($bb_cfg['bugsnag']['api_key'])); + } + + /** + * Telegram debug driver + * + * @return void + */ + private function getTelegramSender(): void + { + global $bb_cfg; + + if ($bb_cfg['telegram_sender']['enabled']) { + $telegramSender = new PlainTextHandler(); + $telegramSender->loggerOnly(true); + $telegramSender->setLogger((new Logger( + APP_NAME, + [(new TelegramHandler($bb_cfg['telegram_sender']['token'], (int)$bb_cfg['telegram_sender']['chat_id'], timeout: (int)$bb_cfg['telegram_sender']['timeout'])) + ->setFormatter(new TelegramFormatter())] + ))); + $this->whoops->pushHandler($telegramSender); + } + } + + /** + * Whoops production debug driver + * + * @return void + */ + private function getWhoopsProduction(): void + { + $this->whoops->pushHandler(function () { + echo 'Sorry, something went wrong. Drink coffee and come back after some time... ☕️'; + }); } /** @@ -77,20 +126,16 @@ class Dev * * @return void */ - private static function getWhoops(): void + private function getWhoops(): void { - global $bb_cfg; - if (!APP_DEBUG) { return; } - $whoops = new Run; - /** * Show errors on page */ - $whoops->pushHandler(new PrettyPageHandler); + $this->whoops->pushHandler(new PrettyPageHandler); /** * Show log in browser console @@ -102,12 +147,12 @@ class Dev [(new BrowserConsoleHandler()) ->setFormatter((new LineFormatter(null, null, true)))] ))); - $whoops->pushHandler($loggingInConsole); + $this->whoops->pushHandler($loggingInConsole); /** * Log errors in file */ - if (ini_get('log_errors') == 1) { + if ((int)ini_get('log_errors') === 1) { $loggingInFile = new PlainTextHandler(); $loggingInFile->loggerOnly(true); $loggingInFile->setLogger((new Logger( @@ -115,24 +160,8 @@ class Dev [(new StreamHandler(WHOOPS_LOG_FILE)) ->setFormatter((new LineFormatter(null, null, true)))] ))); - $whoops->pushHandler($loggingInFile); + $this->whoops->pushHandler($loggingInFile); } - - /** - * Send debug via Telegram - */ - if ($bb_cfg['telegram_sender']['enabled']) { - $telegramSender = new PlainTextHandler(); - $telegramSender->loggerOnly(true); - $telegramSender->setLogger((new Logger( - APP_NAME, - [(new TelegramHandler($bb_cfg['telegram_sender']['token'], (int)$bb_cfg['telegram_sender']['chat_id'], timeout: $bb_cfg['telegram_sender']['timeout'])) - ->setFormatter(new TelegramFormatter())] - ))); - $whoops->pushHandler($telegramSender); - } - - $whoops->register(); } /**