Skip to content

Commit d1df313

Browse files
authored
feat: support for octane (#106)
1 parent a1e64a5 commit d1df313

File tree

3 files changed

+17
-1
lines changed

3 files changed

+17
-1
lines changed

src/DataProviders/LaravelResponseDataProvider.php

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,12 +10,14 @@
1010
use Treblle\Php\Contract\ErrorDataProvider;
1111
use Treblle\Php\DataTransferObject\Response;
1212
use Treblle\Php\Contract\ResponseDataProvider;
13+
use Symfony\Component\HttpFoundation\Request as SymfonyRequest;
1314
use Symfony\Component\HttpFoundation\Response as SymfonyResponse;
1415

1516
final class LaravelResponseDataProvider implements ResponseDataProvider
1617
{
1718
public function __construct(
1819
private readonly FieldMasker $fieldMasker,
20+
private \Illuminate\Http\Request|SymfonyRequest $request,
1921
private readonly JsonResponse|\Illuminate\Http\Response|SymfonyResponse $response,
2022
private ErrorDataProvider &$errorDataProvider,
2123
) {
@@ -58,6 +60,12 @@ private function getLoadTimeInMilliseconds(): float
5860
$currentTimeInMilliseconds = microtime(true) * 1000;
5961
$requestTimeInMilliseconds = microtime(true) * 1000;
6062

63+
if ($this->request->attributes->has('treblle_request_started_at')) {
64+
$requestTimeInMilliseconds = $this->request->attributes->get('treblle_request_started_at') * 1000;
65+
66+
return $currentTimeInMilliseconds - $requestTimeInMilliseconds;
67+
}
68+
6169
if (isset($_SERVER['REQUEST_TIME_FLOAT'])) {
6270
$requestTimeInMilliseconds = (float)$_SERVER['REQUEST_TIME_FLOAT'] * 1000;
6371
} elseif (defined('LARAVEL_START')) {

src/Middlewares/TreblleMiddleware.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -48,7 +48,7 @@ public function terminate(Request $request, JsonResponse|Response|SymfonyRespons
4848
$fieldMasker = new FieldMasker($maskedFields);
4949
$errorProvider = new InMemoryErrorDataProvider();
5050
$requestProvider = new LaravelRequestDataProvider($fieldMasker, $request);
51-
$responseProvider = new LaravelResponseDataProvider($fieldMasker, $response, $errorProvider);
51+
$responseProvider = new LaravelResponseDataProvider($fieldMasker, $request, $response, $errorProvider);
5252

5353
if (! empty($response->exception)) {
5454
$errorProvider->addError(new Error(

src/TreblleServiceProvider.php

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@
77
use function config;
88
use Illuminate\Routing\Router;
99
use Illuminate\Support\ServiceProvider;
10+
use Illuminate\Contracts\Events\Dispatcher;
1011
use Illuminate\Foundation\Console\AboutCommand;
1112
use Treblle\Laravel\Middlewares\TreblleMiddleware;
1213
use Illuminate\Contracts\Container\BindingResolutionException;
@@ -34,6 +35,13 @@ public function boot(): void
3435
$router->aliasMiddleware('treblle', TreblleMiddleware::class);
3536
}
3637

38+
/** @var Dispatcher $events */
39+
$events = $this->app->make(Dispatcher::class);
40+
41+
$events->listen('Laravel\Octane\Events\RequestReceived', function ($event): void {
42+
$event->request->attributes->set('treblle_request_started_at', microtime(true));
43+
});
44+
3745
AboutCommand::add(
3846
section: 'Treblle',
3947
data: static fn (): array => [

0 commit comments

Comments
 (0)