Merge pull request #11086 from nupplaphil/feat/profile_dice

Add Dice logging for Module creation
This commit is contained in:
Hypolite Petovan 2021-12-10 19:20:11 -05:00 committed by GitHub
commit d47a792f51
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 28 additions and 3 deletions

View File

@ -41,6 +41,7 @@ use Friendica\Network\HTTPException;
use Friendica\Network\HTTPException\MethodNotAllowedException; use Friendica\Network\HTTPException\MethodNotAllowedException;
use Friendica\Network\HTTPException\NoContentException; use Friendica\Network\HTTPException\NoContentException;
use Friendica\Network\HTTPException\NotFoundException; use Friendica\Network\HTTPException\NotFoundException;
use Psr\Log\LoggerInterface;
/** /**
* Wrapper for FastRoute\Router * Wrapper for FastRoute\Router
@ -98,6 +99,12 @@ class Router
/** @var IManageConfigValues */ /** @var IManageConfigValues */
private $config; private $config;
/** @var LoggerInterface */
private $logger;
/** @var float */
private $dice_profiler_threshold;
/** @var Dice */ /** @var Dice */
private $dice; private $dice;
@ -115,10 +122,11 @@ class Router
* @param ICanLock $lock * @param ICanLock $lock
* @param IManageConfigValues $config * @param IManageConfigValues $config
* @param Arguments $args * @param Arguments $args
* @param LoggerInterface $logger
* @param Dice $dice * @param Dice $dice
* @param RouteCollector|null $routeCollector * @param RouteCollector|null $routeCollector
*/ */
public function __construct(array $server, string $baseRoutesFilepath, L10n $l10n, ICanCache $cache, ICanLock $lock, IManageConfigValues $config, Arguments $args, Dice $dice, RouteCollector $routeCollector = null) public function __construct(array $server, string $baseRoutesFilepath, L10n $l10n, ICanCache $cache, ICanLock $lock, IManageConfigValues $config, Arguments $args, LoggerInterface $logger, Dice $dice, RouteCollector $routeCollector = null)
{ {
$this->baseRoutesFilepath = $baseRoutesFilepath; $this->baseRoutesFilepath = $baseRoutesFilepath;
$this->l10n = $l10n; $this->l10n = $l10n;
@ -128,6 +136,8 @@ class Router
$this->config = $config; $this->config = $config;
$this->dice = $dice; $this->dice = $dice;
$this->server = $server; $this->server = $server;
$this->logger = $logger;
$this->dice_profiler_threshold = $config->get('system', 'dice_profiler_threshold', 0);
$httpMethod = $this->server['REQUEST_METHOD'] ?? self::GET; $httpMethod = $this->server['REQUEST_METHOD'] ?? self::GET;
@ -323,8 +333,19 @@ class Router
$module_class = $module_class ?: PageNotFound::class; $module_class = $module_class ?: PageNotFound::class;
} }
$stamp = microtime(true);
try {
/** @var ICanHandleRequests $module */ /** @var ICanHandleRequests $module */
return $this->dice->create($module_class, $module_parameters); return $this->dice->create($module_class, $module_parameters);
} finally {
if ($this->dice_profiler_threshold > 0) {
$dur = floatval(microtime(true) - $stamp);
if ($dur >= $this->dice_profiler_threshold) {
$this->logger->warning('Dice module creation lasts too long.', ['duration' => round($dur, 3), 'module' => $module_class, 'parameters' => $module_parameters]);
}
}
}
} }
/** /**

View File

@ -202,6 +202,10 @@ return [
// Periodically delete waiting database processes. // Periodically delete waiting database processes.
'delete_sleeping_processes' => false, 'delete_sleeping_processes' => false,
// dice_profiler_threshold (Float)
// For profiling Dice class creation (0 = disabled, >0 = seconds threshold for profiling)
'dice_profiler_threshold' => 0.5,
// diaspora_test (Boolean) // diaspora_test (Boolean)
// For development only. Disables the message transfer. // For development only. Disables the message transfer.
'diaspora_test' => false, 'diaspora_test' => false,