environment('testing')) { $override = config('http_observability.slow_request.test_duration_ms'); if (is_numeric($override)) { $durationMs = (float) $override; } } $threshold = max(1, (int) config('http_observability.slow_request.threshold_ms', 750)); if ($durationMs < $threshold) { return $response; } $route = $request->route(); $routeUri = is_object($route) && method_exists($route, 'uri') ? (string) $route->uri() : $this->uris->normalize($request->path()); $payload = [ 'time' => now()->toIso8601String(), 'method' => $request->getMethod(), 'route_name' => is_object($route) ? $route->getName() : null, 'route_uri' => $routeUri, 'status' => $response->getStatusCode(), 'duration_ms' => round($durationMs, 1), 'peak_memory_mb' => round(memory_get_peak_usage(true) / 1048576, 2), 'authenticated' => $request->user() !== null, 'inertia' => $this->isInertia($request, $response), ]; Log::channel('slow-http')->info(json_encode($payload, JSON_UNESCAPED_SLASHES)); return $response; } private function isInertia(Request $request, Response $response): bool { if ($request->headers->has(InertiaHeader::INERTIA)) { return true; } return $response->headers->has(InertiaHeader::INERTIA) || $response->headers->get('Vary') === 'X-Inertia' || str_contains((string) $response->headers->get('Vary'), 'X-Inertia'); } }