Files
michaelschiemer/src/Framework/Router/RouterPerformanceMonitor.php
Michael Schiemer 55a330b223 Enable Discovery debug logging for production troubleshooting
- Add DISCOVERY_LOG_LEVEL=debug
- Add DISCOVERY_SHOW_PROGRESS=true
- Temporary changes for debugging InitializerProcessor fixes on production
2025-08-11 20:13:26 +02:00

53 lines
1.4 KiB
PHP

<?php
declare(strict_types=1);
namespace App\Framework\Router;
final class RouterPerformanceMonitor
{
/** @var array<string, array{count: int, total_time: float, avg_time: float}> */
private array $routeStats = [];
public function trackRouteMatch(string $route, float $duration): void
{
if (! isset($this->routeStats[$route])) {
$this->routeStats[$route] = [
'count' => 0,
'total_time' => 0.0,
'avg_time' => 0.0,
];
}
$this->routeStats[$route]['count']++;
$this->routeStats[$route]['total_time'] += $duration;
$this->routeStats[$route]['avg_time'] =
$this->routeStats[$route]['total_time'] / $this->routeStats[$route]['count'];
}
/**
* @param int $thresholdMs
* @return array<string, array{count: int, total_time: float, avg_time: float}>
*/
public function getSlowRoutes(int $thresholdMs = 10): array
{
return array_filter(
$this->routeStats,
fn (array $stats) => $stats['avg_time'] > $thresholdMs
);
}
/**
* @return array<string, array{count: int, total_time: float, avg_time: float}>
*/
public function getAllStats(): array
{
return $this->routeStats;
}
public function reset(): void
{
$this->routeStats = [];
}
}