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);
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) {
/*
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;
*/
private $config;
+ /**
+ * @var LoggerInterface The logger
+ */
+ private $logger;
+
/**
* @var Profiler The profiler of this app
*/
return $this->basePath;
}
+ /**
+ * The Logger of this app
+ *
+ * @return LoggerInterface
+ */
+ public function getLogger()
+ {
+ return $this->logger;
+ }
+
/**
* The profiler of this 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)
*
*/
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');
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;
$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);
}
$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);
}
}
if ($debugging) {
$loglevel = self::mapLegacyConfigDebugLevel((string)$level);
static::addStreamHandler($logger, $stream, $loglevel);
+ } else {
+ static::addVoidHandler($logger);
}
Logger::init($logger);
throw new InternalServerErrorException('Logger instance incompatible for MonologFactory');
}
}
+
+ public static function addVoidHandler($logger)
+ {
+ if ($logger instanceof Monolog\Logger) {
+ $logger->pushHandler(new Monolog\Handler\NullHandler());
+ }
+ }
}
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 !== '!<unset>!';
+ $renderTime = $configCache->get('rendertime', 'callstack');
+ $renderTime = isset($renderTime) && $renderTime !== '!<unset>!';
+
+ return new Profiler($enabled, $renderTime);
}
}
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();
}
/**
* 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',
}
}
}
- $this->logger->info($message . ": " . $o, ['action' => 'profiling']);
+ $logger->info($message . ": " . $o, ['action' => 'profiling']);
}
/**
$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();
$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();
$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();
}
*/
public function testSetUp()
{
- $profiler = new Profiler($this->logger, true, true);
+ $profiler = new Profiler(true, true);
}
/**
*/
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);
*/
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();
->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) {
}
}
- $profiler->saveLog('test');
+ $profiler->saveLog($this->logger, 'test');
}
}