-
Notifications
You must be signed in to change notification settings - Fork 3
Expand file tree
/
Copy pathServerTimingMiddleware.php
More file actions
39 lines (30 loc) · 1.1 KB
/
ServerTimingMiddleware.php
File metadata and controls
39 lines (30 loc) · 1.1 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
<?php
namespace Fetzi\ServerTiming;
use Psr\Http\Message\ResponseInterface;
use Psr\Http\Message\ServerRequestInterface;
use Psr\Http\Server\MiddlewareInterface;
use Psr\Http\Server\RequestHandlerInterface;
class ServerTimingMiddleware implements MiddlewareInterface
{
private const REQUEST_TIME = 'REQUEST_TIME_FLOAT';
public function __construct(private ServerTimings $serverTimings)
{
}
/**
* {@inheritdoc}
*/
public function process(ServerRequestInterface $request, RequestHandlerInterface $handler): ResponseInterface
{
$serverParams = $request->getServerParams();
if (isset($serverParams[static::REQUEST_TIME])) {
$bootstrap = $this->serverTimings->create('Bootstrap');
$bootstrap->start($serverParams[static::REQUEST_TIME]);
$bootstrap->stop();
}
$requestServerTiming = $this->serverTimings->create('Request');
$requestServerTiming->start();
$response = $handler->handle($request);
$requestServerTiming->stop();
return $this->serverTimings->addToResponse($response);
}
}