Kullanıcı uygulamaya istek gönderir ve uygulamada cevap verir. Bu bildiğimiz sistem akışıdır ama bu işlem toplam olarak ne kadar sürer? Eğer bunu öğrenmek isterseniz aşağıdaki örneği kullanabilirsiniz.


AuditControllerInterface


declare(strict_types=1);

namespace AppBundle\Controller;

interface AuditControllerInterface
{
}

DefaultController


declare(strict_types=1);

namespace AppBundle\Controller;

use Sensio\Bundle\FrameworkExtraBundle\Configuration\Method;
use Symfony\Component\HttpFoundation\Response;

class DefaultController implements AuditControllerInterface
{
/**
* @Method({"GET"})
* @Route("")
*/
public function indexAction(): Response
{
sleep(2);

$template = $this->templating->render('AppBundle:default:index.html.twig', []);

return (new Response())->setContent($template);
}
}

KernelResponseListener


declare(strict_types=1);

namespace AppBundle\Event\Listener;

use AppBundle\Controller\AuditControllerInterface;
use Symfony\Component\HttpKernel\Controller\ControllerResolver;
use Symfony\Component\HttpKernel\Event\FilterResponseEvent;

class KernelResponseListener
{
private $controllerResolver;

public function __construct(ControllerResolver $controllerResolver)
{
$this->controllerResolver = $controllerResolver;
}

public function onKernelResponse(FilterResponseEvent $event)
{
if ($event->isMasterRequest()) {
$request = $event->getRequest();

$controllers = $this->controllerResolver->getController($request);
if ($controllers[0] instanceof AuditControllerInterface) {
$this->audit($request->server->get('REQUEST_TIME_FLOAT'), microtime(true));
}
}
}

private function audit(float $reqTime, float $resTime): void
{
$reqMilliSecond = (int) ($reqTime * 1000);
$resMilliSecond = (int) ($resTime * 1000);
$reqMicroSecond = (int) ($reqTime * 1000000);
$resMicroSecond = (int) ($resTime * 1000000);

$audit = [
'milliseconds' => [
'req' => $reqMilliSecond,
'res' => $resMilliSecond,
'elapsed' => $resMilliSecond - $reqMilliSecond,
],
'microseconds' => [
'req' => $reqMicroSecond,
'res' => $resMicroSecond,
'elapsed' => $resMicroSecond - $reqMicroSecond,
]
];

print_r($audit);
}
}

services:
AppBundle\Event\Listener\KernelResponseListener:
arguments:
- '@debug.controller_resolver.inner'
tags:
- { name: kernel.event_listener, event: kernel.response, method: onKernelResponse }

Test


Eğer http://symfony.dev/app_dev.php/ adresine giderseniz, aşağıdakine benzer bir sonuç göreceksiniz. Sayfanın altındaki Symfony profiler barındaki süre "millisecond" olarak belirlenmiştir yani sizin milliseconds->elapsed (2565) sürenize çok yakın olduğunu göreceksiniz.


Array
(
[milliseconds] => Array
(
[req] => 1523099189672
[res] => 1523099192237
[elapsed] => 2565
)

[microseconds] => Array
(
[req] => 1523099189672000
[res] => 1523099192237378
[elapsed] => 2565378
)

)