63 lines
2.1 KiB
PHP
63 lines
2.1 KiB
PHP
<?php
|
|
|
|
declare(strict_types=1);
|
|
|
|
namespace App\Framework\Analytics\Middleware;
|
|
|
|
use App\Framework\Analytics\AnalyticsInterface;
|
|
use App\Framework\Analytics\AnalyticsService;
|
|
use App\Framework\Config\Configuration;
|
|
use App\Framework\Context\ExecutionContext;
|
|
use App\Framework\Http\HttpMiddleware;
|
|
use App\Framework\Http\MiddlewareContext;
|
|
use App\Framework\Http\MiddlewarePriority;
|
|
use App\Framework\Http\MiddlewarePriorityAttribute;
|
|
use App\Framework\Http\RequestStateManager;
|
|
use App\Framework\Performance\PerformanceMeter;
|
|
use App\Framework\Queue\FileQueue;
|
|
|
|
#[MiddlewarePriorityAttribute(MiddlewarePriority::BUSINESS_LOGIC)]
|
|
final readonly class AnalyticsMiddleware implements HttpMiddleware
|
|
{
|
|
private AnalyticsService $analytics;
|
|
public function __construct(
|
|
#private AnalyticsInterface $analytics = new AnalyticsService($queue, $executionContext, $config),
|
|
private ExecutionContext $executionContext,
|
|
private Configuration $config,
|
|
private PerformanceMeter $performanceMeter
|
|
) {
|
|
$this->analytics = new AnalyticsService(new FileQueue(__DIR__.'/analytics-data'), $this->executionContext, $this->config);
|
|
}
|
|
|
|
public function __invoke(MiddlewareContext $context, callable $next, RequestStateManager $stateManager): MiddlewareContext
|
|
{
|
|
$startTime = microtime(true);
|
|
|
|
|
|
$request = $context->request;
|
|
|
|
// Track page view
|
|
/*$this->analytics->trackPageView(
|
|
$context->request->path,
|
|
[
|
|
'method' => $request->method->value,
|
|
'query_params' => $request->queryParams,
|
|
'referer' => $request->headers->get('Referer')
|
|
]
|
|
);*/
|
|
|
|
$context = $next($context);
|
|
|
|
// Track response performance
|
|
$responseTime = (microtime(true) - $startTime) * 1000;
|
|
|
|
/*$this->analytics->trackPerformance('response_time', $responseTime, [
|
|
'path' => $request->path,
|
|
'method' => $request->method->value,
|
|
'status_code' => $context->response->status->value
|
|
]);*/
|
|
|
|
return $context;
|
|
}
|
|
}
|