From 5e5c39b0e12154551ece88692c1567fc04db86ec Mon Sep 17 00:00:00 2001 From: Philipp Holzer Date: Sun, 17 Feb 2019 21:12:12 +0100 Subject: [PATCH] Refactored DependencyFactory for Profiler --- bin/daemon.php | 2 +- include/api.php | 2 +- src/App.php | 20 +++++++++++++++++--- src/Factory/DBFactory.php | 8 +++++--- src/Factory/DependencyFactory.php | 7 ++++--- src/Factory/LoggerFactory.php | 9 +++++++++ src/Factory/ProfilerFactory.php | 17 +++++++++-------- src/Util/Profiler.php | 18 ++++++------------ tests/include/ApiTest.php | 5 ++--- tests/src/Database/DBATest.php | 7 +++---- tests/src/Database/DBStructureTest.php | 7 +++---- tests/src/Util/ProfilerTest.php | 10 +++++----- 12 files changed, 65 insertions(+), 47 deletions(-) diff --git a/bin/daemon.php b/bin/daemon.php index 257896cfac..047bf71be7 100755 --- a/bin/daemon.php +++ b/bin/daemon.php @@ -144,7 +144,7 @@ if (!$foreground) { file_put_contents($pidfile, $pid); // We lose the database connection upon forking - Factory\DBFactory::init($configCache, $_SERVER); + Factory\DBFactory::init($a->getConfigCache(), $a->getProfiler(), $_SERVER); } Config::set('system', 'worker_daemon_mode', true); diff --git a/include/api.php b/include/api.php index 6bd08d01d0..13ff75bdb5 100644 --- a/include/api.php +++ b/include/api.php @@ -326,7 +326,7 @@ function api_call(App $a) Logger::info(API_LOG_PREFIX . 'username {username}', ['module' => 'api', 'action' => 'call', 'username' => $a->user['username'], 'duration' => round($duration, 2)]); - $a->getProfiler()->saveLog(API_LOG_PREFIX . 'performance'); + $a->getProfiler()->saveLog($a->getLogger(), API_LOG_PREFIX . 'performance'); if (false === $return) { /* diff --git a/src/App.php b/src/App.php index 3189b2da7b..8a49f060ba 100644 --- a/src/App.php +++ b/src/App.php @@ -12,7 +12,6 @@ use Friendica\Core\Config\Cache\ConfigCacheLoader; use Friendica\Core\Config\Cache\IConfigCache; use Friendica\Core\Config\Configuration; use Friendica\Database\DBA; -use Friendica\Factory\ConfigFactory; use Friendica\Network\HTTPException\InternalServerErrorException; use Friendica\Util\Profiler; use Psr\Log\LoggerInterface; @@ -114,6 +113,11 @@ class App */ private $config; + /** + * @var LoggerInterface The logger + */ + private $logger; + /** * @var Profiler The profiler of this app */ @@ -139,6 +143,16 @@ class App return $this->basePath; } + /** + * The Logger of this app + * + * @return LoggerInterface + */ + public function getLogger() + { + return $this->logger; + } + /** * The profiler of this app * @@ -192,7 +206,7 @@ class App * @brief App constructor. * * @param Configuration $config The Configuration - * @param LoggerInterface $logger Logger of this application + * @param LoggerInterface $logger The current app logger * @param Profiler $profiler The profiler of this application * @param bool $isBackend Whether it is used for backend or frontend (Default true=backend) * @@ -200,8 +214,8 @@ class App */ public function __construct(Configuration $config, LoggerInterface $logger, Profiler $profiler, $isBackend = true) { - $this->config = $config; $this->logger = $logger; + $this->config = $config; $this->profiler = $profiler; $this->basePath = $this->config->get('system', 'basepath'); diff --git a/src/Factory/DBFactory.php b/src/Factory/DBFactory.php index abfe6f99d0..c1a7965013 100644 --- a/src/Factory/DBFactory.php +++ b/src/Factory/DBFactory.php @@ -4,18 +4,20 @@ namespace Friendica\Factory; use Friendica\Core\Config\Cache; use Friendica\Database; +use Friendica\Util\Profiler; class DBFactory { /** * Initialize the DBA connection * - * @param Cache\ConfigCache $configCache The configuration cache + * @param Cache\IConfigCache $configCache The configuration cache + * @param Profiler $profiler The profiler * @param array $server The $_SERVER variables * * @throws \Exception if connection went bad */ - public static function init(Cache\ConfigCache $configCache, array $server) + public static function init(Cache\IConfigCache $configCache, Profiler $profiler, array $server) { if (Database\DBA::connected()) { return; @@ -46,7 +48,7 @@ class DBFactory $db_data = $server['MYSQL_DATABASE']; } - if (Database\DBA::connect($configCache, $db_host, $db_user, $db_pass, $db_data, $charset)) { + if (Database\DBA::connect($configCache, $profiler, $db_host, $db_user, $db_pass, $db_data, $charset)) { // Loads DB_UPDATE_VERSION constant Database\DBStructure::definition($configCache->get('system', 'basepath'), false); } diff --git a/src/Factory/DependencyFactory.php b/src/Factory/DependencyFactory.php index 041202e6bf..acbf4bfaf7 100644 --- a/src/Factory/DependencyFactory.php +++ b/src/Factory/DependencyFactory.php @@ -25,12 +25,13 @@ class DependencyFactory $basedir = BasePath::create($directory, $_SERVER); $configLoader = new Cache\ConfigCacheLoader($basedir); $configCache = Factory\ConfigFactory::createCache($configLoader); - Factory\DBFactory::init($configCache, $_SERVER); + $profiler = Factory\ProfilerFactory::create($configCache); + Factory\DBFactory::init($configCache, $profiler, $_SERVER); $config = Factory\ConfigFactory::createConfig($configCache); // needed to call PConfig::init() Factory\ConfigFactory::createPConfig($configCache); - Factory\LoggerFactory::create($channel, $config); + $logger = Factory\LoggerFactory::create($channel, $config); - return new App($config, $isBackend); + return new App($config, $logger, $profiler, $isBackend); } } diff --git a/src/Factory/LoggerFactory.php b/src/Factory/LoggerFactory.php index bbe3b0a4b3..77a09637c4 100644 --- a/src/Factory/LoggerFactory.php +++ b/src/Factory/LoggerFactory.php @@ -42,6 +42,8 @@ class LoggerFactory if ($debugging) { $loglevel = self::mapLegacyConfigDebugLevel((string)$level); static::addStreamHandler($logger, $stream, $loglevel); + } else { + static::addVoidHandler($logger); } Logger::init($logger); @@ -153,4 +155,11 @@ class LoggerFactory throw new InternalServerErrorException('Logger instance incompatible for MonologFactory'); } } + + public static function addVoidHandler($logger) + { + if ($logger instanceof Monolog\Logger) { + $logger->pushHandler(new Monolog\Handler\NullHandler()); + } + } } diff --git a/src/Factory/ProfilerFactory.php b/src/Factory/ProfilerFactory.php index 7a63c7440c..26a156639e 100644 --- a/src/Factory/ProfilerFactory.php +++ b/src/Factory/ProfilerFactory.php @@ -2,24 +2,25 @@ namespace Friendica\Factory; -use Friendica\Core\Config\ConfigCache; +use Friendica\Core\Config\Cache\IConfigCache; use Friendica\Util\Profiler; -use Psr\Log\LoggerInterface; class ProfilerFactory { /** * Creates a Profiler for the current execution * - * @param LoggerInterface $logger The logger for saving the profiling data - * @param ConfigCache $configCache The configuration cache + * @param IConfigCache $configCache The configuration cache * * @return Profiler */ - public static function create(LoggerInterface $logger, ConfigCache $configCache) + public static function create(IConfigCache $configCache) { - $enabled = $configCache->get('system', 'profiler', false); - $renderTime = $configCache->get('rendertime', 'callstack', false); - return new Profiler($logger, $enabled, $renderTime); + $enabled = $configCache->get('system', 'profiler'); + $enabled = isset($enabled) && $enabled !== '!!'; + $renderTime = $configCache->get('rendertime', 'callstack'); + $renderTime = isset($renderTime) && $renderTime !== '!!'; + + return new Profiler($enabled, $renderTime); } } diff --git a/src/Util/Profiler.php b/src/Util/Profiler.php index a3f889380e..2d3da3a9c0 100644 --- a/src/Util/Profiler.php +++ b/src/Util/Profiler.php @@ -33,20 +33,13 @@ class Profiler implements ContainerInterface private $rendertime; /** - * @var LoggerInterface The profiler logger - */ - private $logger; - - /** - * @param LoggerInterface $logger The profiler logger * @param bool $enabled True, if the Profiler is enabled * @param bool $renderTime True, if the Profiler should measure the whole rendertime including functions */ - public function __construct(LoggerInterface $logger, $enabled = false, $renderTime = false) + public function __construct($enabled = false, $renderTime = false) { $this->enabled = $enabled; $this->rendertime = $renderTime; - $this->logger = $logger; $this->reset(); } @@ -129,16 +122,17 @@ class Profiler implements ContainerInterface /** * Save the current profiling data to a log entry * - * @param string $message Additional message for the log + * @param LoggerInterface $logger The logger to save the current log + * @param string $message Additional message for the log */ - public function saveLog($message = '') + public function saveLog(LoggerInterface $logger, $message = '') { // Write down the performance values into the log if (!$this->enabled) { return; } $duration = microtime(true) - $this->get('start'); - $this->logger->info( + $logger->info( $message, [ 'action' => 'profiling', @@ -205,7 +199,7 @@ class Profiler implements ContainerInterface } } } - $this->logger->info($message . ": " . $o, ['action' => 'profiling']); + $logger->info($message . ": " . $o, ['action' => 'profiling']); } /** diff --git a/tests/include/ApiTest.php b/tests/include/ApiTest.php index 59096f5e5b..289b3fcea5 100644 --- a/tests/include/ApiTest.php +++ b/tests/include/ApiTest.php @@ -39,13 +39,12 @@ class ApiTest extends DatabaseTest $basedir = BasePath::create(dirname(__DIR__) . '/../'); $configLoader = new Cache\ConfigCacheLoader($basedir); $configCache = Factory\ConfigFactory::createCache($configLoader); - Factory\DBFactory::init($configCache, $_SERVER); + $profiler = Factory\ProfilerFactory::create($configCache); + Factory\DBFactory::init($configCache, $profiler, $_SERVER); $config = Factory\ConfigFactory::createConfig($configCache); Factory\ConfigFactory::createPConfig($configCache); $logger = Factory\LoggerFactory::create('test', $config); - $profiler = Factory\ProfilerFactory::create($logger, $config); $this->app = new App($config, $logger, $profiler, false); - $this->logOutput = FActory\LoggerFactory::enableTest($this->app->getLogger()); parent::setUp(); diff --git a/tests/src/Database/DBATest.php b/tests/src/Database/DBATest.php index a4a715575c..e8b9c68b19 100644 --- a/tests/src/Database/DBATest.php +++ b/tests/src/Database/DBATest.php @@ -16,13 +16,12 @@ class DBATest extends DatabaseTest $basedir = BasePath::create(dirname(__DIR__) . '/../../'); $configLoader = new Cache\ConfigCacheLoader($basedir); $configCache = Factory\ConfigFactory::createCache($configLoader); - Factory\DBFactory::init($configCache, $_SERVER); + $profiler = Factory\ProfilerFactory::create($configCache); + Factory\DBFactory::init($configCache, $profiler, $_SERVER); $config = Factory\ConfigFactory::createConfig($configCache); - $pconfig = Factory\ConfigFactory::createPConfig($configCache); + Factory\ConfigFactory::createPConfig($configCache); $logger = Factory\LoggerFactory::create('test', $config); - $profiler = Factory\ProfilerFactory::create($logger, $config); $this->app = new App($config, $logger, $profiler, false); - $this->logOutput = FActory\LoggerFactory::enableTest($this->app->getLogger()); parent::setUp(); diff --git a/tests/src/Database/DBStructureTest.php b/tests/src/Database/DBStructureTest.php index 6a5e25e76b..325ad4e5e7 100644 --- a/tests/src/Database/DBStructureTest.php +++ b/tests/src/Database/DBStructureTest.php @@ -16,13 +16,12 @@ class DBStructureTest extends DatabaseTest $basedir = BasePath::create(dirname(__DIR__) . '/../../'); $configLoader = new Cache\ConfigCacheLoader($basedir); $configCache = Factory\ConfigFactory::createCache($configLoader); - Factory\DBFactory::init($configCache, $_SERVER); + $profiler = Factory\ProfilerFactory::create($configCache); + Factory\DBFactory::init($configCache, $profiler, $_SERVER); $config = Factory\ConfigFactory::createConfig($configCache); - $pconfig = Factory\ConfigFactory::createPConfig($configCache); + Factory\ConfigFactory::createPConfig($configCache); $logger = Factory\LoggerFactory::create('test', $config); - $profiler = Factory\ProfilerFactory::create($logger, $config); $this->app = new App($config, $logger, $profiler, false); - $this->logOutput = FActory\LoggerFactory::enableTest($this->app->getLogger()); parent::setUp(); } diff --git a/tests/src/Util/ProfilerTest.php b/tests/src/Util/ProfilerTest.php index f9febeae8d..f242fd43c5 100644 --- a/tests/src/Util/ProfilerTest.php +++ b/tests/src/Util/ProfilerTest.php @@ -26,7 +26,7 @@ class ProfilerTest extends MockedTest */ public function testSetUp() { - $profiler = new Profiler($this->logger, true, true); + $profiler = new Profiler(true, true); } /** @@ -96,7 +96,7 @@ class ProfilerTest extends MockedTest */ public function testSaveTimestamp($timestamp, $name, array $functions) { - $profiler = new Profiler($this->logger, true, true); + $profiler = new Profiler(true, true); foreach ($functions as $function) { $profiler->saveTimestamp($timestamp, $name, $function); @@ -111,7 +111,7 @@ class ProfilerTest extends MockedTest */ public function testReset($timestamp, $name, array $functions) { - $profiler = new Profiler($this->logger, true, true); + $profiler = new Profiler(true, true); $profiler->saveTimestamp($timestamp, $name); $profiler->reset(); @@ -168,7 +168,7 @@ class ProfilerTest extends MockedTest ->shouldReceive('info') ->once(); - $profiler = new Profiler($this->logger, true, true); + $profiler = new Profiler(true, true); foreach ($data as $perf => $items) { foreach ($items['functions'] as $function) { @@ -176,6 +176,6 @@ class ProfilerTest extends MockedTest } } - $profiler->saveLog('test'); + $profiler->saveLog($this->logger, 'test'); } }