]> git.mxchange.org Git - friendica.git/commitdiff
Add Dice logging for Module creation
authorPhilipp <admin@philipp.info>
Fri, 10 Dec 2021 20:15:15 +0000 (21:15 +0100)
committerPhilipp <admin@philipp.info>
Fri, 10 Dec 2021 20:15:15 +0000 (21:15 +0100)
src/App/Router.php
static/defaults.config.php

index b13334ae08ec083e8983677ce033933afde065ab..90c5bcfad96f46606d9aadfc6f251db448e9dded 100644 (file)
@@ -41,6 +41,7 @@ use Friendica\Network\HTTPException;
 use Friendica\Network\HTTPException\MethodNotAllowedException;
 use Friendica\Network\HTTPException\NoContentException;
 use Friendica\Network\HTTPException\NotFoundException;
+use Psr\Log\LoggerInterface;
 
 /**
  * Wrapper for FastRoute\Router
@@ -98,6 +99,12 @@ class Router
        /** @var IManageConfigValues */
        private $config;
 
+       /** @var LoggerInterface */
+       private $logger;
+
+       /** @var float */
+       private $dice_profiler_threshold;
+
        /** @var Dice */
        private $dice;
 
@@ -115,10 +122,11 @@ class Router
         * @param ICanLock            $lock
         * @param IManageConfigValues $config
         * @param Arguments           $args
+        * @param LoggerInterface     $logger
         * @param Dice                $dice
         * @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->l10n = $l10n;
@@ -128,6 +136,8 @@ class Router
                $this->config = $config;
                $this->dice = $dice;
                $this->server = $server;
+               $this->logger = $logger;
+               $this->dice_profiler_threshold = $config->get('system', 'dice_profiler_threshold', 0);
 
                $httpMethod = $this->server['REQUEST_METHOD'] ?? self::GET;
 
@@ -323,8 +333,19 @@ class Router
                        $module_class = $module_class ?: PageNotFound::class;
                }
 
-               /** @var ICanHandleRequests $module */
-               return $this->dice->create($module_class, $module_parameters);
+               $stamp = microtime(true);
+
+               try {
+                       /** @var ICanHandleRequests $module */
+                       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' => $dur, 'module' => $module_class, 'parameters' => $module_parameters]);
+                               }
+                       }
+               }
        }
 
        /**
index 0cfc2f65826f4fa6489f0a4a549cd9ac176a26ea..f114b5a74af5ec74c5224365a44989c032b4fead 100644 (file)
@@ -202,6 +202,10 @@ return [
                // Periodically delete waiting database processes.
                '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)
                // For development only. Disables the message transfer.
                'diaspora_test' => false,